diff --git a/.circleci/config.yml b/.circleci/config.yml index 7f101ed684..17a37c5d3c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -6,6 +6,7 @@ parameters: default: false orbs: browser-tools: circleci/browser-tools@1.4.4 + win: circleci/windows@5.0 jobs: build: docker: @@ -28,9 +29,9 @@ jobs: name: Build command: | if [ "${CIRCLE_BRANCH}" == "master" ]; then - NX_BIN_URL=http://127.0.0.1:8080/assets/js/soljson NX_WASM_URL=http://127.0.0.1:8080/assets/js/soljson NPM_URL=http://localhost:9090/ yarn build:production + NX_BIN_URL=http://127.0.0.1:8080/assets/js/soljson NX_WASM_URL=http://127.0.0.1:8080/assets/js/soljson NX_NPM_URL=http://127.0.0.1:9090/ yarn build:production else - NX_BIN_URL=http://127.0.0.1:8080/assets/js/soljson NX_WASM_URL=http://127.0.0.1:8080/assets/js/soljson NPM_URL=http://localhost:9090/ yarn build + NX_BIN_URL=http://127.0.0.1:8080/assets/js/soljson NX_WASM_URL=http://127.0.0.1:8080/assets/js/soljson NX_NPM_URL=http://127.0.0.1:9090/ yarn build fi - run: yarn run build:e2e @@ -50,6 +51,32 @@ jobs: paths: - "persist" + build-desktop: + docker: + - image: cimg/node:20.0.0-browsers + + resource_class: + xlarge + working_directory: ~/remix-project + steps: + - checkout + - restore_cache: + keys: + - v1-deps-{{ checksum "yarn.lock" }} + - run: yarn + - save_cache: + key: v1-deps-{{ checksum "yarn.lock" }} + paths: + - node_modules + - run: + name: Build + command: | + yarn build:desktop + - run: mkdir persist && zip -0 -r persist/desktopbuild.zip dist/apps/remix-ide + - persist_to_workspace: + root: . + paths: + - "persist" build-plugin: docker: @@ -77,6 +104,126 @@ jobs: paths: - "persist" + build-remixdesktop-linux: + machine: + image: ubuntu-2004:current + resource_class: + xlarge + working_directory: ~/remix-project + steps: + - run: ldd --version + - checkout + - attach_workspace: + at: . + - run: unzip ./persist/desktopbuild.zip + - run: + command: | + node -v + mkdir apps/remixdesktop/build + cp -r dist/apps/remix-ide apps/remixdesktop/build + cd apps/remixdesktop/ + yarn add node-pty + yarn --ignore-optional + yarn add @remix-project/remix-ws-templates + PUBLISH_FOR_PULL_REQUEST='true' yarn dist + rm -rf release/*-unpacked + - save_cache: + key: remixdesktop-linux-deps-{{ checksum "apps/remixdesktop/yarn.lock" }} + paths: + - apps/remixdesktop/node_modules + - store_artifacts: + path: apps/remixdesktop/release/ + destination: remixdesktop-linux + + build-remixdesktop-windows: + executor: + name: win/default # executor type + size: xlarge # can be medium, large, xlarge, 2xlarge + shell: bash.exe + working_directory: ~/remix-project + steps: + - checkout + - attach_workspace: + at: . + - run: unzip ./persist/desktopbuild.zip + - restore_cache: + key: node-20-windows-v3 + - run: + command: | + nvm install 20.0.0 + nvm use 20.0.0 + node -v + npx -v + npm install --global yarn + yarn -v + - save_cache: + key: node-20-windows-v3 + paths: + - /ProgramData/nvm/v20.0.0 + - restore_cache: + keys: + - remixdesktop-windows-deps-{{ checksum "apps/remixdesktop/yarn.lock" }} + - run: + command: | + mkdir apps/remixdesktop/build + cp -r dist/apps/remix-ide apps/remixdesktop/build + cd apps/remixdesktop/ + yarn + PUBLISH_FOR_PULL_REQUEST='true' yarn dist + rm -rf release/*-unpacked + - save_cache: + key: remixdesktop-windows-deps-{{ checksum "apps/remixdesktop/yarn.lock" }} + paths: + - apps/remixdesktop/node_modules + - store_artifacts: + path: apps/remixdesktop/release/ + destination: remixdesktop-windows + + build-remixdesktop-mac: + macos: + xcode: 14.2.0 + resource_class: + macos.m1.large.gen1 + working_directory: ~/remix-project + steps: + - checkout + - attach_workspace: + at: . + - run: unzip ./persist/desktopbuild.zip + - run: + command: | + ls -la dist/apps/remix-ide + nvm install 20.0.0 + nvm use 20.0.0 + - restore_cache: + keys: + - remixdesktop-deps-mac-{{ checksum "apps/remixdesktop/yarn.lock" }} + - run: + command: | + nvm use 20.0.0 + cd apps/remixdesktop && yarn + yarn add @remix-project/remix-ws-templates + - save_cache: + key: remixdesktop-deps-mac-{{ checksum "apps/remixdesktop/yarn.lock" }} + paths: + - apps/remixdesktop/node_modules + # use USE_HARD_LINK=false https://github.com/electron-userland/electron-builder/issues/3179 + - run: + command: | + nvm use 20.0.0 + mkdir apps/remixdesktop/build + cp -r dist/apps/remix-ide apps/remixdesktop/build + cd apps/remixdesktop + yarn + yarn installRipGrepMacOXarm64 + PUBLISH_FOR_PULL_REQUEST='true' USE_HARD_LINKS=false yarn dist --mac --arm64 + yarn installRipGrepMacOXx64 + PUBLISH_FOR_PULL_REQUEST='true' USE_HARD_LINKS=false yarn dist --mac --x64 + rm -rf release/mac* + - store_artifacts: + path: apps/remixdesktop/release/ + destination: remixdesktop-mac + lint: docker: - image: cimg/node:20.0.0-browsers @@ -166,7 +313,7 @@ jobs: at: . - run: unzip ./persist/dist.zip - run: yarn install --cwd ./apps/remix-ide-e2e --modules-folder ../../node_modules - + - run: mkdir node_modules/hardhat && wget https://unpkg.com/hardhat/console.sol -O node_modules/hardhat/console.sol - run: ls -la ./dist/apps/remix-ide/assets/js - run: yarn run selenium-install || yarn run selenium-install - when: @@ -295,6 +442,19 @@ workflows: unless: << pipeline.parameters.run_flaky_tests >> jobs: - build + - build-desktop: + filters: + branches: + only: ['master', /.*desktop.*/] + - build-remixdesktop-mac: + requires: + - build-desktop + - build-remixdesktop-windows: + requires: + - build-desktop + - build-remixdesktop-linux: + requires: + - build-desktop - build-plugin: matrix: parameters: diff --git a/.gitignore b/.gitignore index ad98096af7..01477ff7f7 100644 --- a/.gitignore +++ b/.gitignore @@ -57,3 +57,10 @@ testem.log .DS_Store .vscode/settings.json .vscode/launch.json + +apps/remixdesktop/.webpack +apps/remixdesktop/out +apps/remixdesktop/release/ +apps/remix-ide/src/assets/list.json +apps/remix-ide/src/assets/esbuild.wasm +apps/remixdesktop/build* diff --git a/.prettierrc.json b/.prettierrc.json index b98b463e1a..07681f5b0a 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -4,5 +4,6 @@ "bracketSpacing": false, "useTabs": false, "semi": false, - "singleQuote": true + "singleQuote": true, + "bracketSpacing": false } diff --git a/apps/circuit-compiler/src/app/components/feedback.tsx b/apps/circuit-compiler/src/app/components/feedback.tsx index b4c9367699..164c39e1ac 100644 --- a/apps/circuit-compiler/src/app/components/feedback.tsx +++ b/apps/circuit-compiler/src/app/components/feedback.tsx @@ -22,7 +22,7 @@ export function CompilerFeedback ({ feedback, filePathToId, hideWarnings, openEr
- { feedback } + <>{ feedback }
diff --git a/apps/circuit-compiler/src/main.tsx b/apps/circuit-compiler/src/main.tsx index b63438d846..aa05d11b2d 100644 --- a/apps/circuit-compiler/src/main.tsx +++ b/apps/circuit-compiler/src/main.tsx @@ -1,8 +1,9 @@ import React from 'react' -import ReactDOM from 'react-dom' +import { createRoot } from 'react-dom/client'; import App from './app/app' -ReactDOM.render( - , - document.getElementById('root') -) \ No newline at end of file +const container = document.getElementById('root'); + +if (container) { + createRoot(container).render(); +} \ No newline at end of file diff --git a/apps/debugger/src/main.tsx b/apps/debugger/src/main.tsx index be9ae3d572..9c9f5934e7 100644 --- a/apps/debugger/src/main.tsx +++ b/apps/debugger/src/main.tsx @@ -1,6 +1,10 @@ import React from 'react' -import ReactDOM from 'react-dom' +import { createRoot } from 'react-dom/client'; import App from './app/app' -ReactDOM.render(, document.getElementById('root')) +const container = document.getElementById('root'); + +if (container) { + createRoot(container).render(); +} diff --git a/apps/doc-gen/src/app/views/ErrorView.tsx b/apps/doc-gen/src/app/views/ErrorView.tsx index 31a3b90a73..38e6a57cfd 100644 --- a/apps/doc-gen/src/app/views/ErrorView.tsx +++ b/apps/doc-gen/src/app/views/ErrorView.tsx @@ -1,6 +1,6 @@ import React from 'react' -export const ErrorView: React.FC = () => { +export const ErrorView = () => { return (
+const container = document.getElementById('root'); + +if (container) { + createRoot(container).render( - , - document.getElementById('root'), -) + ); +} diff --git a/apps/doc-viewer/src/main.tsx b/apps/doc-viewer/src/main.tsx index b8ec0b96a0..af59bd3e02 100644 --- a/apps/doc-viewer/src/main.tsx +++ b/apps/doc-viewer/src/main.tsx @@ -1,10 +1,11 @@ import React from 'react' -import ReactDOM from 'react-dom' +import { createRoot } from 'react-dom/client'; import App from './app/App' -ReactDOM.render( - +const container = document.getElementById('root'); + +if (container) { + createRoot(container).render( - , - document.getElementById('root') -) + ); +} diff --git a/apps/etherscan/src/app/EtherscanPluginClient.ts b/apps/etherscan/src/app/EtherscanPluginClient.ts index ec545f806e..87e26acdb4 100644 --- a/apps/etherscan/src/app/EtherscanPluginClient.ts +++ b/apps/etherscan/src/app/EtherscanPluginClient.ts @@ -9,8 +9,8 @@ export class EtherscanPluginClient extends PluginClient { constructor() { super() - createClient(this) this.internalEvents = new EventManager() + createClient(this) this.onload() } diff --git a/apps/etherscan/src/app/app.tsx b/apps/etherscan/src/app/app.tsx index 39e89e00d7..bf553d8319 100644 --- a/apps/etherscan/src/app/app.tsx +++ b/apps/etherscan/src/app/app.tsx @@ -40,22 +40,27 @@ const App = () => { contractsRef.current = contracts - useEffect(() => { - plugin.internalEvents.on('etherscan_activated', () => { - plugin.on('solidity', 'compilationFinished', (fileName: string, source: CompilationFileSources, languageVersion: string, data: CompilationResult) => { - const newContractsNames = getNewContractNames(data) + const setListeners = () => { + plugin.on('solidity', 'compilationFinished', (fileName: string, source: CompilationFileSources, languageVersion: string, data: CompilationResult) => { + const newContractsNames = getNewContractNames(data) + + const newContractsToSave: string[] = [...contractsRef.current, ...newContractsNames] - const newContractsToSave: string[] = [...contractsRef.current, ...newContractsNames] + const uniqueContracts: string[] = [...new Set(newContractsToSave)] - const uniqueContracts: string[] = [...new Set(newContractsToSave)] + setContracts(uniqueContracts) + }) + plugin.on('blockchain' as any, 'networkStatus', (result) => { + setNetworkName(`${result.network.name} ${result.network.id !== '-' ? `(Chain id: ${result.network.id})` : '(Not supported)'}`) + }) + // @ts-ignore + plugin.call('blockchain', 'getCurrentNetworkStatus').then((result: any) => setNetworkName(`${result.network.name} ${result.network.id !== '-' ? `(Chain id: ${result.network.id})` : '(Not supported)'}`)) - setContracts(uniqueContracts) - }) - plugin.on('blockchain' as any, 'networkStatus', (result) => { - setNetworkName(`${result.network.name} ${result.network.id !== '-' ? `(Chain id: ${result.network.id})` : '(Not supported)'}`) - }) - // @ts-ignore - plugin.call('blockchain', 'getCurrentNetworkStatus').then((result: any) => setNetworkName(`${result.network.name} ${result.network.id !== '-' ? `(Chain id: ${result.network.id})` : '(Not supported)'}`)) + } + + useEffect(() => { + plugin.onload(() => { + setListeners() }) }, []) diff --git a/apps/etherscan/src/app/components/HeaderWithSettings.tsx b/apps/etherscan/src/app/components/HeaderWithSettings.tsx index 8f302dd596..5818b2bc7e 100644 --- a/apps/etherscan/src/app/components/HeaderWithSettings.tsx +++ b/apps/etherscan/src/app/components/HeaderWithSettings.tsx @@ -13,7 +13,7 @@ interface IconProps { from: string } -const HomeIcon: React.FC = ({from}: IconProps) => { +const HomeIcon = ({from}: IconProps) => { return ( = ({from}: IconProps) => { ) } -const ReceiptsIcon: React.FC = ({from}: IconProps) => { +const ReceiptsIcon = ({from}: IconProps) => { return ( = ({from}: IconProps) => { ) } -const SettingsIcon: React.FC = ({from}: IconProps) => { +const SettingsIcon = ({from}: IconProps) => { return ( = ({from}: IconProps) => { ) } -export const HeaderWithSettings: React.FC = ({title = '', from}) => { +export const HeaderWithSettings = ({title = '', from}) => { return ( - - {() => ( -
+
{title}
@@ -79,7 +77,5 @@ export const HeaderWithSettings: React.FC = ({title = '', from}) => {
- )} - ) } diff --git a/apps/etherscan/src/app/components/SubmitButton.tsx b/apps/etherscan/src/app/components/SubmitButton.tsx index 080fafc708..9f4bed6200 100644 --- a/apps/etherscan/src/app/components/SubmitButton.tsx +++ b/apps/etherscan/src/app/components/SubmitButton.tsx @@ -8,7 +8,7 @@ interface Props { disable?: boolean } -export const SubmitButton: React.FC = ({text, dataId, isSubmitting = false, disable = true}) => { +export const SubmitButton = ({text, dataId, isSubmitting = false, disable = true}) => { return (
- -
- ) - }} - + +
+ + + +
) } -const ReceiptsTable: React.FC<{receipts: Receipt[]}> = ({receipts}) => { +const ReceiptsTable = ({receipts}) => { return (
Receipts
diff --git a/apps/etherscan/src/app/views/VerifyView.tsx b/apps/etherscan/src/app/views/VerifyView.tsx index ab6e7c641c..ca70dba74c 100644 --- a/apps/etherscan/src/app/views/VerifyView.tsx +++ b/apps/etherscan/src/app/views/VerifyView.tsx @@ -24,7 +24,7 @@ interface FormValues { expectedImplAddress?: string } -export const VerifyView: React.FC = ({apiKey, client, contracts, onVerifiedContract, networkName}) => { +export const VerifyView = ({apiKey, client, contracts, onVerifiedContract, networkName}) => { const [results, setResults] = useState('') const [selectedContract, setSelectedContract] = useState('') const [showConstructorArgs, setShowConstructorArgs] = useState(false) diff --git a/apps/etherscan/src/main.tsx b/apps/etherscan/src/main.tsx index 5f17c9ab24..077b7ac8f4 100644 --- a/apps/etherscan/src/main.tsx +++ b/apps/etherscan/src/main.tsx @@ -1,11 +1,14 @@ -import {StrictMode} from 'react' +import React from 'react' import * as ReactDOM from 'react-dom' - +import { createRoot } from 'react-dom/client'; import App from './app/app' -ReactDOM.render( - + +const container = document.getElementById('root'); + +if (container) { + createRoot(container).render( - , - document.getElementById('root') -) + ); +} + diff --git a/apps/remix-ide-e2e/src/commands/addFile.ts b/apps/remix-ide-e2e/src/commands/addFile.ts index 08e9ff6d5b..a3296e8848 100644 --- a/apps/remix-ide-e2e/src/commands/addFile.ts +++ b/apps/remix-ide-e2e/src/commands/addFile.ts @@ -44,9 +44,9 @@ function addFile(browser: NightwatchBrowser, name: string, content: NightwatchCo }) } else { browser.click('[data-id="fileExplorerNewFilecreateNewFile"]') - .waitForElementContainsText('*[data-id$="/blank"]', '', 60000) - .sendKeys('*[data-id$="/blank"] .remixui_items', name) - .sendKeys('*[data-id$="/blank"] .remixui_items', browser.Keys.ENTER) + .waitForElementContainsText('*[data-id$="fileExplorerTreeItemInput"]', '', 60000) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', name) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) // isvisible is protocol action called isDisplayed https://www.selenium.dev/selenium/docs/api/java/org/openqa/selenium/WebElement.html#isDisplayed-- .isVisible({ selector: `li[data-id="treeViewLitreeViewItem${name}"]`, diff --git a/apps/remix-ide-e2e/src/commands/enableClipBoard.ts b/apps/remix-ide-e2e/src/commands/enableClipBoard.ts new file mode 100644 index 0000000000..4f5a8ed8da --- /dev/null +++ b/apps/remix-ide-e2e/src/commands/enableClipBoard.ts @@ -0,0 +1,35 @@ +import { NightwatchBrowser } from 'nightwatch' +import EventEmitter from 'events' + +class EnableClipBoard extends EventEmitter { + command (this: NightwatchBrowser, remember:boolean, accept: boolean): NightwatchBrowser { + const browser = this.api + + if(browser.browserName.indexOf('chrome') > -1){ + const chromeBrowser = (browser as any).chrome + chromeBrowser.setPermission('clipboard-read', 'granted') + chromeBrowser.setPermission('clipboard-write', 'granted') + // test it + browser.executeAsyncScript(function (done) { + navigator.clipboard.writeText('test').then(function () { + navigator.clipboard.readText().then(function (text) { + console.log('Pasted content: ', text) + done(text) + }).catch(function (err) { + console.error('Failed to read clipboard contents: ', err) + done() + }) + }).catch(function (err) { + console.error('Failed to write to clipboard: ', err) + done() + }) + }, [], function (result) { + browser.assert.ok((result as any).value === 'test', 'copy paste should work') + }) + } + this.emit('complete') + return this + } +} + +module.exports = EnableClipBoard diff --git a/apps/remix-ide-e2e/src/commands/getClipBoardContent.ts b/apps/remix-ide-e2e/src/commands/getClipBoardContent.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/apps/remix-ide-e2e/src/commands/hideToolTips.ts b/apps/remix-ide-e2e/src/commands/hideToolTips.ts new file mode 100644 index 0000000000..00a05e26c3 --- /dev/null +++ b/apps/remix-ide-e2e/src/commands/hideToolTips.ts @@ -0,0 +1,29 @@ +import {NightwatchBrowser} from 'nightwatch' +import EventEmitter from 'events' + +class HideToolTips extends EventEmitter { + command(this: NightwatchBrowser) { + browser + .perform((done) => { + browser.execute(function () { + // hide tooltips + function addStyle(styleString) { + const style = document.createElement('style') + style.textContent = styleString + document.head.append(style) + } + addStyle(` + .popover { + display:none !important; + } + `) + }, [], done()) + }) + .perform((done) => { + done() + this.emit('complete') + }) + } +} + +module.exports = HideToolTips diff --git a/apps/remix-ide-e2e/src/commands/noWorkerErrorFor.ts b/apps/remix-ide-e2e/src/commands/noWorkerErrorFor.ts index c9364c2552..08bea75d61 100644 --- a/apps/remix-ide-e2e/src/commands/noWorkerErrorFor.ts +++ b/apps/remix-ide-e2e/src/commands/noWorkerErrorFor.ts @@ -16,6 +16,7 @@ class NoWorkerErrorFor extends EventEmitter { function noWorkerErrorFor (browser: NightwatchBrowser, version: string, callback: VoidFunction) { browser .setSolidityCompilerVersion(version) + .waitForElementVisible('*[data-id="compilerContainerCompileBtn"]') .click('*[data-id="compilerContainerCompileBtn"]') .waitForElementPresent('*[data-id="compilationFinishedWith_' + version + '"]', 60000) .notContainsText('*[data-id="compiledErrors"]', `Worker error: Uncaught NetworkError: Failed to execute 'importScripts' on 'WorkerGlobalScope': The script at 'https://binaries.soliditylang.org/wasm/${version}' failed to load.`) diff --git a/apps/remix-ide-e2e/src/commands/refreshPage.ts b/apps/remix-ide-e2e/src/commands/refreshPage.ts index 98a9011bca..03f58f0740 100644 --- a/apps/remix-ide-e2e/src/commands/refreshPage.ts +++ b/apps/remix-ide-e2e/src/commands/refreshPage.ts @@ -1,16 +1,33 @@ -import { NightwatchBrowser } from 'nightwatch' +import {NightwatchBrowser} from 'nightwatch' import EventEmitter from 'events' class RefreshPage extends EventEmitter { - command(this: NightwatchBrowser) { - browser.refresh() - .verifyLoad() - .perform((done) => { - done() - this.emit('complete') - }) - } -} + command(this: NightwatchBrowser) { + browser + .refresh() + .verifyLoad() + .perform((done) => { + //if (hideToolTips) { + browser.execute(function () { + // hide tooltips + function addStyle(styleString) { + const style = document.createElement('style') + style.textContent = styleString + document.head.append(style) + } + addStyle(` + .popover { + display:none !important; + } + `) + }, [], done()) + }) + .perform((done) => { + done() + this.emit('complete') + }) + } +} -module.exports = RefreshPage \ No newline at end of file +module.exports = RefreshPage diff --git a/apps/remix-ide-e2e/src/commands/renamePath.ts b/apps/remix-ide-e2e/src/commands/renamePath.ts index 220aeb9544..d87faf7261 100644 --- a/apps/remix-ide-e2e/src/commands/renamePath.ts +++ b/apps/remix-ide-e2e/src/commands/renamePath.ts @@ -34,16 +34,8 @@ function renamePath (browser: NightwatchBrowser, path: string, newFileName: stri }, [path], function () { browser .click('#menuitemrename') - .perform((client, doneSetValue) => { - browser.execute(function (path, addvalue) { - document.querySelector('[data-path="' + path + '"]').innerHTML = addvalue - }, [path, newFileName], () => { - doneSetValue() - }) - }) - .pause(1000) - .click('div[data-id="remixIdeMainPanel"]') // focus out to save - .pause(2000) + .sendKeys('[data-input-path="' + path + '"]', newFileName) + .sendKeys('[data-input-path="' + path + '"]', browser.Keys.ENTER) .waitForElementNotPresent('[data-path="' + path + '"]') .waitForElementPresent('[data-path="' + renamedPath + '"]') .perform(() => { diff --git a/apps/remix-ide-e2e/src/commands/sendLowLevelTx.ts b/apps/remix-ide-e2e/src/commands/sendLowLevelTx.ts index 94f4a249d3..815c147ad7 100644 --- a/apps/remix-ide-e2e/src/commands/sendLowLevelTx.ts +++ b/apps/remix-ide-e2e/src/commands/sendLowLevelTx.ts @@ -9,7 +9,7 @@ class sendLowLevelTx extends EventEmitter { .sendKeys(`#instance${address} #deployAndRunLLTxCalldata`, ['_', this.api.Keys.BACK_SPACE, callData]) .waitForElementVisible('#value') .clearValue('#value') - .sendKeys('#value', ['1', this.api.Keys.BACK_SPACE, value]) + .sendKeys('#value', value) .pause(2000) .scrollAndClick(`#instance${address} #deployAndRunLLTxSendTransaction`) .perform(() => { diff --git a/apps/remix-ide-e2e/src/commands/setSolidityCompilerVersion.ts b/apps/remix-ide-e2e/src/commands/setSolidityCompilerVersion.ts index 1000ed6458..2759ec4180 100644 --- a/apps/remix-ide-e2e/src/commands/setSolidityCompilerVersion.ts +++ b/apps/remix-ide-e2e/src/commands/setSolidityCompilerVersion.ts @@ -8,15 +8,16 @@ class SetSolidityCompilerVersion extends EventEmitter { selector: "//*[@id='versionSelector']", locateStrategy: 'xpath' }) - .waitForElementPresent({ - selector: `//option[@value='${version}']`, + .click({ + selector: "//*[@id='versionSelector']", locateStrategy: 'xpath' }) - .click(`#compileTabView #versionSelector [value="${version}"]`) + .waitForElementVisible(`[data-id="dropdown-item-${version}"]`) + .click(`[data-id="dropdown-item-${version}"]`) .waitForElementPresent({ - selector: `//span[@data-version='${version}']`, + selector: `//*[@data-id='compilerloaded' and @data-version='${version}']`, locateStrategy: 'xpath', - timeout: 60000 + timeout: 120000 }) .perform(() => { this.emit('complete') diff --git a/apps/remix-ide-e2e/src/commands/validateValueInput.ts b/apps/remix-ide-e2e/src/commands/validateValueInput.ts index 61e90a80dc..a686cf812f 100644 --- a/apps/remix-ide-e2e/src/commands/validateValueInput.ts +++ b/apps/remix-ide-e2e/src/commands/validateValueInput.ts @@ -2,20 +2,21 @@ import { NightwatchBrowser } from 'nightwatch' import EventEmitter from 'events' class ValidateValueInput extends EventEmitter { - command (this: NightwatchBrowser, selector: string, valueTosSet: string, expectedValue: string) { + command (this: NightwatchBrowser, selector: string, valueTosSet: string[], expectedValue: string) { const browser = this.api browser.perform((done) => { - browser.clearValue(selector) - .pause(2000) - .setValue(selector, valueTosSet).pause(2000) + browser + .click(selector) + .sendKeys(selector, browser.Keys.BACK_SPACE + browser.Keys.BACK_SPACE + browser.Keys.BACK_SPACE + browser.Keys.BACK_SPACE) + .sendKeys(selector, valueTosSet) + .pause(500) .execute(function (selector) { const elem = document.querySelector(selector) as HTMLInputElement return elem.value }, [selector], function (result) { browser.assert.equal(result.value, expectedValue) - }) - done() - this.emit('complete') + }).perform(() => { done() ;this.emit('complete') }) + }) return this } diff --git a/apps/remix-ide-e2e/src/helpers/init.ts b/apps/remix-ide-e2e/src/helpers/init.ts index 8e0a93b450..aa364da42a 100644 --- a/apps/remix-ide-e2e/src/helpers/init.ts +++ b/apps/remix-ide-e2e/src/helpers/init.ts @@ -10,8 +10,6 @@ type LoadPlugin = { export default function (browser: NightwatchBrowser, callback: VoidFunction, url?: string, preloadPlugins = true, loadPlugin?: LoadPlugin, hideToolTips: boolean = true): void { browser .url(url || 'http://127.0.0.1:8080') - //.switchBrowserTab(0) - .perform((done) => { if (!loadPlugin) return done() browser @@ -24,8 +22,8 @@ export default function (browser: NightwatchBrowser, callback: VoidFunction, url .perform(done()) }) .verifyLoad() - .perform(() => { - if (hideToolTips) { + .enableClipBoard() + .perform((done) => { browser.execute(function () { // hide tooltips function addStyle(styleString) { const style = document.createElement('style'); @@ -34,35 +32,42 @@ export default function (browser: NightwatchBrowser, callback: VoidFunction, url } addStyle(` - .bs-popover-right { - display:none !important; - } - .bs-popover-top { - display:none !important; - } - .bs-popover-left { - display:none !important; - } - .bs-popover-bottom { - display:none !important; - } + .popover { + display:none !important; + } `); + }, [], done()) + }) + .perform(() => { + browser.execute(function () { + (window as any).logs = []; + (console as any).browserLog = console.log; + (console as any).browserError = console.error + console.log = function () { + (window as any).logs.push(JSON.stringify(arguments)); + (console as any).browserLog(...arguments) + } + console.error = function () { + (window as any).logs.push(JSON.stringify(arguments)); + (console as any).browserError(...arguments) + } }) - } - if (preloadPlugins) { - initModules(browser, () => { - browser - .clickLaunchIcon('solidity') - .waitForElementVisible('[for="autoCompile"]') - .click('[for="autoCompile"]') - .verify.elementPresent('[data-id="compilerContainerAutoCompile"]:checked') - .perform(() => { callback() }) - }) - - } else { - callback() - } - }) + }) + .perform(() => { + if (preloadPlugins) { + initModules(browser, () => { + browser + .pause(4000) + .clickLaunchIcon('solidity') + .waitForElementVisible('[for="autoCompile"]') + .click('[for="autoCompile"]') + .verify.elementPresent('[data-id="compilerContainerAutoCompile"]:checked') + .perform(() => { callback() }) + }) + } else { + callback() + } + }) } function initModules(browser: NightwatchBrowser, callback: VoidFunction) { diff --git a/apps/remix-ide-e2e/src/local-plugin/src/app/Client.ts b/apps/remix-ide-e2e/src/local-plugin/src/app/Client.ts index 488b109db6..7c49837efb 100644 --- a/apps/remix-ide-e2e/src/local-plugin/src/app/Client.ts +++ b/apps/remix-ide-e2e/src/local-plugin/src/app/Client.ts @@ -4,7 +4,7 @@ export class RemixPlugin extends PluginClient { constructor () { super() this.methods = ['testCommand'] - createClient(this) + createClient(this as any) } async testCommand (data: any) { diff --git a/apps/remix-ide-e2e/src/local-plugin/src/app/logger.tsx b/apps/remix-ide-e2e/src/local-plugin/src/app/logger.tsx index 4273c609d2..63a359cb53 100644 --- a/apps/remix-ide-e2e/src/local-plugin/src/app/logger.tsx +++ b/apps/remix-ide-e2e/src/local-plugin/src/app/logger.tsx @@ -4,7 +4,7 @@ interface loggerProps { id: string } -export const Logger: React.FC = (props) => { +export const Logger = (props) => { return (
{props.log} diff --git a/apps/remix-ide-e2e/src/local-plugin/src/main.tsx b/apps/remix-ide-e2e/src/local-plugin/src/main.tsx index ac848b3e6f..b51622b03e 100644 --- a/apps/remix-ide-e2e/src/local-plugin/src/main.tsx +++ b/apps/remix-ide-e2e/src/local-plugin/src/main.tsx @@ -1,11 +1,12 @@ import React from 'react' -import ReactDOM from 'react-dom' +import { createRoot } from 'react-dom/client'; import App from './app/app' -ReactDOM.render( - +const container = document.getElementById('root'); + +if (container) { + createRoot(container).render( - , - document.getElementById('root') -) + ); +} diff --git a/apps/remix-ide-e2e/src/tests/editor.test.ts b/apps/remix-ide-e2e/src/tests/editor.test.ts index 39a2a2de74..f78a229498 100644 --- a/apps/remix-ide-e2e/src/tests/editor.test.ts +++ b/apps/remix-ide-e2e/src/tests/editor.test.ts @@ -20,13 +20,13 @@ module.exports = { .checkElementStyle('.view-lines', 'font-size', '14px') .click('*[data-id="tabProxyZoomIn"]') .click('*[data-id="tabProxyZoomIn"]') - .checkElementStyle('.view-lines', 'font-size', '16px') + .checkElementStyle('.view-lines', 'font-size', '16.8px') }, 'Should zoom out editor #group1': function (browser: NightwatchBrowser) { browser .waitForElementVisible('#editorView') - .checkElementStyle('.view-lines', 'font-size', '16px') + .checkElementStyle('.view-lines', 'font-size', '16.8px') .click('*[data-id="tabProxyZoomOut"]') .click('*[data-id="tabProxyZoomOut"]') .checkElementStyle('.view-lines', 'font-size', '14px') diff --git a/apps/remix-ide-e2e/src/tests/editorHoverContext.test.ts b/apps/remix-ide-e2e/src/tests/editorHoverContext.test.ts index dd83159f88..2fb98cc339 100644 --- a/apps/remix-ide-e2e/src/tests/editorHoverContext.test.ts +++ b/apps/remix-ide-e2e/src/tests/editorHoverContext.test.ts @@ -15,9 +15,9 @@ const checkEditorHoverContent = (browser: NightwatchBrowser, path: string, expec module.exports = { '@disabled': true, before: function (browser: NightwatchBrowser, done: VoidFunction) { - init(browser, done, 'http://127.0.0.1:8080', false) + init(browser, done, 'http://127.0.0.1:8080', false, null, true) }, - 'Should load the test file': function (browser: NightwatchBrowser) { + 'Should load the test file #group1': function (browser: NightwatchBrowser) { browser.openFile('contracts') .openFile('contracts/3_Ballot.sol') .waitForElementVisible('#editorView') @@ -86,7 +86,7 @@ module.exports = { const expectedContent = 'StructDefinition' checkEditorHoverContent(browser, path, expectedContent) }, - 'Add token file': function (browser: NightwatchBrowser) { + 'Add token file #group1': function (browser: NightwatchBrowser) { browser .clickLaunchIcon('solidity') .setSolidityCompilerVersion('soljson-v0.8.20+commit.a1b79de6.js') diff --git a/apps/remix-ide-e2e/src/tests/etherscan_api.test.ts b/apps/remix-ide-e2e/src/tests/etherscan_api.test.ts index 9d85f21831..6157d77ca2 100644 --- a/apps/remix-ide-e2e/src/tests/etherscan_api.test.ts +++ b/apps/remix-ide-e2e/src/tests/etherscan_api.test.ts @@ -45,7 +45,7 @@ module.exports = { .setValue('*[name="contractAddress"]', ['0x9981c9d00103da481c3c65b22a79582a3e3ff50b', browser.Keys.TAB]) .click('[data-id="verify-contract"]') .waitForElementVisible('[data-id="verify-result"]') - .waitForElementContainsText('[data-id="verify-result"]', 'Contract source code already verified') + .waitForElementContainsText('[data-id="verify-result"]', 'Contract source code already verified', 15000) }, 'Should call the etherscan plugin api #group1': function (browser: NightwatchBrowser) { diff --git a/apps/remix-ide-e2e/src/tests/fileExplorer.test.ts b/apps/remix-ide-e2e/src/tests/fileExplorer.test.ts index 0d1c02d36b..3c915bb8fa 100644 --- a/apps/remix-ide-e2e/src/tests/fileExplorer.test.ts +++ b/apps/remix-ide-e2e/src/tests/fileExplorer.test.ts @@ -22,9 +22,9 @@ module.exports = { .click('li[data-id="treeViewLitreeViewItemREADME.txt"]') // focus on root directory .click('*[data-id="fileExplorerNewFilecreateNewFile"]') .pause(1000) - .waitForElementVisible('*[data-id$="/blank"]') - .sendKeys('*[data-id$="/blank"] .remixui_items', '5_New_contract.sol') - .sendKeys('*[data-id$="/blank"] .remixui_items', browser.Keys.ENTER) + .waitForElementVisible('*[data-id$="fileExplorerTreeItemInput"]') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', '5_New_contract.sol') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) .waitForElementVisible('*[data-id="treeViewLitreeViewItem5_New_contract.sol"]', 7000) }, @@ -32,7 +32,7 @@ module.exports = { browser .waitForElementVisible('*[data-id="treeViewLitreeViewItem5_New_contract.sol"]') .click('*[data-id="treeViewLitreeViewItem5_New_contract.sol"]') - .renamePath('5_New_contract.sol', '5_Renamed_Contract.sol', '5_Renamed_Contract.sol') + .renamePath('5_New_contract.sol', '5_Renamed_Contract', '5_Renamed_Contract.sol') .waitForElementVisible('*[data-id="treeViewLitreeViewItem5_Renamed_Contract.sol"]') }, @@ -49,9 +49,9 @@ module.exports = { .click('li[data-id="treeViewLitreeViewItemREADME.txt"]') // focus on root directory .click('[data-id="fileExplorerNewFilecreateNewFolder"]') .pause(1000) - .waitForElementVisible('*[data-id$="/blank"]') - .sendKeys('*[data-id$="/blank"] .remixui_items', 'Browser_Tests') - .sendKeys('*[data-id$="/blank"] .remixui_items', browser.Keys.ENTER) + .waitForElementVisible('*[data-id$="fileExplorerTreeItemInput"]') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', 'Browser_Tests') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) .waitForElementVisible('*[data-id="treeViewLitreeViewItemBrowser_Tests"]') }, @@ -113,5 +113,73 @@ module.exports = { .waitForElementVisible('[data-id="treeViewLitreeViewItemfileExplorer.test.js"]') .waitForElementVisible('[data-id="treeViewLitreeViewItemgeneralSettings.test.js"]') .end() + }, + + 'Should add deep tree with buttons #group3': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('div[data-id="remixIdeSidePanel"]') + .clickLaunchIcon('filePanel') + .waitForElementVisible('*[data-id="filePanelFileExplorerTree"]') + .waitForElementVisible('[data-id="fileExplorerNewFilecreateNewFolder"]') + .click('[data-id="fileExplorerNewFilecreateNewFolder"]') + .waitForElementVisible('*[data-id$="fileExplorerTreeItemInput"]') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', 'deep1') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) + .waitForElementVisible('*[data-id="treeViewLitreeViewItemdeep1"]') + .waitForElementVisible('[data-id="fileExplorerNewFilecreateNewFolder"]') + .click('[data-id="fileExplorerNewFilecreateNewFolder"]') + .waitForElementVisible('*[data-id$="fileExplorerTreeItemInput"]') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', 'deep2') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) + .waitForElementVisible('*[data-id="treeViewLitreeViewItemdeep1/deep2"]') + .waitForElementVisible('[data-id="fileExplorerNewFilecreateNewFolder"]') + .click('[data-id="fileExplorerNewFilecreateNewFolder"]') + .waitForElementVisible('*[data-id$="fileExplorerTreeItemInput"]') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', 'deep3') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) + .waitForElementVisible('*[data-id="treeViewLitreeViewItemdeep1/deep2/deep3"]') + .waitForElementVisible('[data-id="fileExplorerNewFilecreateNewFile"]') + .click('[data-id="fileExplorerNewFilecreateNewFile"]') + .waitForElementVisible('*[data-id$="fileExplorerTreeItemInput"]') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', 'deep4.sol') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) + .waitForElementVisible('*[data-id="treeViewLitreeViewItemdeep1/deep2/deep3/deep4.sol"]') + // click on root to focus + .click('li[data-id="treeViewLitreeViewItemREADME.txt"]') + .waitForElementVisible('[data-id="fileExplorerNewFilecreateNewFolder"]') + .click('[data-id="fileExplorerNewFilecreateNewFolder"]') + .waitForElementVisible('*[data-id$="fileExplorerTreeItemInput"]') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', 'deep5') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) + .waitForElementVisible('*[data-id="treeViewLitreeViewItemdeep5"]') + .waitForElementVisible('[data-id="fileExplorerNewFilecreateNewFolder"]') + .click('[data-id="fileExplorerNewFilecreateNewFolder"]') + .waitForElementVisible('*[data-id$="fileExplorerTreeItemInput"]') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', 'deep6') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) + .waitForElementVisible('*[data-id="treeViewLitreeViewItemdeep5/deep6"]') + // focus on contracts + .click('li[data-id="treeViewLitreeViewItemcontracts"]') + .waitForElementVisible('[data-id="fileExplorerNewFilecreateNewFolder"]') + .click('[data-id="fileExplorerNewFilecreateNewFolder"]') + .waitForElementVisible('*[data-id$="fileExplorerTreeItemInput"]') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', 'deep7') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) + .waitForElementVisible('*[data-id="treeViewLitreeViewItemcontracts/deep7"]') + .waitForElementVisible('[data-id="fileExplorerNewFilecreateNewFolder"]') + .click('[data-id="fileExplorerNewFilecreateNewFolder"]') + .waitForElementVisible('*[data-id$="fileExplorerTreeItemInput"]') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', 'deep8') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) + .waitForElementVisible('*[data-id="treeViewLitreeViewItemcontracts/deep7/deep8"]') + .waitForElementVisible('[data-id="fileExplorerNewFilecreateNewFile"]') + .click('[data-id="fileExplorerNewFilecreateNewFile"]') + .waitForElementVisible('*[data-id$="fileExplorerTreeItemInput"]') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', 'deep9.sol') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) + .waitForElementVisible('*[data-id="treeViewLitreeViewItemcontracts/deep7/deep8/deep9.sol"]') + .end() } + + } diff --git a/apps/remix-ide-e2e/src/tests/file_decorator.test.ts b/apps/remix-ide-e2e/src/tests/file_decorator.test.ts index e9bd9b529e..e01aa2e19e 100644 --- a/apps/remix-ide-e2e/src/tests/file_decorator.test.ts +++ b/apps/remix-ide-e2e/src/tests/file_decorator.test.ts @@ -4,7 +4,6 @@ import { NightwatchBrowser } from 'nightwatch' import init from '../helpers/init' module.exports = { - before: function (browser: NightwatchBrowser, done: VoidFunction) { init(browser, done) }, @@ -17,7 +16,7 @@ module.exports = { .openFile('contracts/3_Ballot.sol') .addFile('scripts/decorators.ts', { content: testScriptSet }) .pause(2000) - .executeScriptInTerminal('remix.exeCurrent()') + .click('[data-id="play-editor"]') .pause(4000) .useXpath() .waitForElementContainsText('//*[@id="fileExplorerView"]//*[@data-id="file-decoration-error-contracts/2_Owner.sol"]', '2') @@ -38,7 +37,7 @@ module.exports = { .useCss() .addFile('scripts/clearballot.ts', { content: testScriptClearBallot }) .pause(2000) - .executeScriptInTerminal('remix.exeCurrent()') + .click('[data-id="play-editor"]') .pause(4000) .waitForElementNotPresent('[data-id="file-decoration-custom-contracts/3_Ballot.sol"]', 10000) }, @@ -46,7 +45,7 @@ module.exports = { browser .addFile('scripts/clearall.ts', { content: testScriptClear }) .pause(2000) - .executeScriptInTerminal('remix.exeCurrent()') + .click('[data-id="play-editor"]') .pause(4000) .waitForElementNotPresent('[data-id="file-decoration-error-contracts/2_Owner.sol"]', 10000) .waitForElementNotPresent('[data-id="file-decoration-warning-contracts/1_Storage.sol"]', 10000) diff --git a/apps/remix-ide-e2e/src/tests/file_explorer_context_menu.test.ts b/apps/remix-ide-e2e/src/tests/file_explorer_context_menu.test.ts new file mode 100644 index 0000000000..c655a576f6 --- /dev/null +++ b/apps/remix-ide-e2e/src/tests/file_explorer_context_menu.test.ts @@ -0,0 +1,129 @@ +'use strict' +import { NightwatchBrowser } from 'nightwatch' +import init from '../helpers/init' + +module.exports = { + '@disabled': true, + before: function (browser: NightwatchBrowser, done: VoidFunction) { + init(browser, done) + }, + // file copy file name tests + 'Should copy file name and paste in root with new file button and it will contain a new file #group1 ': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('filePanel') + .waitForElementVisible('li[data-id="treeViewLitreeViewItemREADME.txt"]') + .rightClick('li[data-id="treeViewLitreeViewItemREADME.txt"]') + .waitForElementPresent('[data-id="contextMenuItemcopyFileName"]') + .click('[data-id="contextMenuItemcopyFileName"]') + .click('*[data-id="fileExplorerNewFilecreateNewFile"]') + .pause(1000) + .waitForElementVisible('*[data-id$="fileExplorerTreeItemInput"]') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.CONTROL + 'v') + .pause(1000) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) + .waitForElementVisible('*[data-id="treeViewLitreeViewItemREADME1.txt"]', 7000) + }, + 'Should copy file name and paste in another folder with new file button and it will contain a new file #group1 ': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('li[data-id="treeViewLitreeViewItemREADME.txt"]') + .rightClick('li[data-id="treeViewLitreeViewItemREADME.txt"]') + .waitForElementPresent('[data-id="contextMenuItemcopyFileName"]') + .click('[data-id="contextMenuItemcopyFileName"]') + .click('[data-id="treeViewLitreeViewItemcontracts"]') + .click('*[data-id="fileExplorerNewFilecreateNewFile"]') + .pause(1000) + .waitForElementVisible('*[data-id$="fileExplorerTreeItemInput"]') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.CONTROL + 'v') + .pause(1000) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) + .waitForElementVisible('*[data-id="treeViewLitreeViewItemcontracts/README.txt"]', 7000) + }, + 'Should copy file name and paste in another folder that has the same filename with new file button and it will contain a new file #group1 ': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('li[data-id="treeViewLitreeViewItemREADME.txt"]') + .rightClick('li[data-id="treeViewLitreeViewItemREADME.txt"]') + .waitForElementPresent('[data-id="contextMenuItemcopyFileName"]') + .click('[data-id="contextMenuItemcopyFileName"]') + .click('[data-id="treeViewLitreeViewItemcontracts"]') + .click('*[data-id="fileExplorerNewFilecreateNewFile"]') + .pause(1000) + .waitForElementVisible('*[data-id$="fileExplorerTreeItemInput"]') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.CONTROL + 'v') + .pause(1000) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) + .waitForElementVisible('*[data-id="treeViewLitreeViewItemcontracts/README1.txt"]', 7000) + }, + 'Should copy file name and paste in root with right click and it will contain a new file #group1 ': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('li[data-id="treeViewLitreeViewItemREADME.txt"]') + .rightClick('li[data-id="treeViewLitreeViewItemREADME.txt"]') + .waitForElementPresent('[data-id="contextMenuItemcopyFileName"]') + .click('[data-id="contextMenuItemcopyFileName"]') + .rightClick('*[data-id="treeViewUltreeViewMenu"]') + .click('*[data-id="contextMenuItemnewFile"]') + .pause(1000) + .waitForElementVisible('*[data-id$="fileExplorerTreeItemInput"]') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.CONTROL + 'v') + .pause(1000) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) + .waitForElementVisible('*[data-id="treeViewLitreeViewItemREADME2.txt"]', 7000) + }, + 'Should copy file name and paste in contracts with right click and it will contain a new file #group1 ': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('li[data-id="treeViewLitreeViewItemREADME.txt"]') + .rightClick('li[data-id="treeViewLitreeViewItemREADME.txt"]') + .waitForElementPresent('[data-id="contextMenuItemcopyFileName"]') + .click('[data-id="contextMenuItemcopyFileName"]') + .rightClick('*[data-id="treeViewLitreeViewItemcontracts"]') + .click('*[data-id="contextMenuItemnewFile"]') + .pause(1000) + .waitForElementVisible('*[data-id$="fileExplorerTreeItemInput"]') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.CONTROL + 'v') + .pause(1000) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) + .waitForElementVisible('*[data-id="treeViewLitreeViewItemREADME2.txt"]', 7000) + }, + // file copy paste tests + 'Should copy file and paste in root with right click and it will contain a new file #group1 ': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('li[data-id="treeViewLitreeViewItemREADME.txt"]') + .rightClick('li[data-id="treeViewLitreeViewItemREADME.txt"]') + .waitForElementPresent('[data-id="contextMenuItemcopy') + .click('[data-id="contextMenuItemcopy"]') + .rightClick('*[data-id="treeViewLiMenu"]') + .saveScreenshot('./reports/screenshot/file_explorer_context_menu.png') + .click('*[data-id="contextMenuItempaste"]') + .waitForElementVisible('*[data-id="treeViewLitreeViewItemCopy_README.txt"]', 7000) + }, + 'Should copy file and paste in contracts with right click and it will contain a new file #group1 ': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('li[data-id="treeViewLitreeViewItemREADME.txt"]') + .rightClick('li[data-id="treeViewLitreeViewItemREADME.txt"]') + .waitForElementPresent('[data-id="contextMenuItemcopy') + .click('[data-id="contextMenuItemcopy"]') + .rightClick('*[data-id="treeViewLitreeViewItemcontracts"]') + .click('*[data-id="contextMenuItempaste"]') + .waitForElementVisible('*[data-id="treeViewLitreeViewItemcontracts/Copy_README.txt"]', 7000) + }, + // folder copy paste tests + 'Should copy folder and paste in root with right click and it will contain a copied folder #group1 ': function (browser: NightwatchBrowser) { + browser + .rightClick('li[data-id="treeViewLitreeViewItemcontracts"]') + .waitForElementPresent('[data-id="contextMenuItemcopy') + .click('[data-id="contextMenuItemcopy"]') + .rightClick('*[data-id="treeViewLiMenu"]') + .click('*[data-id="contextMenuItempaste"]') + .waitForElementVisible('*[data-id="treeViewLitreeViewItemCopy_contracts"]', 7000) + }, + 'Should copy folder and paste in contracts with right click and it will contain a copied folder #group1 ': function (browser: NightwatchBrowser) { + browser + .pause(1000) + .waitForElementVisible('li[data-id="treeViewLitreeViewItemscripts"]') + .rightClick('li[data-id="treeViewLitreeViewItemscripts"]') + .waitForElementPresent('[data-id="contextMenuItemcopy') + .click('[data-id="contextMenuItemcopy"]') + .rightClick('*[data-id="treeViewLitreeViewItemcontracts"]') + .click('*[data-id="contextMenuItempaste"]') + .waitForElementVisible('*[data-id="treeViewLitreeViewItemcontracts/Copy_scripts"]', 7000) + } +} \ No newline at end of file diff --git a/apps/remix-ide-e2e/src/tests/file_explorer_dragdrop.test.ts b/apps/remix-ide-e2e/src/tests/file_explorer_dragdrop.test.ts new file mode 100644 index 0000000000..edcf90d881 --- /dev/null +++ b/apps/remix-ide-e2e/src/tests/file_explorer_dragdrop.test.ts @@ -0,0 +1,103 @@ +'use strict' +import { NightwatchBrowser } from 'nightwatch' +import init from '../helpers/init' + +const checkBrowserIsChrome = function (browser: NightwatchBrowser) { + return browser.browserName.indexOf('chrome') > -1 +} + + +module.exports = { + '@disabled': true, + before: function (browser: NightwatchBrowser, done: VoidFunction) { + init(browser, done) + }, + 'drag and drop file from root to contracts #group1 ': function (browser: NightwatchBrowser) { + if (checkBrowserIsChrome(browser)) { + browser + .clickLaunchIcon('filePanel') + .waitForElementVisible('*[data-id="treeViewLitreeViewItemcontracts"]') + .findElement('*[data-id="treeViewLitreeViewItemcontracts"]', (el) => { + console.log((el as any).value.getId()) + const id = (el as any).value.getId() + browser + .waitForElementVisible('li[data-id="treeViewLitreeViewItemREADME.txt"]') + .dragAndDrop('li[data-id="treeViewLitreeViewItemREADME.txt"]', id) + .waitForElementPresent('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') + .execute(function () { (document.querySelector('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') as HTMLElement).click() }) + .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts/README.txt"]') + }) + } + }, + + 'drag and drop file from contracts to root #group1': function (browser: NightwatchBrowser) { + if (checkBrowserIsChrome(browser)) { + browser.findElement('*[data-id="treeViewUltreeViewMenu"]', (el) => { + console.log((el as any).value.getId()) + const id = (el as any).value.getId() + browser + .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]') + .dragAndDrop('li[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]', id) + .waitForElementPresent('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') + .execute(function () { (document.querySelector('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') as HTMLElement).click() }) + }) + browser.pause(1000) + .waitForElementVisible('li[data-id="treeViewLitreeViewItem1_Storage.sol"]') + } + }, + 'drag and drop scripts from root to contracts #group1': function (browser: NightwatchBrowser) { + if (checkBrowserIsChrome(browser)) { + browser + .waitForElementVisible('*[data-id="treeViewLitreeViewItemcontracts"]') + .findElement('*[data-id="treeViewLitreeViewItemcontracts"]', (el) => { + console.log((el as any).value.getId()) + const id = (el as any).value.getId() + browser + .waitForElementVisible('li[data-id="treeViewLitreeViewItemscripts"]') + .dragAndDrop('li[data-id="treeViewLitreeViewItemscripts"]', id) + .waitForElementPresent('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') + .execute(function () { (document.querySelector('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') as HTMLElement).click() }) + .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts/scripts"]') + }) + } + }, + 'drag scripts from contracts to root #group1': function (browser: NightwatchBrowser) { + if (checkBrowserIsChrome(browser)) { + browser.findElement('*[data-id="treeViewUltreeViewMenu"]', (el) => { + console.log((el as any).value.getId()) + const id = (el as any).value.getId() + browser + .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts/scripts"]') + .dragAndDrop('li[data-id="treeViewLitreeViewItemcontracts/scripts"]', id) + .waitForElementPresent('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') + .execute(function () { (document.querySelector('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') as HTMLElement).click() }) + }) + browser.pause(1000) + .waitForElementVisible('li[data-id="treeViewLitreeViewItemscripts"]') + } + }, + 'drag into nested folder': function (browser: NightwatchBrowser) { + if (checkBrowserIsChrome(browser)) { + browser.waitForElementVisible('li[data-id="treeViewLitreeViewItemscripts"]') + .rightClick('li[data-id="treeViewLitreeViewItemscripts"]') + .waitForElementPresent('[data-id="contextMenuItemnewFolder') + .click('[data-id="contextMenuItemnewFolder') + .waitForElementVisible('*[data-id$="fileExplorerTreeItemInput"]') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', 'nested') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) + .findElement('*[data-id="treeViewLitreeViewItemscripts/nested"]', (el) => { + console.log((el as any).value.getId()) + const id = (el as any).value.getId() + browser + .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts/README.txt"]') + .dragAndDrop('li[data-id="treeViewLitreeViewItemcontracts/README.txt"]', id) + .waitForElementPresent('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') + .execute(function () { (document.querySelector('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') as HTMLElement).click() }) + .waitForElementVisible('li[data-id="treeViewLitreeViewItemscripts/nested/README.txt"]') + }) + } + } + + + +} \ No newline at end of file diff --git a/apps/remix-ide-e2e/src/tests/gist.test.ts b/apps/remix-ide-e2e/src/tests/gist.test.ts index 83d122c63e..b495527eab 100644 --- a/apps/remix-ide-e2e/src/tests/gist.test.ts +++ b/apps/remix-ide-e2e/src/tests/gist.test.ts @@ -30,15 +30,15 @@ module.exports = { .waitForElementVisible('*[data-id="fileExplorerNewFilecreateNewFolder"]') .click('[data-id="fileExplorerNewFilecreateNewFolder"]') .pause(1000) - .waitForElementVisible('*[data-id$="/blank"]') - .sendKeys('*[data-id$="/blank"] .remixui_items', 'Browser_Tests') - .sendKeys('*[data-id$="/blank"] .remixui_items', browser.Keys.ENTER) + .waitForElementVisible('*[data-id$="fileExplorerTreeItemInput"]') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', 'Browser_Tests') + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) .waitForElementVisible('*[data-id="treeViewLitreeViewItemBrowser_Tests"]') .addFile('File.sol', { content: '' }) .executeScriptInTerminal(`remix.loadgist('${gistid}')`) // .perform((done) => { if (runtimeBrowser === 'chrome') { browser.openFile('gists') } done() }) .waitForElementVisible(`[data-id="treeViewLitreeViewItemgist-${gistid}"]`) - .click(`[data-id="treeViewLitreeViewItemgist-${gistid}"]`) + .openFile(`gist-${gistid}/README.txt`) // Remix publish to gist /* .click('*[data-id="fileExplorerNewFilepublishToGist"]') diff --git a/apps/remix-ide-e2e/src/tests/migrateFileSystem.test.ts b/apps/remix-ide-e2e/src/tests/migrateFileSystem.test.ts index 38a72d5bf2..1022471188 100644 --- a/apps/remix-ide-e2e/src/tests/migrateFileSystem.test.ts +++ b/apps/remix-ide-e2e/src/tests/migrateFileSystem.test.ts @@ -13,6 +13,7 @@ module.exports = { .click('*[data-id="skipbackup-btn"]') .pause(5000) .waitForElementVisible('*[data-id="remixIdeSidePanel"]', 10000) + .hideToolTips() }, 'Should load the testmigration url and refresh and still have test data #group7': function (browser: NightwatchBrowser) { browser.url('http://127.0.0.1:8080?e2e_testmigration=true') @@ -23,6 +24,7 @@ module.exports = { .click('*[data-id="skipbackup-btn"]') .pause(5000) .waitForElementVisible('*[data-id="remixIdeSidePanel"]', 10000) + .hideToolTips() .refreshPage() }, 'should have indexedDB storage in terminal #group1 #group7': function (browser: NightwatchBrowser) { @@ -30,11 +32,13 @@ module.exports = { }, 'Should fallback to localstorage with default data #group2': function (browser: NightwatchBrowser) { browser.url('http://127.0.0.1:8080?e2e_testmigration_fallback=true') + .hideToolTips() .pause(6000) .switchBrowserTab(0) .maximizeWindow() .pause(5000) .waitForElementVisible('*[data-id="remixIdeSidePanel"]', 10000) + .hideToolTips() .waitForElementVisible('div[data-id="filePanelFileExplorerTree"]') .openFile('README.txt') .waitForElementVisible('*[id="editorView"]', 10000) @@ -57,6 +61,7 @@ module.exports = { .click('*[data-id="skipbackup-btn"]') .pause(5000) .waitForElementVisible('*[data-id="remixIdeSidePanel"]', 10000) + .hideToolTips() }, 'Should generate error in migration by deleting indexedDB and falling back to local storage with test #group5': function (browser: NightwatchBrowser) { browser.url('http://127.0.0.1:8080?e2e_testmigration=true') @@ -67,6 +72,7 @@ module.exports = { .click('*[data-id="skipbackup-btn"]') .pause(5000) .waitForElementVisible('*[data-id="remixIdeSidePanel"]', 10000) + .hideToolTips() }, 'should have localstorage storage in terminal #group2 #group3 #group5': function (browser: NightwatchBrowser) { browser.assert.containsText('*[data-id="terminalJournal"]', 'localstorage') @@ -112,6 +118,7 @@ module.exports = { // end of test data entries 'Should load with all storage blocked #group4': function (browser: NightwatchBrowser) { browser.url('http://127.0.0.1:8080?e2e_testblock_storage=true') + .hideToolTips() .pause(6000) .switchBrowserTab(0) .maximizeWindow() @@ -119,11 +126,13 @@ module.exports = { }, 'Should with errors #group6': function (browser: NightwatchBrowser) { browser.url('http://127.0.0.1:8080?e2e_testmigration=true') + .pause(6000) .switchBrowserTab(0) .maximizeWindow().execute('delete window.localStorage') .waitForElementVisible('*[data-id="skipbackup-btn"]', 5000) .click('*[data-id="skipbackup-btn"]') + .hideToolTips() .assert.containsText('.alert-danger', 'An unknown error') }, diff --git a/apps/remix-ide-e2e/src/tests/plugin_api.ts b/apps/remix-ide-e2e/src/tests/plugin_api.ts index adcc378f5d..579466a050 100644 --- a/apps/remix-ide-e2e/src/tests/plugin_api.ts +++ b/apps/remix-ide-e2e/src/tests/plugin_api.ts @@ -431,7 +431,7 @@ module.exports = { .waitForElementContainsText('*[data-shared="tooltipPopup"]', 'I am a re-toast') }, - 'Should open 2 alerts from localplugin #group9': function (browser: NightwatchBrowser) { + 'Should open 2 alerts from localplugin #group9': !function (browser: NightwatchBrowser) { browser .clickLaunchIcon('localPlugin') .useXpath() diff --git a/apps/remix-ide-e2e/src/tests/remixd.test.ts b/apps/remix-ide-e2e/src/tests/remixd.test.ts index 758e436001..ceebe0d553 100644 --- a/apps/remix-ide-e2e/src/tests/remixd.test.ts +++ b/apps/remix-ide-e2e/src/tests/remixd.test.ts @@ -277,7 +277,7 @@ function runTests(browser: NightwatchBrowser, done: any) { .setEditorValue('contract test1 { function get () returns (uint) { return 10; }}') .click('[data-path="folder1/contract_' + browserName + '.sol"]') // rename a file and check .pause(1000) - .renamePath('folder1/contract_' + browserName + '.sol', 'renamed_contract_' + browserName + '.sol', 'folder1/renamed_contract_' + browserName + '.sol') + .renamePath('folder1/contract_' + browserName + '.sol', 'renamed_contract_' + browserName, 'folder1/renamed_contract_' + browserName + '.sol') .pause(1000) .removeFile('folder1/contract_' + browserName + '_toremove.sol', 'localhost') .perform(function (done) { diff --git a/apps/remix-ide-e2e/src/tests/runAndDeploy.test.ts b/apps/remix-ide-e2e/src/tests/runAndDeploy.test.ts index fffb4cc82a..d689cb6f19 100644 --- a/apps/remix-ide-e2e/src/tests/runAndDeploy.test.ts +++ b/apps/remix-ide-e2e/src/tests/runAndDeploy.test.ts @@ -25,9 +25,10 @@ module.exports = { 'Should load run and deploy tab and check value validation #group1': function (browser: NightwatchBrowser) { browser.waitForElementPresent('*[data-id="remixIdeSidePanel"]') .assert.containsText('*[data-id="sidePanelSwapitTitle"]', 'DEPLOY & RUN TRANSACTIONS') - .validateValueInput('#value', '0000', '0') - .validateValueInput('#value', '', '0') - .validateValueInput('#value', 'dragon', '0') + .validateValueInput('*[data-id="dandrValue"]', ['9','9','9'], '999') + .validateValueInput('*[data-id="dandrValue"]', ['0','0','0'], '0') + .validateValueInput('*[data-id="dandrValue"]', ['1','.','3'], '0') // no decimal + // .validateValueInput('*[data-id="dandrValue"]', 'dragon', '0') // only numbers }, 'Should sign message using account key #group2': function (browser: NightwatchBrowser) { @@ -79,12 +80,23 @@ module.exports = { .pause(1000) .getAddressAtPosition(1, (address) => { instanceAddress = address + console.log('instanceAddress', instanceAddress) browser .waitForElementVisible(`#instance${instanceAddress} [data-id="instanceContractBal"]`) - .assert.containsText(`#instance${instanceAddress} [data-id="instanceContractBal"]`, 'Balance: 0.000000000000000111 ETH') + //*[@id="instance0xbBF289D846208c16EDc8474705C748aff07732dB" and contains(.,"Balance") and contains(.,'0.000000000000000111')] + .waitForElementVisible({ + locateStrategy: 'xpath', + selector: `//*[@id="instance${instanceAddress}" and contains(.,"Balance") and contains(.,'0.000000000000000111')]`, + timeout: 60000 + }) + //.waitForElementContainsText(`#instance${instanceAddress} [data-id="instanceContractBal"]`, 'Balance: 0.000000000000000111 ETH', 60000) .clickFunction('sendSomeEther - transact (not payable)', { types: 'uint256 num', values: '2' }) .pause(1000) - .assert.containsText(`#instance${instanceAddress} [data-id="instanceContractBal"]`, 'Balance: 0.000000000000000109 ETH') + .waitForElementVisible({ + locateStrategy: 'xpath', + selector: `//*[@id="instance${instanceAddress}" and contains(.,"Balance") and contains(.,'0.000000000000000109')]`, + timeout: 60000 + }) }) }, diff --git a/apps/remix-ide-e2e/src/tests/solidityUnittests.test.ts b/apps/remix-ide-e2e/src/tests/solidityUnittests.test.ts index 2c99c0a6d9..db80725552 100644 --- a/apps/remix-ide-e2e/src/tests/solidityUnittests.test.ts +++ b/apps/remix-ide-e2e/src/tests/solidityUnittests.test.ts @@ -210,7 +210,6 @@ module.exports = { browser .waitForElementPresent('*[data-id="verticalIconsKindfilePanel"]') .clickLaunchIcon('filePanel') - .click('*[data-id="treeViewLitreeViewItemcontracts"]') .openFile('contracts/3_Ballot.sol') .clickLaunchIcon('solidityUnitTesting') .pause(2000) diff --git a/apps/remix-ide-e2e/src/tests/staticAnalysis.test.ts b/apps/remix-ide-e2e/src/tests/staticAnalysis.test.ts index 9a12195b6e..f8f2d3467e 100644 --- a/apps/remix-ide-e2e/src/tests/staticAnalysis.test.ts +++ b/apps/remix-ide-e2e/src/tests/staticAnalysis.test.ts @@ -46,14 +46,17 @@ module.exports = { .waitForElementPresent('//*[@id="staticanalysisresult"]', 5000) .useCss() // Check warning count - .click('*[data-rb-event-key="remix"]') + .pause() + .waitForElementVisible('span#ssaRemixtab') + .click('span#ssaRemixtab') .assert.containsText('span#ssaRemixtab > *[data-id="RemixStaticAnalysisErrorCount"]', '1') .verify.elementPresent('input[name="showLibWarnings"]') .verify.not.elementPresent('input[name="showLibWarnings"]:checked') .verify.elementPresent('label[id="headingshowLibWarnings"]') .click('label[id="headingshowLibWarnings"]') .pause(1000) - .click('*[data-rb-event-key="remix"]') + .waitForElementVisible('span#ssaRemixtab') + .click('span#ssaRemixtab') .assert.containsText('span#ssaRemixtab > *[data-id="RemixStaticAnalysisErrorCount', '386') .click('label[id="headingshowLibWarnings"]') .pause(1000) diff --git a/apps/remix-ide-e2e/src/tests/stressEditor.test.ts b/apps/remix-ide-e2e/src/tests/stressEditor.test.ts index 5e44c8d200..524c441d77 100644 --- a/apps/remix-ide-e2e/src/tests/stressEditor.test.ts +++ b/apps/remix-ide-e2e/src/tests/stressEditor.test.ts @@ -36,9 +36,9 @@ module.exports = { contents[i] = localContent const name = 'test_' + i + '.sol' browser.click('[data-id="fileExplorerNewFilecreateNewFile"]') - .waitForElementContainsText('*[data-id$="/blank"]', '', 60000) - .sendKeys('*[data-id$="/blank"] .remixui_items', name) - .sendKeys('*[data-id$="/blank"] .remixui_items', browser.Keys.ENTER) + .waitForElementContainsText('*[data-id$="fileExplorerTreeItemInput"]', '', 60000) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', name) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) .getText('.remix_ui_terminal_block', (result) => { console.log(result) }) @@ -51,9 +51,9 @@ module.exports = { contents[i] = localContent const name = 'test_' + i + '.sol' browser.click('[data-id="fileExplorerNewFilecreateNewFile"]') - .waitForElementContainsText('*[data-id$="/blank"]', '', 60000) - .sendKeys('*[data-id$="/blank"] .remixui_items', name) - .sendKeys('*[data-id$="/blank"] .remixui_items', browser.Keys.ENTER) + .waitForElementContainsText('*[data-id$="fileExplorerTreeItemInput"]', '', 60000) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', name) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) .getText('.remix_ui_terminal_block', (result) => { console.log(result) }) @@ -66,9 +66,9 @@ module.exports = { contents[i] = localContent const name = 'test_' + i + '.sol' browser.click('[data-id="fileExplorerNewFilecreateNewFile"]') - .waitForElementContainsText('*[data-id$="/blank"]', '', 60000) - .sendKeys('*[data-id$="/blank"] .remixui_items', name) - .sendKeys('*[data-id$="/blank"] .remixui_items', browser.Keys.ENTER) + .waitForElementContainsText('*[data-id$="fileExplorerTreeItemInput"]', '', 60000) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', name) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) .getText('.remix_ui_terminal_block', (result) => { console.log(result) }) @@ -81,9 +81,9 @@ module.exports = { contents[i] = localContent const name = 'test_' + i + '.sol' browser.click('[data-id="fileExplorerNewFilecreateNewFile"]') - .waitForElementContainsText('*[data-id$="/blank"]', '', 60000) - .sendKeys('*[data-id$="/blank"] .remixui_items', name) - .sendKeys('*[data-id$="/blank"] .remixui_items', browser.Keys.ENTER) + .waitForElementContainsText('*[data-id$="fileExplorerTreeItemInput"]', '', 60000) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', name) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) .getText('.remix_ui_terminal_block', (result) => { console.log(result) }) @@ -96,9 +96,9 @@ module.exports = { contents[i] = localContent const name = 'test_' + i + '.sol' browser.click('[data-id="fileExplorerNewFilecreateNewFile"]') - .waitForElementContainsText('*[data-id$="/blank"]', '', 60000) - .sendKeys('*[data-id$="/blank"] .remixui_items', name) - .sendKeys('*[data-id$="/blank"] .remixui_items', browser.Keys.ENTER) + .waitForElementContainsText('*[data-id$="fileExplorerTreeItemInput"]', '', 60000) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', name) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) .getText('.remix_ui_terminal_block', (result) => { console.log(result) }) @@ -111,9 +111,9 @@ module.exports = { contents[i] = localContent const name = 'test_' + i + '.sol' browser.click('[data-id="fileExplorerNewFilecreateNewFile"]') - .waitForElementContainsText('*[data-id$="/blank"]', '', 60000) - .sendKeys('*[data-id$="/blank"] .remixui_items', name) - .sendKeys('*[data-id$="/blank"] .remixui_items', browser.Keys.ENTER) + .waitForElementContainsText('*[data-id$="fileExplorerTreeItemInput"]', '', 60000) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', name) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) .getText('.remix_ui_terminal_block', (result) => { console.log(result) }) @@ -126,9 +126,9 @@ module.exports = { contents[i] = localContent const name = 'test_' + i + '.sol' browser.click('[data-id="fileExplorerNewFilecreateNewFile"]') - .waitForElementContainsText('*[data-id$="/blank"]', '', 60000) - .sendKeys('*[data-id$="/blank"] .remixui_items', name) - .sendKeys('*[data-id$="/blank"] .remixui_items', browser.Keys.ENTER) + .waitForElementContainsText('*[data-id$="fileExplorerTreeItemInput"]', '', 60000) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', name) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) .getText('.remix_ui_terminal_block', (result) => { console.log(result) }) @@ -141,9 +141,9 @@ module.exports = { contents[i] = localContent const name = 'test_' + i + '.sol' browser.click('[data-id="fileExplorerNewFilecreateNewFile"]') - .waitForElementContainsText('*[data-id$="/blank"]', '', 60000) - .sendKeys('*[data-id$="/blank"] .remixui_items', name) - .sendKeys('*[data-id$="/blank"] .remixui_items', browser.Keys.ENTER) + .waitForElementContainsText('*[data-id$="fileExplorerTreeItemInput"]', '', 60000) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', name) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) .getText('.remix_ui_terminal_block', (result) => { console.log(result) }) @@ -156,9 +156,9 @@ module.exports = { contents[i] = localContent const name = 'test_' + i + '.sol' browser.click('[data-id="fileExplorerNewFilecreateNewFile"]') - .waitForElementContainsText('*[data-id$="/blank"]', '', 60000) - .sendKeys('*[data-id$="/blank"] .remixui_items', name) - .sendKeys('*[data-id$="/blank"] .remixui_items', browser.Keys.ENTER) + .waitForElementContainsText('*[data-id$="fileExplorerTreeItemInput"]', '', 60000) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', name) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) .getText('.remix_ui_terminal_block', (result) => { console.log(result) }) @@ -171,9 +171,9 @@ module.exports = { contents[i] = localContent const name = 'test_' + i + '.sol' browser.click('[data-id="fileExplorerNewFilecreateNewFile"]') - .waitForElementContainsText('*[data-id$="/blank"]', '', 60000) - .sendKeys('*[data-id$="/blank"] .remixui_items', name) - .sendKeys('*[data-id$="/blank"] .remixui_items', browser.Keys.ENTER) + .waitForElementContainsText('*[data-id$="fileExplorerTreeItemInput"]', '', 60000) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', name) + .sendKeys('*[data-id$="fileExplorerTreeItemInput"]', browser.Keys.ENTER) .getText('.remix_ui_terminal_block', (result) => { console.log(result) }) diff --git a/apps/remix-ide-e2e/src/tests/url.test.ts b/apps/remix-ide-e2e/src/tests/url.test.ts index 0a09c9745c..605c731cd3 100644 --- a/apps/remix-ide-e2e/src/tests/url.test.ts +++ b/apps/remix-ide-e2e/src/tests/url.test.ts @@ -91,15 +91,15 @@ module.exports = { }) }, - 'Should load Etherscan verified contracts from URL "address" param)': function (browser: NightwatchBrowser) { + 'Should load Etherscan verified contracts from URL "address" param) #group1': function (browser: NightwatchBrowser) { browser .url('http://127.0.0.1:8080/#address=0xdac17f958d2ee523a2206206994597c13d831ec7') .refreshPage() .pause(7000) .currentWorkspaceIs('code-sample') - .assert.elementPresent('*[data-id=treeViewLitreeViewItemmainnet]') - .assert.elementPresent('*[data-id="treeViewLitreeViewItemmainnet/0xdac17f958d2ee523a2206206994597c13d831ec7"]') - .assert.elementPresent('*[data-id="treeViewLitreeViewItemmainnet/0xdac17f958d2ee523a2206206994597c13d831ec7/TetherToken.sol"]') + .waitForElementVisible('*[data-id=treeViewLitreeViewItemmainnet]') + .waitForElementVisible('*[data-id="treeViewLitreeViewItemmainnet/0xdac17f958d2ee523a2206206994597c13d831ec7"]') + .waitForElementVisible('*[data-id="treeViewLitreeViewItemmainnet/0xdac17f958d2ee523a2206206994597c13d831ec7/TetherToken.sol"]') .getEditorValue((content) => { browser.assert.ok(content && content.indexOf( 'contract TetherToken is Pausable, StandardToken, BlackList {') !== -1) @@ -218,8 +218,10 @@ module.exports = { .clickLaunchIcon('solidity') .click('*[data-id="scConfigExpander"]') - .waitForElementVisible('#versionSelector option[data-id="selected"]') - .assert.containsText('#versionSelector option[data-id="selected"]', '0.8.16+commit.07a7930e') + .waitForElementVisible({ + selector: "//*[@data-id='selectedVersion' and contains(.,'0.8.16+commit.07a7930e')]", + locateStrategy: 'xpath' + }) .assert.containsText('#evmVersionSelector option[data-id="selected"]', 'istanbul') .assert.containsText('#compilierLanguageSelector option[data-id="selected"]', 'Yul') .verify.elementPresent('#optimize:checked') @@ -229,14 +231,18 @@ module.exports = { .refreshPage() .clickLaunchIcon('solidity') - .waitForElementVisible('#versionSelector option[data-id="selected"]') - .assert.containsText('#versionSelector option[data-id="selected"]', '0.8.7+commit.e28d00a7') + .waitForElementVisible({ + selector: "//*[@data-id='selectedVersion' and contains(.,'0.8.7+commit.e28d00a7')]", + locateStrategy: 'xpath' + }) .url('http://127.0.0.1:8080/#version=0.8.15+commit.e14f2714') .refreshPage() .pause(3000) .clickLaunchIcon('solidity') - .waitForElementVisible('#versionSelector option[data-id="selected"]') - .assert.containsText('#versionSelector option[data-id="selected"]', '0.8.15+commit.e14f2714') + .waitForElementVisible({ + selector: "//*[@data-id='selectedVersion' and contains(.,'0.8.15+commit.e14f2714')]", + locateStrategy: 'xpath' + }) }, 'Should load using compiler from link passed in remix URL #group3': function (browser: NightwatchBrowser) { @@ -247,7 +253,10 @@ module.exports = { .clickLaunchIcon('solidity') .click('*[data-id="scConfigExpander"]') - .assert.containsText('#versionSelector option[data-id="selected"]', 'custom') + .waitForElementVisible({ + selector: "//*[@data-id='selectedVersion' and contains(.,'custom')]", + locateStrategy: 'xpath' + }) // default values .assert.containsText('#evmVersionSelector option[data-id="selected"]', 'default') .verify.elementPresent('#optimize') @@ -261,12 +270,8 @@ module.exports = { browser .url('http://127.0.0.1:8080/#optimize=false&runs=200&url=https://raw.githubusercontent.com/EthVM/evm-source-verification/main/contracts/1/0x011e5846975c6463a8c6337eecf3cbf64e328884/input.json') .refreshPage() - - .switchWorkspace('code-sample') - .openFile('@openzeppelin') - .openFile('@openzeppelin/contracts') - .openFile('@openzeppelin/contracts/access') - .openFile('@openzeppelin/contracts/access/AccessControl.sol') + .currentWorkspaceIs('code-sample') + .waitForElementVisible('*[data-id="treeViewDivtreeViewItem@openzeppelin/contracts/access/AccessControl.sol"]') .openFile('contracts') .openFile('contracts/governance') .openFile('contracts/governance/UnionGovernor.sol') diff --git a/apps/remix-ide-e2e/src/tests/workspace.test.ts b/apps/remix-ide-e2e/src/tests/workspace.test.ts index 6c9d7e6b07..1f1cb3dd06 100644 --- a/apps/remix-ide-e2e/src/tests/workspace.test.ts +++ b/apps/remix-ide-e2e/src/tests/workspace.test.ts @@ -555,6 +555,9 @@ module.exports = { .execute(function () { (document.querySelector('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') as HTMLElement).click() }) .waitForElementVisible('[data-id="PermissionHandler-modal-footer-ok-react"]', 300000) .click('[data-id="PermissionHandler-modal-footer-ok-react"]') + // click on lib to close it + .waitForElementVisible('*[data-id="treeViewLitreeViewItemlib"]') + .click('*[data-id="treeViewLitreeViewItemlib"]') .waitForElementVisible('*[data-id="treeViewLitreeViewItemsrc"]') .waitForElementVisible('*[data-id="treeViewLitreeViewItemsrc/MULTI_SIG"]') .waitForElementVisible('*[data-id="treeViewLitreeViewItemsrc/MULTI_SIG/MultiSigSwapHook.sol"]') diff --git a/apps/remix-ide-e2e/src/tests/workspace_git.test.ts b/apps/remix-ide-e2e/src/tests/workspace_git.test.ts index 138b040a3e..6e04043193 100644 --- a/apps/remix-ide-e2e/src/tests/workspace_git.test.ts +++ b/apps/remix-ide-e2e/src/tests/workspace_git.test.ts @@ -226,9 +226,8 @@ module.exports = { 'Should prevent checkout to a branch if local changes exists #group3': function (browser: NightwatchBrowser) { browser - .renamePath('README.md', 'README.txt', 'README.txt') + .renamePath('README.md', 'README_2', 'README_2.md') .waitForElementVisible('[data-id="workspaceGitBranchesDropdown"]') - .click('[data-id="workspaceGitBranchesDropdown"]') .waitForElementVisible('[data-id="workspaceGit-dev"]') .click('[data-id="workspaceGit-dev"]') .waitForElementVisible('[data-id="switchBranchModalDialogContainer-react"]') diff --git a/apps/remix-ide-e2e/src/types/index.d.ts b/apps/remix-ide-e2e/src/types/index.d.ts index 665a1cc4f5..7de0101fa6 100644 --- a/apps/remix-ide-e2e/src/types/index.d.ts +++ b/apps/remix-ide-e2e/src/types/index.d.ts @@ -56,7 +56,7 @@ declare module 'nightwatch' { journalLastChild(val: string): NightwatchBrowser checkTerminalFilter(filter: string, test: string): NightwatchBrowser noWorkerErrorFor(version: string): NightwatchBrowser - validateValueInput(selector: string, valueTosSet: string, expectedValue: string): NightwatchBrowser + validateValueInput(selector: string, valueTosSet: string[], expectedValue: string): NightwatchBrowser checkAnnotations(type: string): NightwatchBrowser checkAnnotationsNotPresent(type: string): NightwatchBrowser getLastTransactionHash(callback: (hash: string) => void) @@ -71,6 +71,8 @@ declare module 'nightwatch' { switchEnvironment: (provider: string) => NightwatchBrowser connectToExternalHttpProvider: (url: string, identifier: string) => NightwatchBrowser waitForElementNotContainsText: (id: string, value: string, timeout: number = 10000) => NightwatchBrowser + hideToolTips: (this: NightwatchBrowser) => NightwatchBrowser + enableClipBoard: () => NightwatchBrowser } export interface NightwatchBrowser { diff --git a/apps/remix-ide/ci/downloadsoljson.sh b/apps/remix-ide/ci/downloadsoljson.sh index b99ed2d6b0..ddbe6b5198 100644 --- a/apps/remix-ide/ci/downloadsoljson.sh +++ b/apps/remix-ide/ci/downloadsoljson.sh @@ -27,6 +27,7 @@ if [ ! -d "./apps/remix-ide/src/assets/js/soljson" ]; then mkdir ./apps/remix-ide/src/assets/js/soljson fi cp ./apps/remix-ide/src/assets/js/soljson.js ./apps/remix-ide/src/assets/js/soljson/$url +cp list.json ./apps/remix-ide/src/assets/list.json # remove list.json rm list.json diff --git a/apps/remix-ide/project.json b/apps/remix-ide/project.json index 22e095fb9a..395b9f4a6f 100644 --- a/apps/remix-ide/project.json +++ b/apps/remix-ide/project.json @@ -39,6 +39,13 @@ "generateIndexHtml": true, "extractCss": false, "vendorChunk": false + }, + "desktop": { + "optimization": false, + "generateIndexHtml": true, + "extractCss": false, + "vendorChunk": false, + "baseHref": "./" } } }, diff --git a/apps/remix-ide/src/app.js b/apps/remix-ide/src/app.js index eed35827d0..6f01181fa5 100644 --- a/apps/remix-ide/src/app.js +++ b/apps/remix-ide/src/app.js @@ -22,7 +22,7 @@ import {WalkthroughService} from './walkthroughService' import {OffsetToLineColumnConverter, CompilerMetadata, CompilerArtefacts, FetchAndCompile, CompilerImports, GistHandler} from '@remix-project/core-plugin' -import Registry from './app/state/registry' +import {Registry} from '@remix-project/remix-lib' import {ConfigPlugin} from './app/plugins/config' import {StoragePlugin} from './app/plugins/storage' import {Layout} from './app/panels/layout' @@ -43,20 +43,30 @@ import {Injected0ptimismProvider} from './app/providers/injected-optimism-provid import {InjectedArbitrumOneProvider} from './app/providers/injected-arbitrum-one-provider' import {InjectedEphemeryTestnetProvider} from './app/providers/injected-ephemery-testnet-provider' import {InjectedSKALEChaosTestnetProvider} from './app/providers/injected-skale-chaos-testnet-provider' -import {FileDecorator} from './app/plugins/file-decorator' -import {CodeFormat} from './app/plugins/code-format' -import {SolidityUmlGen} from './app/plugins/solidity-umlgen' +import { FileDecorator } from './app/plugins/file-decorator' +import { CodeFormat } from './app/plugins/code-format' +import { SolidityUmlGen } from './app/plugins/solidity-umlgen' import { CompilationDetailsPlugin } from './app/plugins/compile-details' import { VyperCompilationDetailsPlugin } from './app/plugins/vyper-compilation-details' -import {ContractFlattener} from './app/plugins/contractFlattener' +import { ContractFlattener } from './app/plugins/contractFlattener' +import { TemplatesPlugin } from './app/plugins/remix-templates' +import { fsPlugin } from './app/plugins/electron/fsPlugin' +import { isoGitPlugin } from './app/plugins/electron/isoGitPlugin' +import { electronConfig } from './app/plugins/electron/electronConfigPlugin' +import { electronTemplates } from './app/plugins/electron/templatesPlugin' +import { xtermPlugin } from './app/plugins/electron/xtermPlugin' +import { ripgrepPlugin } from './app/plugins/electron/ripgrepPlugin' +import { compilerLoaderPlugin, compilerLoaderPluginDesktop } from './app/plugins/electron/compilerLoaderPlugin' + import {OpenAIGpt} from './app/plugins/openaigpt' const isElectron = require('is-electron') const remixLib = require('@remix-project/remix-lib') -import {QueryParams} from '@remix-project/remix-lib' -import {SearchPlugin} from './app/tabs/search' +import { QueryParams } from '@remix-project/remix-lib' +import { SearchPlugin } from './app/tabs/search' +import { ElectronProvider } from './app/files/electronProvider' import { CopilotSuggestion } from './app/plugins/copilot/suggestion-service/copilot-suggestion' const Storage = remixLib.Storage @@ -64,7 +74,8 @@ const RemixDProvider = require('./app/files/remixDProvider') const Config = require('./config') const FileManager = require('./app/files/fileManager') -const FileProvider = require('./app/files/fileProvider') +import FileProvider from "./app/files/fileProvider" +import { appPlatformTypes } from '@remix-ui/app' const DGitProvider = require('./app/files/dgitProvider') const WorkspaceFileProvider = require('./app/files/workspaceFileProvider') @@ -80,8 +91,23 @@ const Editor = require('./app/editor/editor') const Terminal = require('./app/panels/terminal') const {TabProxy} = require('./app/panels/tab-proxy.js') + +export class platformApi { + get name () { + return isElectron() ? appPlatformTypes.desktop : appPlatformTypes.web + } + isDesktop () { + return isElectron() + } +} + class AppComponent { constructor() { + const PlatFormAPi = new platformApi() + Registry.getInstance().put({ + api: PlatFormAPi, + name: 'platform' + }) this.appManager = new RemixAppManager({}) this.queryParams = new QueryParams() this._components = {} @@ -110,10 +136,18 @@ class AppComponent { name: 'fileproviders/workspace' }) + this._components.filesProviders.electron = new ElectronProvider(this.appManager) + Registry.getInstance().put({ + api: this._components.filesProviders.electron, + name: 'fileproviders/electron' + }) + Registry.getInstance().put({ api: this._components.filesProviders, name: 'fileproviders' }) + + } async run() { @@ -138,6 +172,8 @@ class AppComponent { this.walkthroughService = new WalkthroughService(appManager) + this.platform = isElectron() ? 'desktop' : 'web' + const hosts = ['127.0.0.1:8080', '192.168.0.101:8080', 'localhost:8080'] // workaround for Electron support if (!isElectron() && !hosts.includes(window.location.host)) { @@ -183,6 +219,9 @@ class AppComponent { //----- search const search = new SearchPlugin() + //---- templates + const templates = new TemplatesPlugin() + //---------------- Solidity UML Generator ------------------------- const solidityumlgen = new SolidityUmlGen(appManager) @@ -268,6 +307,7 @@ class AppComponent { const permissionHandler = new PermissionHandlerPlugin() + this.engine.register([ permissionHandler, this.layout, @@ -318,10 +358,30 @@ class AppComponent { vyperCompilationDetails, contractFlattener, solidityScript, + templates, openaigpt, copilotSuggestion ]) + //---- fs plugin + if (isElectron()) { + const FSPlugin = new fsPlugin() + this.engine.register([FSPlugin]) + const isoGit = new isoGitPlugin() + this.engine.register([isoGit]) + const electronConfigPlugin = new electronConfig() + this.engine.register([electronConfigPlugin]) + const templatesPlugin = new electronTemplates() + this.engine.register([templatesPlugin]) + const xterm = new xtermPlugin() + this.engine.register([xterm]) + const ripgrep = new ripgrepPlugin() + this.engine.register([ripgrep]) + } + + const compilerloader = isElectron()? new compilerLoaderPluginDesktop(): new compilerLoaderPlugin() + this.engine.register([compilerloader]) + // LAYOUT & SYSTEM VIEWS const appPanel = new MainPanel() Registry.getInstance().put({api: this.mainview, name: 'mainview'}) @@ -400,6 +460,9 @@ class AppComponent { } catch (e) { console.log("couldn't register iframe plugins", e.message) } + if (isElectron()){ + await this.appManager.activatePlugin(['fs']) + } await this.appManager.activatePlugin(['layout']) await this.appManager.activatePlugin(['notification']) await this.appManager.activatePlugin(['editor']) @@ -428,19 +491,31 @@ class AppComponent { 'blockchain', 'fetchAndCompile', 'contentImport', - 'gistHandler' + 'gistHandler', + 'compilerloader' ]) await this.appManager.activatePlugin(['settings']) + await this.appManager.activatePlugin(['walkthrough', 'storage', 'search', 'compileAndRun', 'recorder']) + await this.appManager.activatePlugin(['solidity-script', 'remix-templates']) + + if (isElectron()){ + await this.appManager.activatePlugin(['isogit', 'electronconfig', 'electronTemplates', 'xterm', 'ripgrep']) + } + + this.appManager.on( + 'filePanel', + 'workspaceInitializationCompleted', + async () => { + // for e2e tests + const loadedElement = document.createElement('span') + loadedElement.setAttribute('data-id', 'workspaceloaded') + document.body.appendChild(loadedElement) + await this.appManager.registerContextMenuItems() + } + ) await this.appManager.activatePlugin(['solidity-script', 'openaigpt']) - this.appManager.on('filePanel', 'workspaceInitializationCompleted', async () => { - // for e2e tests - const loadedElement = document.createElement('span') - loadedElement.setAttribute('data-id', 'workspaceloaded') - document.body.appendChild(loadedElement) - await this.appManager.registerContextMenuItems() - }) await this.appManager.activatePlugin(['filePanel']) // Set workspace after initial activation diff --git a/apps/remix-ide/src/app/components/preload.tsx b/apps/remix-ide/src/app/components/preload.tsx index fb7b69c604..fade37390a 100644 --- a/apps/remix-ide/src/app/components/preload.tsx +++ b/apps/remix-ide/src/app/components/preload.tsx @@ -1,16 +1,17 @@ import {RemixApp} from '@remix-ui/app' import axios from 'axios' import React, {useEffect, useRef, useState} from 'react' -import {render} from 'react-dom' +import { createRoot } from 'react-dom/client' import * as packageJson from '../../../../../package.json' import {fileSystem, fileSystems} from '../files/fileSystem' import {indexedDBFileSystem} from '../files/filesystems/indexedDB' import {localStorageFS} from '../files/filesystems/localStorage' import {fileSystemUtility, migrationTestData} from '../files/filesystems/fileSystemUtility' import './styles/preload.css' +import isElectron from 'is-electron' const _paq = (window._paq = window._paq || []) -export const Preload = () => { +export const Preload = (props: any) => { const [tip, setTip] = useState('') const [supported, setSupported] = useState(true) const [error, setError] = useState(false) @@ -34,12 +35,7 @@ export const Preload = () => { .then((AppComponent) => { const appComponent = new AppComponent.default() appComponent.run().then(() => { - render( - <> - - , - document.getElementById('root') - ) + props.root.render() }) }) .catch((err) => { @@ -86,7 +82,11 @@ export const Preload = () => { } } - useEffect(() => { + useEffect (() => { + if(isElectron()){ + loadAppComponent() + return + } async function loadStorage() { ;(await remixFileSystems.current.addFileSystem(remixIndexedDB.current)) || _paq.push(['trackEvent', 'Storage', 'error', 'indexedDB not supported']) ;(await remixFileSystems.current.addFileSystem(localStorageFileSystem.current)) || _paq.push(['trackEvent', 'Storage', 'error', 'localstorage not supported']) diff --git a/apps/remix-ide/src/app/editor/editor.js b/apps/remix-ide/src/app/editor/editor.js index 46bd19e146..98a027b714 100644 --- a/apps/remix-ide/src/app/editor/editor.js +++ b/apps/remix-ide/src/app/editor/editor.js @@ -402,10 +402,7 @@ class Editor extends Plugin { */ editorFontSize (incr) { if (!this.activated) return - const newSize = this.api.getFontSize() + incr - if (newSize >= 6) { - this.emit('setFontSize', newSize) - } + this.emit('setFontSize', incr) } /** diff --git a/apps/remix-ide/src/app/files/dgitProvider.js b/apps/remix-ide/src/app/files/dgitProvider.ts similarity index 63% rename from apps/remix-ide/src/app/files/dgitProvider.js rename to apps/remix-ide/src/app/files/dgitProvider.ts index 6738c52ddf..b741860cdb 100644 --- a/apps/remix-ide/src/app/files/dgitProvider.js +++ b/apps/remix-ide/src/app/files/dgitProvider.ts @@ -10,10 +10,11 @@ import { } from 'file-saver' import http from 'isomorphic-git/http/web' -const JSZip = require('jszip') -const path = require('path') -const FormData = require('form-data') -const axios = require('axios') +import JSZip from 'jszip' +import path from 'path' +import FormData from 'form-data' +import axios from 'axios' +import {Registry} from '@remix-project/remix-lib' const profile = { name: 'dGitProvider', @@ -21,11 +22,17 @@ const profile = { description: 'Decentralized git provider', icon: 'assets/img/fileManager.webp', version: '0.0.1', - methods: ['init', 'localStorageUsed', 'addremote', 'delremote', 'remotes', 'fetch', 'clone', 'export', 'import', 'status', 'log', 'commit', 'add', 'remove', 'rm', 'lsfiles', 'readblob', 'resolveref', 'branches', 'branch', 'checkout', 'currentbranch', 'push', 'pin', 'pull', 'pinList', 'unPin', 'setIpfsConfig', 'zip', 'setItem', 'getItem', 'updateSubmodules'], + methods: ['init', 'localStorageUsed', 'addremote', 'delremote', 'remotes', 'fetch', 'clone', 'export', 'import', 'status', 'log', 'commit', 'add', 'remove', 'reset', 'rm', 'lsfiles', 'readblob', 'resolveref', 'branches', 'branch', 'checkout', 'currentbranch', 'push', 'pin', 'pull', 'pinList', 'unPin', 'setIpfsConfig', 'zip', 'setItem', 'getItem', 'version', 'updateSubmodules'], kind: 'file-system' } class DGitProvider extends Plugin { - constructor () { + ipfsconfig: { host: string; port: number; protocol: string; ipfsurl: string } + globalIPFSConfig: { host: string; port: number; protocol: string; ipfsurl: string } + remixIPFS: { host: string; port: number; protocol: string; ipfsurl: string } + ipfsSources: any[] + ipfs: any + filesToSend: any[] + constructor() { super(profile) this.ipfsconfig = { host: 'jqgt.remixproject.org', @@ -48,7 +55,15 @@ class DGitProvider extends Plugin { this.ipfsSources = [this.remixIPFS, this.globalIPFSConfig, this.ipfsconfig] } - async getGitConfig (dir = '') { + async getGitConfig(dir = '') { + + if ((Registry.getInstance().get('platform').api.isDesktop())) { + return { + fs: window.remixFileSystem, + dir: '/' + } + } + const workspace = await this.call('filePanel', 'getCurrentWorkspace') if (!workspace) return @@ -58,7 +73,7 @@ class DGitProvider extends Plugin { } } - async parseInput (input) { + async parseInput(input) { return { corsProxy: 'https://corsproxy.remixproject.org/', http, @@ -73,7 +88,15 @@ class DGitProvider extends Plugin { } } - async init (input) { + async init(input?) { + if ((Registry.getInstance().get('platform').api.isDesktop())) { + await this.call('isogit', 'init', { + defaultBranch: (input && input.branch) || 'main' + }) + this.emit('init') + return + } + await git.init({ ...await this.getGitConfig(), defaultBranch: (input && input.branch) || 'main' @@ -81,74 +104,140 @@ class DGitProvider extends Plugin { this.emit('init') } - async status (cmd) { + async version() { + if ((Registry.getInstance().get('platform').api.isDesktop())) { + return await this.call('isogit', 'version') + } + + const version = 'built-in' + return version + } + + async status(cmd) { + + if ((Registry.getInstance().get('platform').api.isDesktop())) { + const status = await this.call('isogit', 'status', cmd) + + return status + } + + const status = await git.statusMatrix({ ...await this.getGitConfig(), ...cmd }) + return status } - async add (cmd) { - await git.add({ - ...await this.getGitConfig(), - ...cmd - }) + async add(cmd) { + + if ((Registry.getInstance().get('platform').api.isDesktop())) { + await this.call('isogit', 'add', cmd) + } else { + await git.add({ + ...await this.getGitConfig(), + ...cmd + }) + } + this.emit('add') } - async rm (cmd) { - await git.remove({ - ...await this.getGitConfig(), - ...cmd - }) + async rm(cmd) { + + if ((Registry.getInstance().get('platform').api.isDesktop())) { + await this.call('isogit', 'rm', cmd) + } else { + await git.remove({ + ...await this.getGitConfig(), + ...cmd + }) + this.emit('rm') + + } } - async checkout (cmd, refresh = true) { - const gitmodules = await this.parseGitmodules() || [] - await git.checkout({ - ...await this.getGitConfig(), - ...cmd - }) - const newgitmodules = await this.parseGitmodules() || [] - // find the difference between the two gitmodule versions - const toRemove = gitmodules.filter((module) => { - return !newgitmodules.find((newmodule) => { - return newmodule.name === module.name + async reset(cmd) { + + if ((Registry.getInstance().get('platform').api.isDesktop())) { + await this.call('isogit', 'reset', cmd) + } else { + await git.resetIndex({ + ...await this.getGitConfig(), + ...cmd }) - }) + this.emit('rm') - for (const module of toRemove) { - const path = (await this.getGitConfig(module.path)).dir - if (await window.remixFileSystem.exists(path)) { - const stat = await window.remixFileSystem.stat(path) - try { - if (stat.isDirectory()) { - await window.remixFileSystem.unlink((await this.getGitConfig(module.path)).dir) + } + } + + async checkout(cmd, refresh = true) { + + if ((Registry.getInstance().get('platform').api.isDesktop())) { + await this.call('isogit', 'checkout', cmd) + } else { + const gitmodules = await this.parseGitmodules() || [] + await git.checkout({ + ...await this.getGitConfig(), + ...cmd + }) + const newgitmodules = await this.parseGitmodules() || [] + // find the difference between the two gitmodule versions + const toRemove = gitmodules.filter((module) => { + return !newgitmodules.find((newmodule) => { + return newmodule.name === module.name + }) + }) + + for (const module of toRemove) { + const path = (await this.getGitConfig(module.path)).dir + if (await window.remixFileSystem.exists(path)) { + const stat = await window.remixFileSystem.stat(path) + try { + if (stat.isDirectory()) { + await window.remixFileSystem.unlink((await this.getGitConfig(module.path)).dir) + } + } catch (e) { + // do nothing } - } catch (e) { - // do nothing } } } - - if (refresh) + if (refresh) { setTimeout(async () => { await this.call('fileManager', 'refresh') }, 1000) + } this.emit('checkout') } - async log (cmd) { + async log(cmd) { + + if ((Registry.getInstance().get('platform').api.isDesktop())) { + const status = await this.call('isogit', 'log', { + ...cmd, + depth: 10 + }) + + return status + } + + const status = await git.log({ ...await this.getGitConfig(), - ...cmd + ...cmd, + depth: 10 }) return status } - async remotes (config) { + async remotes(config) { + if ((Registry.getInstance().get('platform').api.isDesktop())) { + return await this.call('isogit', 'remotes', config) + } + let remotes = [] try { remotes = await git.listRemotes({ ...config ? config : await this.getGitConfig() }) @@ -158,11 +247,17 @@ class DGitProvider extends Plugin { return remotes } - async branch (cmd, refresh = true) { - const status = await git.branch({ - ...await this.getGitConfig(), - ...cmd - }) + async branch(cmd, refresh = true) { + + let status + if ((Registry.getInstance().get('platform').api.isDesktop())) { + status = await this.call('isogit', 'branch', cmd) + } else { + status = await git.branch({ + ...await this.getGitConfig(), + ...cmd + }) + } if (refresh) { setTimeout(async () => { await this.call('fileManager', 'refresh') @@ -172,7 +267,14 @@ class DGitProvider extends Plugin { return status } - async currentbranch (config) { + async currentbranch(config) { + + + + if ((Registry.getInstance().get('platform').api.isDesktop())) { + return await this.call('isogit', 'currentbranch') + } + try { const defaultConfig = await this.getGitConfig() const cmd = config ? defaultConfig ? { ...defaultConfig, ...config } : config : defaultConfig @@ -184,7 +286,12 @@ class DGitProvider extends Plugin { } } - async branches (config) { + async branches(config) { + + if ((Registry.getInstance().get('platform').api.isDesktop())) { + return await this.call('isogit', 'branches') + } + try { const defaultConfig = await this.getGitConfig() const cmd = config ? defaultConfig ? { ...defaultConfig, ...config } : config : defaultConfig @@ -202,21 +309,39 @@ class DGitProvider extends Plugin { } } - async commit (cmd) { - await this.init() - try { - const sha = await git.commit({ - ...await this.getGitConfig(), - ...cmd - }) - this.emit('commit') - return sha - } catch (e) { - throw new Error(e) + async commit(cmd) { + + if ((Registry.getInstance().get('platform').api.isDesktop())) { + try { + await this.call('isogit', 'init') + const sha = await this.call('isogit', 'commit', cmd) + this.emit('commit') + return sha + } catch (e) { + throw new Error(e) + } + } else { + + await this.init() + try { + const sha = await git.commit({ + ...await this.getGitConfig(), + ...cmd + }) + this.emit('commit') + return sha + } catch (e) { + throw new Error(e) + } } } - async lsfiles (cmd) { + async lsfiles(cmd) { + + if ((Registry.getInstance().get('platform').api.isDesktop())) { + return await this.call('isogit', 'lsfiles', cmd) + } + const filesInStaging = await git.listFiles({ ...await this.getGitConfig(), ...cmd @@ -224,7 +349,12 @@ class DGitProvider extends Plugin { return filesInStaging } - async resolveref (cmd) { + async resolveref(cmd) { + + if ((Registry.getInstance().get('platform').api.isDesktop())) { + return await this.call('isogit', 'resolveref', cmd) + } + const oid = await git.resolveRef({ ...await this.getGitConfig(), ...cmd @@ -232,22 +362,27 @@ class DGitProvider extends Plugin { return oid } - async readblob (cmd) { + async readblob(cmd) { + if ((Registry.getInstance().get('platform').api.isDesktop())) { + const readBlobResult = await this.call('isogit', 'readblob', cmd) + return readBlobResult + } const readBlobResult = await git.readBlob({ ...await this.getGitConfig(), ...cmd }) + return readBlobResult } - async setIpfsConfig (config) { + async setIpfsConfig(config) { this.ipfsconfig = config return new Promise((resolve) => { resolve(this.checkIpfsConfig()) }) } - async checkIpfsConfig (config) { + async checkIpfsConfig(config?) { this.ipfs = IpfsHttpClient(config || this.ipfsconfig) try { await this.ipfs.config.getAll() @@ -257,40 +392,73 @@ class DGitProvider extends Plugin { } } - async addremote (input) { + async addremote(input) { + if ((Registry.getInstance().get('platform').api.isDesktop())) { + await this.call('isogit', 'addremote', { url: input.url, remote: input.remote }) + return + } await git.addRemote({ ...await this.getGitConfig(), url: input.url, remote: input.remote }) } - async delremote (input) { + async delremote(input) { + if ((Registry.getInstance().get('platform').api.isDesktop())) { + await this.call('isogit', 'delremote', { remote: input.remote }) + return + } await git.deleteRemote({ ...await this.getGitConfig(), remote: input.remote }) } - async localStorageUsed () { + async localStorageUsed() { return this.calculateLocalStorage() } - async clone (input, workspaceName, workspaceExists = false) { - const permission = await this.askUserPermission('clone', 'Import multiple files into your workspaces.') - if (!permission) return false - if (this.calculateLocalStorage() > 10000) throw new Error('The local storage of the browser is full.') - if (!workspaceExists) await this.call('filePanel', 'createWorkspace', workspaceName || `workspace_${Date.now()}`, true) - const cmd = { - url: input.url, - singleBranch: input.singleBranch, - ref: input.branch, - depth: input.depth || 10, - ...await this.parseInput(input), - ...await this.getGitConfig() - } - this.call('terminal', 'logHtml', `Cloning ${input.url}...`) - const result = await git.clone(cmd) - if (!workspaceExists) { - setTimeout(async () => { - await this.call('fileManager', 'refresh') - }, 1000) + async clone(input, workspaceName, workspaceExists = false) { + + if ((Registry.getInstance().get('platform').api.isDesktop())) { + const folder = await this.call('fs', 'selectFolder', null, 'Select or create a folder to clone the repository in', 'Select as Repository Destination') + if (!folder) return false + const cmd = { + url: input.url, + singleBranch: input.singleBranch, + ref: input.branch, + depth: input.depth || 10, + dir: folder, + input + } + this.call('terminal', 'logHtml', `Cloning ${input.url}... please wait...`) + try{ + const result = await this.call('isogit', 'clone', cmd) + this.call('fs', 'openWindow', folder) + return result + }catch(e){ + this.call('notification', 'alert', { + id: 'dgitAlert', + message: 'Unexpected error while cloning the repository: \n' + e.toString(), + }) + } + } else { + const permission = await this.askUserPermission('clone', 'Import multiple files into your workspaces.') + if (!permission) return false + if (parseFloat(this.calculateLocalStorage()) > 10000) throw new Error('The local storage of the browser is full.') + if (!workspaceExists) await this.call('filePanel', 'createWorkspace', workspaceName || `workspace_${Date.now()}`, true) + const cmd = { + url: input.url, + singleBranch: input.singleBranch, + ref: input.branch, + depth: input.depth || 10, + ...await this.parseInput(input), + ...await this.getGitConfig() + } + this.call('terminal', 'logHtml', `Cloning ${input.url}...`) + const result = await git.clone(cmd) + if (!workspaceExists) { + setTimeout(async () => { + await this.call('fileManager', 'refresh') + }, 1000) + } + this.emit('clone') + return result } - this.emit('clone') - return result } async parseGitmodules (dir = '') { @@ -298,8 +466,8 @@ class DGitProvider extends Plugin { const gitmodules = await this.call('fileManager', 'readFile', path.join(dir, '.gitmodules')) if (gitmodules) { const lines = gitmodules.split('\n') - let currentModule = {} - let modules = [] + let currentModule:any = {} + const modules = [] for (let line of lines) { line = line.trim() if (line.startsWith('[')) { @@ -331,7 +499,7 @@ class DGitProvider extends Plugin { this.call('terminal', 'logHtml', `Found ${(gitmodules && gitmodules.length) || 0} submodules in ${currentDir || '/'}`) //parse gitmodules if (gitmodules) { - for (let module of gitmodules) { + for (const module of gitmodules) { const dir = path.join(currentDir, module.path) const targetPath = (await this.getGitConfig(dir)).dir if (await window.remixFileSystem.exists(targetPath)) { @@ -345,7 +513,7 @@ class DGitProvider extends Plugin { } } } - for (let module of gitmodules) { + for (const module of gitmodules) { const dir = path.join(currentDir, module.path) // if url contains git@github.com: convert it if(module.url && module.url.startsWith('git@github.com:')) { @@ -434,13 +602,25 @@ class DGitProvider extends Plugin { name: input.name, email: input.email }, - ...await this.parseInput(input), - ...await this.getGitConfig() + input, + } + if ((Registry.getInstance().get('platform').api.isDesktop())) { + return await this.call('isogit', 'push', cmd) + } else { + + const cmd2 = { + ...cmd, + ...await this.parseInput(input), + } + return await git.push({ + ...await this.getGitConfig(), + ...cmd2 + }) + } - return await git.push(cmd) } - async pull (input) { + async pull(input) { const cmd = { ref: input.ref, remoteRef: input.remoteRef, @@ -449,17 +629,29 @@ class DGitProvider extends Plugin { email: input.email }, remote: input.remote, - ...await this.parseInput(input), - ...await this.getGitConfig() + input, + } + let result + if ((Registry.getInstance().get('platform').api.isDesktop())) { + result = await this.call('isogit', 'pull', cmd) + } + else { + const cmd2 = { + ...cmd, + ...await this.parseInput(input), + } + result = await git.pull({ + ...await this.getGitConfig(), + ...cmd2 + }) } - const result = await git.pull(cmd) setTimeout(async () => { await this.call('fileManager', 'refresh') }, 1000) return result } - async fetch (input) { + async fetch(input) { const cmd = { ref: input.ref, remoteRef: input.remoteRef, @@ -468,17 +660,28 @@ class DGitProvider extends Plugin { email: input.email }, remote: input.remote, - ...await this.parseInput(input), - ...await this.getGitConfig() + input + } + let result + if ((Registry.getInstance().get('platform').api.isDesktop())) { + result = await this.call('isogit', 'fetch', cmd) + } else { + const cmd2 = { + ...cmd, + ...await this.parseInput(input), + } + result = await git.fetch({ + ...await this.getGitConfig(), + ...cmd2 + }) } - const result = await git.fetch(cmd) setTimeout(async () => { await this.call('fileManager', 'refresh') }, 1000) return result } - async export (config) { + async export(config) { if (!this.checkIpfsConfig(config)) return false const workspace = await this.call('filePanel', 'getCurrentWorkspace') const files = await this.getDirectory('/') @@ -498,7 +701,7 @@ class DGitProvider extends Plugin { return r.cid.string } - async pin (pinataApiKey, pinataSecretApiKey) { + async pin(pinataApiKey, pinataSecretApiKey) { const workspace = await this.call('filePanel', 'getCurrentWorkspace') const files = await this.getDirectory('/') this.filesToSend = [] @@ -551,21 +754,21 @@ class DGitProvider extends Plugin { .post(url, data, { maxBodyLength: 'Infinity', headers: { - 'Content-Type': `multipart/form-data; boundary=${data._boundary}`, + 'Content-Type': `multipart/form-data; boundary=${(data as any)._boundary}`, pinata_api_key: pinataApiKey, pinata_secret_api_key: pinataSecretApiKey } - }).catch((e) => { + } as any).catch((e) => { console.log(e) }) // also commit to remix IPFS for availability after pinning to Pinata - return await this.export(this.remixIPFS) || result.data.IpfsHash + return await this.export(this.remixIPFS) || (result as any).data.IpfsHash } catch (error) { throw new Error(error) } } - async pinList (pinataApiKey, pinataSecretApiKey) { + async pinList(pinataApiKey, pinataSecretApiKey) { const url = 'https://api.pinata.cloud/data/pinList?status=pinned' try { const result = await axios @@ -575,16 +778,16 @@ class DGitProvider extends Plugin { pinata_api_key: pinataApiKey, pinata_secret_api_key: pinataSecretApiKey } - }).catch((e) => { + } as any).catch((e) => { console.log('Pinata unreachable') }) - return result.data + return (result as any).data } catch (error) { throw new Error(error) } } - async unPin (pinataApiKey, pinataSecretApiKey, hashToUnpin) { + async unPin(pinataApiKey, pinataSecretApiKey, hashToUnpin) { const url = `https://api.pinata.cloud/pinning/unpin/${hashToUnpin}` try { await axios @@ -600,7 +803,7 @@ class DGitProvider extends Plugin { } } - async importIPFSFiles (config, cid, workspace) { + async importIPFSFiles(config, cid, workspace) { const ipfs = IpfsHttpClient(config) let result = false try { @@ -629,9 +832,9 @@ class DGitProvider extends Plugin { return result } - calculateLocalStorage () { - var _lsTotal = 0 - var _xLen; var _x + calculateLocalStorage() { + let _lsTotal = 0 + let _xLen; let _x for (_x in localStorage) { // eslint-disable-next-line no-prototype-builtins if (!localStorage.hasOwnProperty(_x)) { @@ -643,10 +846,10 @@ class DGitProvider extends Plugin { return (_lsTotal / 1024).toFixed(2) } - async import (cmd) { + async import(cmd) { const permission = await this.askUserPermission('import', 'Import multiple files into your workspaces.') if (!permission) return false - if (this.calculateLocalStorage() > 10000) throw new Error('The local storage of the browser is full.') + if (parseFloat(this.calculateLocalStorage()) > 10000) throw new Error('The local storage of the browser is full.') const cid = cmd.cid await this.call('filePanel', 'createWorkspace', `workspace_${Date.now()}`, true) const workspace = await this.call('filePanel', 'getCurrentWorkspace') @@ -662,13 +865,13 @@ class DGitProvider extends Plugin { if (!result) throw new Error(`Cannot pull files from IPFS at ${cid}`) } - async getItem (name) { + async getItem(name) { if (typeof window !== 'undefined') { return window.localStorage.getItem(name) } } - async setItem (name, content) { + async setItem(name, content) { try { if (typeof window !== 'undefined') { window.localStorage.setItem(name, content) @@ -680,7 +883,7 @@ class DGitProvider extends Plugin { return true } - async zip () { + async zip() { const zip = new JSZip() const workspace = await this.call('filePanel', 'getCurrentWorkspace') const files = await this.getDirectory('/') @@ -697,7 +900,7 @@ class DGitProvider extends Plugin { }) } - async createDirectories (strdirectories) { + async createDirectories(strdirectories) { const ignore = ['.', '/.', ''] if (ignore.indexOf(strdirectories) > -1) return false const directories = strdirectories.split('/') @@ -715,7 +918,7 @@ class DGitProvider extends Plugin { } } - async getDirectory (dir) { + async getDirectory(dir) { let result = [] const files = await this.call('fileManager', 'readdir', dir) const fileArray = normalize(files) @@ -739,7 +942,7 @@ class DGitProvider extends Plugin { } const addSlash = (file) => { - if (!file.startsWith('/'))file = '/' + file + if (!file.startsWith('/')) file = '/' + file return file } diff --git a/apps/remix-ide/src/app/files/electronProvider.ts b/apps/remix-ide/src/app/files/electronProvider.ts new file mode 100644 index 0000000000..99edb76962 --- /dev/null +++ b/apps/remix-ide/src/app/files/electronProvider.ts @@ -0,0 +1,92 @@ +import FileProvider from "./fileProvider" + + +declare global { + interface Window { + remixFileSystem: any + } +} + +export class ElectronProvider extends FileProvider { + _appManager: any + constructor(appManager) { + super('') + this._appManager = appManager + + } + + async init() { + this._appManager.on('fs', 'change', async (event, path) => { + this.handleEvent(event, path) + }) + this._appManager.on('fs', 'eventGroup', async (data) => { + for (const event of data) { + this.handleEvent(event.payload[0], event.payload[1]) + } + }) + } + + handleEvent = (event, path) => { + switch (event) { + case 'add': + this.event.emit('fileAdded', path) + break + case 'unlink': + this.event.emit('fileRemoved', path) + break + case 'change': + this.get(path, (_error, content) => { + this.event.emit('fileExternallyChanged', path, content, false) + }) + break + case 'rename': + this.event.emit('fileRenamed', path) + break + case 'addDir': + this.event.emit('folderAdded', path) + break + case 'unlinkDir': + this.event.emit('fileRemoved', path) + } + } + + + // isDirectory is already included + // this is a more efficient version of the default implementation + async resolveDirectory(path, cb) { + path = this.removePrefix(path) + if (path.indexOf('/') !== 0) path = '/' + path + try { + const files = await window.remixFileSystem.readdir(path) + const ret = {} + if (files) { + for (const element of files) { + path = path.replace(/^\/|\/$/g, '') // remove first and last slash + const file = element.file.replace(/^\/|\/$/g, '') // remove first and last slash + const absPath = (path === '/' ? '' : path) + '/' + file + ret[absPath.indexOf('/') === 0 ? absPath.substr(1, absPath.length) : absPath] = { isDirectory: element.isDirectory } + // ^ ret does not accept path starting with '/' + } + } + if (cb) cb(null, ret) + return ret + } catch (error) { + if (cb) cb(error, null) + } + } + + /** + * Removes the folder recursively + * @param {*} path is the folder to be removed + */ + async remove(path: string) { + try { + await window.remixFileSystem.rmdir(path) + return true + } catch (error) { + console.log(error) + return false + } + } + +} \ No newline at end of file diff --git a/apps/remix-ide/src/app/files/fileManager.ts b/apps/remix-ide/src/app/files/fileManager.ts index 9b80a5fcf7..23d47cd094 100644 --- a/apps/remix-ide/src/app/files/fileManager.ts +++ b/apps/remix-ide/src/app/files/fileManager.ts @@ -4,8 +4,7 @@ import { saveAs } from 'file-saver' import JSZip from 'jszip' import { Plugin } from '@remixproject/engine' import * as packageJson from '../../../../../package.json' -import Registry from '../state/registry' -import { EventEmitter } from 'events' +import {Registry} from '@remix-project/remix-lib' import { fileChangedToastMsg, recursivePasteToastMsg, storageFullMessage } from '@remix-ui/helper' import helper from '../../lib/helper.js' import { RemixAppManager } from '../../remixAppManager' @@ -42,7 +41,6 @@ const createError = (err) => { class FileManager extends Plugin { mode: string openedFiles: any - events: EventEmitter editor: any _components: any appManager: RemixAppManager @@ -56,7 +54,6 @@ class FileManager extends Plugin { super(profile) this.mode = 'browser' this.openedFiles = {} // list all opened files - this.events = new EventEmitter() this.editor = editor this._components = {} this._components.registry = Registry.getInstance() @@ -155,8 +152,12 @@ class FileManager extends Plugin { refresh() { const provider = this.fileProviderOf('/') // emit rootFolderChanged so that File Explorer reloads the file tree - provider.event.emit('rootFolderChanged', provider.workspace || '/') - this.emit('rootFolderChanged', provider.workspace || '/') + if (Registry.getInstance().get('platform').api.isDesktop()) { + provider.event.emit('refresh') + } else { + provider.event.emit('rootFolderChanged', provider.workspace || '/') + this.emit('rootFolderChanged', provider.workspace || '/') + } } /** @@ -466,14 +467,13 @@ class FileManager extends Plugin { return new Promise((resolve, reject) => { const provider = this.fileProviderOf(path) - provider.resolveDirectory(path, (error, filesProvider) => { if (error) reject(error) resolve(filesProvider) }) }) } catch (e) { - throw new Error(e) + return {} } } @@ -500,7 +500,8 @@ class FileManager extends Plugin { browserExplorer: this._components.registry.get('fileproviders/browser').api, localhostExplorer: this._components.registry.get('fileproviders/localhost').api, workspaceExplorer: this._components.registry.get('fileproviders/workspace').api, - filesProviders: this._components.registry.get('fileproviders').api + filesProviders: this._components.registry.get('fileproviders').api, + electronExplorer: this._components.registry.get('fileproviders/electron').api, } this._deps.config.set('currentFile', '') // make sure we remove the current file from the previous session @@ -518,6 +519,11 @@ class FileManager extends Plugin { this._deps.workspaceExplorer.event.on('fileRemoved', (path) => { this.fileRemovedEvent(path) }) this._deps.workspaceExplorer.event.on('fileAdded', (path) => { this.fileAddedEvent(path) }) + this._deps.electronExplorer.event.on('fileChanged', (path) => { this.fileChangedEvent(path) }) + this._deps.electronExplorer.event.on('fileRenamed', (oldName, newName, isFolder) => { this.fileRenamedEvent(oldName, newName, isFolder) }) + this._deps.electronExplorer.event.on('fileRemoved', (path) => { this.fileRemovedEvent(path) }) + this._deps.electronExplorer.event.on('fileAdded', (path) => { this.fileAddedEvent(path) }) + this.getCurrentFile = this.file this.getFile = this.readFile this.getFolder = this.readdir @@ -554,9 +560,7 @@ class FileManager extends Plugin { } } } - // TODO: Only keep `this.emit` (issue#2210) this.emit('fileRenamed', oldName, newName, isFolder) - this.events.emit('fileRenamed', oldName, newName, isFolder) } currentFileProvider() { @@ -572,9 +576,7 @@ class FileManager extends Plugin { } async closeAllFiles() { - // TODO: Only keep `this.emit` (issue#2210) this.emit('filesAllClosed') - this.events.emit('filesAllClosed') for (const file in this.openedFiles) { await this.closeFile(file) } @@ -584,13 +586,9 @@ class FileManager extends Plugin { delete this.openedFiles[name] if (!Object.keys(this.openedFiles).length) { this._deps.config.set('currentFile', '') - // TODO: Only keep `this.emit` (issue#2210) this.emit('noFileSelected') - this.events.emit('noFileSelected') } - // TODO: Only keep `this.emit` (issue#2210) this.emit('fileClosed', name) - this.events.emit('fileClosed', name) } currentPath() { @@ -610,7 +608,10 @@ class FileManager extends Plugin { if (!provider) throw createError({ code: 'ENOENT', message: `${path} not available` }) // TODO: change provider to Promise return new Promise((resolve, reject) => { - if (this.currentFile() === path) return resolve(this.editor.currentContent()) + if (this.currentFile() === path) { + const editorContent = this.editor.currentContent() + if (editorContent) resolve(editorContent) + } provider.get(path, (err, content) => { if (err) reject(err) resolve(content) @@ -689,24 +690,21 @@ class FileManager extends Plugin { } this.editor.discard(path) delete this.openedFiles[path] - // TODO: Only keep `this.emit` (issue#2210) this.emit('fileRemoved', path) - this.events.emit('fileRemoved', path) - this.openFile(this._deps.config.get('currentFile')) + if (path === this._deps.config.get('currentFile')) { + this.openFile(this._deps.config.get('currentFile')) + } } async unselectCurrentFile() { await this.saveCurrentFile() this._deps.config.set('currentFile', '') - // TODO: Only keep `this.emit` (issue#2210) this.emit('noFileSelected') - this.events.emit('noFileSelected') } async openFile(file?: string) { if (!file) { this.emit('noFileSelected') - this.events.emit('noFileSelected') } else { file = this.normalize(file) const resolved = this.getPathFromUrl(file) @@ -738,9 +736,7 @@ class FileManager extends Plugin { } else { await this.editor.open(file, content) } - // TODO: Only keep `this.emit` (issue#2210) this.emit('currentFileChanged', file) - this.events.emit('currentFileChanged', file) return true } } @@ -779,8 +775,9 @@ class FileManager extends Plugin { if (file.startsWith('localhost') || this.mode === 'localhost') { return this._deps.filesProviders.localhost } - if (file.startsWith('browser')) { - return this._deps.filesProviders.browser + + if (Registry.getInstance().get('platform').api.isDesktop()) { + return this._deps.filesProviders.electron } return this._deps.filesProviders.workspace } @@ -904,6 +901,10 @@ class FileManager extends Plugin { } currentWorkspace() { + if (Registry.getInstance().get('platform').api.isDesktop()) { + return '' + } + if (this.mode !== 'localhost') { const file = this.currentFile() || '' const provider = this.fileProviderOf(file) @@ -980,7 +981,7 @@ class FileManager extends Plugin { /** * Moves a file to a new folder * @param {string} src path of the source file - * @param {string} dest path of the destrination file + * @param {string} dest path of the destination file * @returns {void} */ diff --git a/apps/remix-ide/src/app/files/fileProvider.js b/apps/remix-ide/src/app/files/fileProvider.ts similarity index 91% rename from apps/remix-ide/src/app/files/fileProvider.js rename to apps/remix-ide/src/app/files/fileProvider.ts index 91e159ef0e..715b5d3bff 100644 --- a/apps/remix-ide/src/app/files/fileProvider.js +++ b/apps/remix-ide/src/app/files/fileProvider.ts @@ -1,12 +1,17 @@ 'use strict' import { CompilerImports } from '@remix-project/core-plugin' -const EventManager = require('events') -const remixLib = require('@remix-project/remix-lib') -const pathModule = require('path') -const Storage = remixLib.Storage +import EventManager from 'events' +import { Storage } from '@remix-project/remix-lib' +import pathModule from 'path' -class FileProvider { + +export default class FileProvider { + event: any + type: any + providerExternalsStorage: any + externalFolders: string[] + reverseKey: string constructor (name) { this.event = new EventManager() this.type = name @@ -79,7 +84,7 @@ class FileProvider { async _exists (path) { path = this.getPathFromUrl(path) || path // ensure we actually use the normalized path from here - var unprefixedpath = this.removePrefix(path) + const unprefixedpath = this.removePrefix(path) return path === this.type ? true : await window.remixFileSystem.exists(unprefixedpath) } @@ -90,7 +95,7 @@ class FileProvider { async get (path, cb, options = { encoding: 'utf8' }) { cb = cb || function () { /* do nothing. */ } path = this.getPathFromUrl(path) || path // ensure we actually use the normalized path from here - var unprefixedpath = this.removePrefix(path) + const unprefixedpath = this.removePrefix(path) try { const content = await window.remixFileSystem.readFile(unprefixedpath, options) if (cb) cb(null, content) @@ -103,13 +108,13 @@ class FileProvider { async set (path, content, cb, options = { encoding: 'utf8' }) { cb = cb || function () { /* do nothing. */ } - var unprefixedpath = this.removePrefix(path) + const unprefixedpath = this.removePrefix(path) const exists = await window.remixFileSystem.exists(unprefixedpath) if (exists && await window.remixFileSystem.readFile(unprefixedpath, options) === content) { if (cb) cb() return null } - await this.createDir(path.substr(0, path.lastIndexOf('/'))) + await this.createDir(path.substr(0, path.lastIndexOf('/')), null) try { await window.remixFileSystem.writeFile(unprefixedpath, content, options) } catch (e) { @@ -152,7 +157,7 @@ class FileProvider { // this will not add a folder as readonly but keep the original url to be able to restore it later async addExternal (path, content, url) { if (url) this.addNormalizedName(path, url) - return await this.set(path, content) + return await this.set(path, content, null) } isReadOnly (path) { @@ -161,7 +166,8 @@ class FileProvider { async isDirectory (path) { const unprefixedpath = this.removePrefix(path) - return path === this.type ? true : (await window.remixFileSystem.stat(unprefixedpath)).isDirectory() + const isDirectory = path === this.type ? true : (await window.remixFileSystem.stat(unprefixedpath)).isDirectory() + return isDirectory } async isFile (path) { @@ -174,7 +180,7 @@ class FileProvider { * Removes the folder recursively * @param {*} path is the folder to be removed */ - async remove (path) { + async remove (path: string) { path = this.removePrefix(path) if (await window.remixFileSystem.exists(path)) { const stat = await window.remixFileSystem.stat(path) @@ -210,7 +216,7 @@ class FileProvider { visitFolder({ path }) if (items.length !== 0) { for (const item of items) { - const file = {} + const file: any = {} const curPath = `${path}${path.endsWith('/') ? '' : '/'}${item}` if ((await window.remixFileSystem.stat(curPath)).isDirectory()) { file.children = await this._copyFolderToJsonInternal(curPath, visitFile, visitFolder) @@ -251,8 +257,8 @@ class FileProvider { } async rename (oldPath, newPath, isFolder) { - var unprefixedoldPath = this.removePrefix(oldPath) - var unprefixednewPath = this.removePrefix(newPath) + const unprefixedoldPath = this.removePrefix(oldPath) + const unprefixednewPath = this.removePrefix(newPath) if (await this._exists(unprefixedoldPath)) { await window.remixFileSystem.rename(unprefixedoldPath, unprefixednewPath) this.event.emit('fileRenamed', @@ -266,6 +272,7 @@ class FileProvider { } async resolveDirectory (path, cb) { + const startTime = Date.now() path = this.removePrefix(path) if (path.indexOf('/') !== 0) path = '/' + path try { @@ -306,4 +313,3 @@ class FileProvider { } } -module.exports = FileProvider diff --git a/apps/remix-ide/src/app/files/remixDProvider.js b/apps/remix-ide/src/app/files/remixDProvider.js index c52055e04f..62171fdc5b 100644 --- a/apps/remix-ide/src/app/files/remixDProvider.js +++ b/apps/remix-ide/src/app/files/remixDProvider.js @@ -1,5 +1,5 @@ 'use strict' -const FileProvider = require('./fileProvider') +import FileProvider from "./fileProvider" module.exports = class RemixDProvider extends FileProvider { constructor (appManager) { diff --git a/apps/remix-ide/src/app/files/workspaceFileProvider.js b/apps/remix-ide/src/app/files/workspaceFileProvider.js index f173fdf7f0..8e053f4047 100644 --- a/apps/remix-ide/src/app/files/workspaceFileProvider.js +++ b/apps/remix-ide/src/app/files/workspaceFileProvider.js @@ -1,7 +1,7 @@ 'use strict' const EventManager = require('events') -const FileProvider = require('./fileProvider') +import FileProvider from "./fileProvider" class WorkspaceFileProvider extends FileProvider { constructor () { diff --git a/apps/remix-ide/src/app/panels/file-panel.js b/apps/remix-ide/src/app/panels/file-panel.js index b47235d545..2e4feaf0e2 100644 --- a/apps/remix-ide/src/app/panels/file-panel.js +++ b/apps/remix-ide/src/app/panels/file-panel.js @@ -3,8 +3,9 @@ import { ViewPlugin } from '@remixproject/engine-web' import * as packageJson from '../../../../../package.json' import React from 'react' // eslint-disable-line import { FileSystemProvider } from '@remix-ui/workspace' // eslint-disable-line -import Registry from '../state/registry' +import {Registry} from '@remix-project/remix-lib' import { RemixdHandle } from '../plugins/remixd-handle' +import {PluginViewWrapper} from '@remix-ui/helper' const { HardhatHandle } = require('../files/hardhat-handle.js') const { FoundryHandle } = require('../files/foundry-handle.js') const { TruffleHandle } = require('../files/truffle-handle.js') @@ -42,6 +43,9 @@ const profile = { 'registerContextMenuItem', 'renameWorkspace', 'deleteWorkspace', + 'loadTemplate', + 'clone', + 'isExpanded', ], events: ['setWorkspace', 'workspaceRenamed', 'workspaceDeleted', 'workspaceCreated'], icon: 'assets/img/fileManager.webp', @@ -70,15 +74,33 @@ module.exports = class Filepanel extends ViewPlugin { this.workspaces = [] this.appManager = appManager this.currentWorkspaceMetadata = null + + this.expandPath = [] + } + + setDispatch(dispatch) { + this.dispatch = dispatch + this.renderComponent() } render() { return (
- +
) } + updateComponent(state) { + return ( + + ) + } + + renderComponent() { + this.dispatch({ + plugin: this, + }) + } /** * @param item { id: string, name: string, type?: string[], path?: string[], extension?: string[], pattern?: string[] } @@ -95,10 +117,8 @@ module.exports = class Filepanel extends ViewPlugin { */ registerContextMenuItem(item) { return new Promise((resolve, reject) => { - this.emit('registerContextMenuItemReducerEvent', item, (err, data) => { - if (err) reject(err) - else resolve(data) - }) + this.emit('registerContextMenuItemReducerEvent', item) + resolve(item) }) } @@ -228,5 +248,13 @@ module.exports = class Filepanel extends ViewPlugin { workspaceCreated(workspace) { this.emit('workspaceCreated', workspace) } + + isExpanded(path) { + if(path === '/') return true + // remove leading slash + path = path.replace(/^\/+/, '') + return this.expandPath.includes(path) + } + /** end section */ } diff --git a/apps/remix-ide/src/app/panels/layout.ts b/apps/remix-ide/src/app/panels/layout.ts index a152efc72e..1db8f29dfb 100644 --- a/apps/remix-ide/src/app/panels/layout.ts +++ b/apps/remix-ide/src/app/panels/layout.ts @@ -100,7 +100,8 @@ export class Layout extends Plugin { minimize (name: string, minimized:boolean): void { this.panels[name].minimized = minimized - this.event.emit('change', null) + this.event.emit('change', this.panels) + this.emit('change', this.panels) } async maximiseSidePanel () { diff --git a/apps/remix-ide/src/app/panels/terminal.js b/apps/remix-ide/src/app/panels/terminal.js index 83620b9264..5ad90adf00 100644 --- a/apps/remix-ide/src/app/panels/terminal.js +++ b/apps/remix-ide/src/app/panels/terminal.js @@ -3,17 +3,18 @@ import React from 'react' // eslint-disable-line import { RemixUiTerminal } from '@remix-ui/terminal' // eslint-disable-line import { Plugin } from '@remixproject/engine' import * as packageJson from '../../../../../package.json' -import Registry from '../state/registry' +import {Registry} from '@remix-project/remix-lib' import { PluginViewWrapper } from '@remix-ui/helper' import vm from 'vm' const EventManager = require('../../lib/events') import { CompilerImports } from '@remix-project/core-plugin' // eslint-disable-line +import { RemixUiXterminals } from '@remix-ui/xterm' const KONSOLES = [] -function register (api) { KONSOLES.push(api) } +function register(api) { KONSOLES.push(api) } const profile = { displayName: 'Terminal', @@ -25,7 +26,7 @@ const profile = { } class Terminal extends Plugin { - constructor (opts, api) { + constructor(opts, api) { super(profile) this.fileImport = new CompilerImports() this.event = new EventManager() @@ -81,26 +82,26 @@ class Terminal extends Plugin { this.call('debugger', 'debug', hash) }) this.dispatch = null - + } - + onActivation() { this.renderComponent() } - onDeactivation () { + onDeactivation() { this.off('scriptRunner', 'log') this.off('scriptRunner', 'info') this.off('scriptRunner', 'warn') this.off('scriptRunner', 'error') } - logHtml (html) { + logHtml(html) { this.terminalApi.logHtml(html) } - log (message, type) { + log(message, type) { this.terminalApi.log(message, type) } @@ -108,18 +109,21 @@ class Terminal extends Plugin { this.dispatch = dispatch } - render () { - return
+ render() { + return
} updateComponent(state) { - return + return (Registry.getInstance().get('platform').api.isDesktop()) ? + + : } - renderComponent () { + renderComponent() { const onReady = (api) => { this.terminalApi = api } this.dispatch({ plugin: this, @@ -127,7 +131,7 @@ class Terminal extends Plugin { }) } - scroll2bottom () { + scroll2bottom() { setTimeout(function () { // do nothing. }, 0) diff --git a/apps/remix-ide/src/app/plugins/compile-details.tsx b/apps/remix-ide/src/app/plugins/compile-details.tsx index 1a19c22cbc..95e39803c3 100644 --- a/apps/remix-ide/src/app/plugins/compile-details.tsx +++ b/apps/remix-ide/src/app/plugins/compile-details.tsx @@ -35,8 +35,6 @@ export class CompilationDetailsPlugin extends ViewPlugin { } async onActivation() { - await this.call('tabs', 'focus', 'compilationDetails') - this.renderComponent() _paq.push(['trackEvent', 'plugin', 'activated', 'compilationDetails']) } @@ -46,13 +44,17 @@ export class CompilationDetailsPlugin extends ViewPlugin { async showDetails(sentPayload: any) { await this.call('tabs', 'focus', 'compilationDetails') - this.payload = sentPayload - this.renderComponent() + setTimeout(() => { + // TODO: use the react API to render when the tab is focused and tbe plugin in the view. + this.payload = sentPayload + this.renderComponent() + }, 2000) } setDispatch(dispatch: React.Dispatch): void { this.dispatch = dispatch } + render() { return (
diff --git a/apps/remix-ide/src/app/plugins/config.ts b/apps/remix-ide/src/app/plugins/config.ts index b4ff5fe30b..c979fab743 100644 --- a/apps/remix-ide/src/app/plugins/config.ts +++ b/apps/remix-ide/src/app/plugins/config.ts @@ -1,6 +1,6 @@ import { Plugin } from '@remixproject/engine' import { QueryParams } from '@remix-project/remix-lib' -import Registry from '../state/registry' +import {Registry} from '@remix-project/remix-lib' const profile = { name: 'config', diff --git a/apps/remix-ide/src/app/plugins/electron/compilerLoaderPlugin.ts b/apps/remix-ide/src/app/plugins/electron/compilerLoaderPlugin.ts new file mode 100644 index 0000000000..04b6c8ba1c --- /dev/null +++ b/apps/remix-ide/src/app/plugins/electron/compilerLoaderPlugin.ts @@ -0,0 +1,64 @@ +import { ElectronPlugin } from '@remixproject/engine-electron'; +import { Plugin } from '@remixproject/engine'; +import { baseURLBin, baseURLWasm } from '@remix-project/remix-solidity' +import axios, {AxiosResponse} from 'axios' +import { iSolJsonBinData } from '@remix-project/remix-lib' + +const profile = { + displayName: 'compilerLoader', + name: 'compilerloader', + description: 'Loads the compiler for offline use', +} + +const methods = ['getJsonBinData'] + +export class compilerLoaderPlugin extends Plugin { + constructor() { + super(profile) + this.methods = methods + } + + async getJsonBinData() { + const response: iSolJsonBinData = { + baseURLBin: '', + baseURLWasm: '', + binList: [], + wasmList: [], + selectorList: [] + } + let binRes: AxiosResponse + let wasmRes: AxiosResponse + try { + // fetch normal builds + binRes = await axios(`${baseURLBin}/list.json`) + // fetch wasm builds + wasmRes = await axios(`${baseURLWasm}/list.json`) + } catch (e) { + } + if (wasmRes.status === 200) { + response.wasmList = wasmRes.data.builds + } + if (binRes.status === 200) { + response.binList = binRes.data.builds + } + response.baseURLBin = baseURLBin + response.baseURLWasm = baseURLWasm + + this.emit('jsonBinDataLoaded', response) + } +} + +export class compilerLoaderPluginDesktop extends ElectronPlugin { + constructor() { + super(profile) + this.methods = [] + } + + async onActivation(): Promise { + + this.on('solidity', 'loadingCompiler', async (url) => { + await this.call('compilerloader', 'downloadCompiler', url) + }) + + } +} \ No newline at end of file diff --git a/apps/remix-ide/src/app/plugins/electron/electronConfigPlugin.ts b/apps/remix-ide/src/app/plugins/electron/electronConfigPlugin.ts new file mode 100644 index 0000000000..324d2774be --- /dev/null +++ b/apps/remix-ide/src/app/plugins/electron/electronConfigPlugin.ts @@ -0,0 +1,12 @@ +import { ElectronPlugin } from '@remixproject/engine-electron'; + +export class electronConfig extends ElectronPlugin { + constructor() { + super({ + displayName: 'electronconfig', + name: 'electronconfig', + description: 'electronconfig', + }) + this.methods = [] + } +} \ No newline at end of file diff --git a/apps/remix-ide/src/app/plugins/electron/fsPlugin.ts b/apps/remix-ide/src/app/plugins/electron/fsPlugin.ts new file mode 100644 index 0000000000..679b6199ea --- /dev/null +++ b/apps/remix-ide/src/app/plugins/electron/fsPlugin.ts @@ -0,0 +1,127 @@ +import { ElectronPlugin } from '@remixproject/engine-electron'; + +let workingDir = null + +const fixPath = (path: string) => { + return path +} + +export class fsPlugin extends ElectronPlugin { + public fs: any + public fsSync: any + + constructor() { + super({ + displayName: 'fs', + name: 'fs', + description: 'fs', + }) + this.methods = ['readdir', 'readFile', 'writeFile', 'mkdir', 'rmdir', 'unlink', 'rename', 'stat', 'lstat', 'exists', 'setWorkingDir', 'getRecentFolders', 'openWindow'] + + // List of commands all filesystems are expected to provide. `rm` is not + // included since it may not exist and must be handled as a special case + const commands = [ + 'readFile', + 'writeFile', + 'mkdir', + 'rmdir', + 'unlink', + 'stat', + 'lstat', + 'readdir', + 'readlink', + 'symlink', + ] + + this.fs = { + exists: async (path: string) => { + path = fixPath(path) + const exists = await this.call('fs', 'exists', path) + return exists + }, + rmdir: async (path: string) => { + path = fixPath(path) + return await this.call('fs', 'rmdir', path) + }, + readdir: async (path: string) => { + path = fixPath(path) + const files = await this.call('fs', 'readdir', path) + return files + }, + unlink: async (path: string) => { + path = fixPath(path) + return await this.call('fs', 'unlink', path) + }, + mkdir: async (path: string) => { + path = fixPath(path) + return await this.call('fs', 'mkdir', path) + }, + readFile: async (path: string, options) => { + try { + path = fixPath(path) + const file = await this.call('fs', 'readFile', path, options) + return file + } catch (e) { + return undefined + } + } + , + rename: async (from: string, to: string) => { + return await this.call('fs', 'rename', from, to) + }, + writeFile: async (path: string, content: string, options: any) => { + path = fixPath(path) + return await this.call('fs', 'writeFile', path, content, options) + } + , + stat: async (path: string) => { + try { + path = fixPath(path) + const stat = await this.call('fs', 'stat', path) + if(!stat) return undefined + stat.isDirectory = () => stat.isDirectoryValue + stat.isFile = () => !stat.isDirectoryValue + return stat + } catch (e) { + return undefined + } + }, + lstat: async (path: string) => { + try { + path = fixPath(path) + const stat = await this.call('fs', 'lstat', path) + if(!stat) return undefined + stat.isDirectory = () => stat.isDirectoryValue + stat.isFile = () => !stat.isDirectoryValue + return stat + } catch (e) { + return undefined + } + }, + readlink: async (path: string) => { + path = fixPath(path) + return await this.call('fs', 'readlink', path) + }, + symlink: async (target: string, path: string) => { + path = fixPath(path) + return await this.call('fs', 'symlink', target, path) + } + } + } + + async onActivation() { + (window as any).remixFileSystem = this.fs + this.on('fs', 'workingDirChanged', async (path: string) => { + workingDir = path + await this.call('fileManager', 'refresh') + }) + this.on('fs', 'error', async (error: string) => { + if(error === 'ENOSPC'){ + this.call('notification', 'alert', { + id: 'fsError', + message: 'Cannot watch file changes. There are too many files in your project.' + }) + } + }) + } +} diff --git a/apps/remix-ide/src/app/plugins/electron/isoGitPlugin.ts b/apps/remix-ide/src/app/plugins/electron/isoGitPlugin.ts new file mode 100644 index 0000000000..9363a533ba --- /dev/null +++ b/apps/remix-ide/src/app/plugins/electron/isoGitPlugin.ts @@ -0,0 +1,12 @@ +import { ElectronPlugin } from '@remixproject/engine-electron'; + +export class isoGitPlugin extends ElectronPlugin { + constructor() { + super({ + displayName: 'isogit', + name: 'isogit', + description: 'isogit', + }) + this.methods = [] + } +} \ No newline at end of file diff --git a/apps/remix-ide/src/app/plugins/electron/ripgrepPlugin.ts b/apps/remix-ide/src/app/plugins/electron/ripgrepPlugin.ts new file mode 100644 index 0000000000..18ee16cc63 --- /dev/null +++ b/apps/remix-ide/src/app/plugins/electron/ripgrepPlugin.ts @@ -0,0 +1,12 @@ +import { ElectronPlugin } from '@remixproject/engine-electron'; + +export class ripgrepPlugin extends ElectronPlugin { + constructor(){ + super({ + displayName: 'ripgrep', + name: 'ripgrep', + description: 'ripgrep' + }) + this.methods = ['glob'] + } +} \ No newline at end of file diff --git a/apps/remix-ide/src/app/plugins/electron/templatesPlugin.ts b/apps/remix-ide/src/app/plugins/electron/templatesPlugin.ts new file mode 100644 index 0000000000..4e0c2df15c --- /dev/null +++ b/apps/remix-ide/src/app/plugins/electron/templatesPlugin.ts @@ -0,0 +1,11 @@ +import { ElectronPlugin } from '@remixproject/engine-electron'; + +export class electronTemplates extends ElectronPlugin { + constructor() { + super({ + displayName: 'electronTemplates', + name: 'electronTemplates', + description: 'templates', + }) + } +} diff --git a/apps/remix-ide/src/app/plugins/electron/xtermPlugin.ts b/apps/remix-ide/src/app/plugins/electron/xtermPlugin.ts new file mode 100644 index 0000000000..c21a796af6 --- /dev/null +++ b/apps/remix-ide/src/app/plugins/electron/xtermPlugin.ts @@ -0,0 +1,11 @@ +import { ElectronPlugin } from '@remixproject/engine-electron'; + +export class xtermPlugin extends ElectronPlugin { + constructor(){ + super({ + displayName: 'xterm', + name: 'xterm', + description: 'xterm', + }) + } +} \ No newline at end of file diff --git a/apps/remix-ide/src/app/plugins/parser/code-parser.tsx b/apps/remix-ide/src/app/plugins/parser/code-parser.tsx index c95cb9efca..65efcf35b5 100644 --- a/apps/remix-ide/src/app/plugins/parser/code-parser.tsx +++ b/apps/remix-ide/src/app/plugins/parser/code-parser.tsx @@ -1,14 +1,14 @@ 'use strict' -import {Plugin} from '@remixproject/engine' -import {sourceMappingDecoder} from '@remix-project/remix-debug' -import {CompilerAbstract} from '@remix-project/remix-solidity' -import {CompilationResult} from '@remix-project/remix-solidity' +import { Plugin } from '@remixproject/engine' +import { sourceMappingDecoder } from '@remix-project/remix-debug' +import { CompilerAbstract } from '@remix-project/remix-solidity' +import { CompilationResult } from '@remix-project/remix-solidity' import CodeParserGasService from './services/code-parser-gas-service' import CodeParserCompiler from './services/code-parser-compiler' import CodeParserAntlrService from './services/code-parser-antlr-service' -import CodeParserImports, {CodeParserImportsData} from './services/code-parser-imports' +import CodeParserImports, { CodeParserImportsData } from './services/code-parser-imports' import React from 'react' -import {Profile} from '@remixproject/plugin-utils' +import { Profile } from '@remixproject/plugin-utils' import { ContractDefinitionAstNode, EventDefinitionAstNode, @@ -21,9 +21,9 @@ import { StructDefinitionAstNode, VariableDeclarationAstNode } from '@remix-project/remix-analyzer' -import {lastCompilationResult, RemixApi} from '@remixproject/plugin-api' -import {antlr} from './types' -import {ParseResult} from './types/antlr-types' +import { lastCompilationResult, RemixApi } from '@remixproject/plugin-api' +import { antlr } from './types' +import { ParseResult } from './types/antlr-types' const profile: Profile = { name: 'codeParser', @@ -169,14 +169,14 @@ export class CodeParser extends Plugin { this.on('filePanel', 'setWorkspace', async () => { await this.call('fileDecorator', 'clearFileDecorators') - await this.importService.setFileTree() + await this.importService.updateDirectoryCacheTimeStamp() }) this.on('fileManager', 'fileAdded', async () => { - await this.importService.setFileTree() + await this.importService.updateDirectoryCacheTimeStamp() }) this.on('fileManager', 'fileRemoved', async () => { - await this.importService.setFileTree() + await this.importService.updateDirectoryCacheTimeStamp() }) this.on('fileManager', 'currentFileChanged', async () => { @@ -193,11 +193,19 @@ export class CodeParser extends Plugin { }) this.on('config', 'configChanged', async (config) => { - await this.reload() + if (config.key === 'settings/auto-completion' || + config.key === 'settings/display-errors' || + config.key === 'settings/show-gas') { + await this.reload() + } }) this.on('settings', 'configChanged', async (config) => { - await this.reload() + if (config.key === 'settings/auto-completion' || + config.key === 'settings/display-errors' || + config.key === 'settings/show-gas') { + await this.reload() + } }) await this.compilerService.init() @@ -368,7 +376,7 @@ export class CodeParser extends Plugin { } else if (visibility === 'private' || visibility === 'internal') { executionCost = estimationObj === null ? '-' : estimationObj.internal[fn] } - return {executionCost} + return { executionCost } } else { return { creationCost: estimationObj === null ? '-' : estimationObj.creation.totalCost, @@ -524,9 +532,9 @@ export class CodeParser extends Plugin { if (nodeDefinition.ast && nodeDefinition.parser) { if (nodeDefinition.ast.name === nodeDefinition.parser.name && nodeDefinition.ast.nodeType === nodeDefinition.parser.type) { return nodeDefinition.ast - }else{ + } else { // if there is a difference and the compiler has compiled correctly assume the ast node is the definition - if(this.compilerService.errorState === false){ + if (this.compilerService.errorState === false) { return nodeDefinition.ast } } @@ -702,7 +710,7 @@ export class CodeParser extends Plugin { async getNodeDocumentation(node: genericASTNode) { if ('documentation' in node && node.documentation && (node.documentation as any).text) { let text = '' - ;(node.documentation as any).text.split('\n').forEach((line) => { + ; (node.documentation as any).text.split('\n').forEach((line) => { text += `${line.trim()}\n` }) return text diff --git a/apps/remix-ide/src/app/plugins/parser/services/code-parser-antlr-service.ts b/apps/remix-ide/src/app/plugins/parser/services/code-parser-antlr-service.ts index 3585dda157..2da19bdaa6 100644 --- a/apps/remix-ide/src/app/plugins/parser/services/code-parser-antlr-service.ts +++ b/apps/remix-ide/src/app/plugins/parser/services/code-parser-antlr-service.ts @@ -4,6 +4,7 @@ import { AstNode } from "@remix-project/remix-solidity" import { CodeParser } from "../code-parser" import { antlr } from '../types' import { pathToFileURL } from 'url' +import {Registry} from '@remix-project/remix-lib' const SolidityParser = (window as any).SolidityParser = (window as any).SolidityParser || [] @@ -45,8 +46,8 @@ export default class CodeParserAntlrService { this.worker = new Worker(new URL('./antlr-worker', import.meta.url)) this.worker.postMessage({ cmd: 'load', - url: document.location.protocol + '//' + document.location.host + '/assets/js/parser/antlr.js', - }); + url: Registry.getInstance().get('platform').api.isDesktop() ? 'assets/js/parser/antlr.js' : document.location.protocol + '//' + document.location.host + '/assets/js/parser/antlr.js', + }) const self = this this.worker.addEventListener('message', function (ev) { @@ -79,7 +80,7 @@ export default class CodeParserAntlrService { this.cache[file].parsingEnabled = false } else { this.cache[file].parsingEnabled = true - } + } } } } @@ -96,7 +97,6 @@ export default class CodeParserAntlrService { clearInterval(this.workerTimer) } - async parseWithWorker(text: string, file: string) { this.parserStartTime = Date.now() this.worker.postMessage({ @@ -284,5 +284,4 @@ export default class CodeParserAntlrService { const block = walkAst(blocks) return block } - } diff --git a/apps/remix-ide/src/app/plugins/parser/services/code-parser-compiler.ts b/apps/remix-ide/src/app/plugins/parser/services/code-parser-compiler.ts index 1fad0fd67e..2bfd3dc4ba 100644 --- a/apps/remix-ide/src/app/plugins/parser/services/code-parser-compiler.ts +++ b/apps/remix-ide/src/app/plugins/parser/services/code-parser-compiler.ts @@ -48,7 +48,7 @@ export default class CodeParserCompiler { init() { this.onAstFinished = async (success, data: CompilationResult, source: CompilationSourceCode, input: any, version) => { - this.plugin.call('editor', 'clearAnnotations') + await this.plugin.call('editor', 'clearAnnotations') this.errorState = true const result = new CompilerAbstract('soljson', data, source, input) let allErrors: errorMarker[] = [] @@ -93,7 +93,7 @@ export default class CodeParserCompiler { const displayErrors = await this.plugin.call('config', 'getAppParameter', 'display-errors') if (displayErrors) await this.plugin.call('editor', 'addErrorMarker', allErrors) - this.addDecorators(allErrors, sources) + await this.addDecorators(allErrors, sources) } else { await this.plugin.call('editor', 'clearErrorMarkers', result.getSourceCode().sources) await this.clearDecorators(result.getSourceCode().sources) @@ -168,8 +168,6 @@ export default class CodeParserCompiler { } this.compiler.set('configFileContent', JSON.stringify(configFileContent)) - this.plugin.currentFile = await this.plugin.call('fileManager', 'file') - if (!this.plugin.currentFile) return const content = await this.plugin.call('fileManager', 'readFile', this.plugin.currentFile) const sources = { [this.plugin.currentFile]: { content } } this.compiler.compile(sources, this.plugin.currentFile) @@ -227,20 +225,10 @@ export default class CodeParserCompiler { } for (const fileName of filesWithOutErrors) { const fileTarget = await this.plugin.call('fileManager', 'getPathFromUrl', fileName) - const decorator: fileDecoration = { - path: fileTarget.file, - isDirectory: false, - fileStateType: fileDecorationType.None, - fileStateLabelClass: '', - fileStateIconClass: '', - fileStateIcon: '', - text: '', - owner: 'code-parser', - bubble: false - } - decorators.push(decorator) + await this.plugin.call('fileDecorator', 'clearFileDecorators', fileTarget.file) } - await this.plugin.call('fileDecorator', 'setFileDecorators', decorators) + if(decorators.length > 0) + await this.plugin.call('fileDecorator', 'setFileDecorators', decorators) await this.plugin.call('editor', 'clearErrorMarkers', filesWithOutErrors) } @@ -267,22 +255,8 @@ export default class CodeParserCompiler { const decorators: fileDecoration[] = [] if (!sources) return for (const fileName of Object.keys(sources)) { - const decorator: fileDecoration = { - path: fileName, - isDirectory: false, - fileStateType: fileDecorationType.None, - fileStateLabelClass: '', - fileStateIconClass: '', - fileStateIcon: '', - text: '', - owner: 'code-parser', - bubble: false - } - decorators.push(decorator) + await this.plugin.call('fileDecorator', 'clearFileDecorators', fileName) } - - - await this.plugin.call('fileDecorator', 'setFileDecorators', decorators) } async getPositionForImportErrors(importedFileName: string, text: string) { diff --git a/apps/remix-ide/src/app/plugins/parser/services/code-parser-imports.ts b/apps/remix-ide/src/app/plugins/parser/services/code-parser-imports.ts index 73b162d95b..a95a663e71 100644 --- a/apps/remix-ide/src/app/plugins/parser/services/code-parser-imports.ts +++ b/apps/remix-ide/src/app/plugins/parser/services/code-parser-imports.ts @@ -1,22 +1,28 @@ 'use strict' +import {Registry} from '@remix-project/remix-lib' import { CodeParser } from "../code-parser"; -export type CodeParserImportsData= { +export type CodeParserImportsData = { files?: string[], modules?: string[], packages?: string[], + timestamp?: number } export default class CodeParserImports { plugin: CodeParser data: CodeParserImportsData = {} + directoryUpdateCacheTimeStamp = 0 constructor(plugin: CodeParser) { this.plugin = plugin this.init() } async getImports(){ + if(!this.data || !this.data.files || !this.data.timestamp || this.data.timestamp != this.directoryUpdateCacheTimeStamp){ + await this.setFileTree() + } return this.data } @@ -38,9 +44,31 @@ export default class CodeParserImports { this.data.packages = [...new Set(this.data.modules.map(x => x.split('/')[0]))] } + updateDirectoryCacheTimeStamp = async () => { + this.directoryUpdateCacheTimeStamp = Date.now() + } + setFileTree = async () => { - this.data.files = await this.getDirectory('/') - this.data.files = this.data.files.filter(x => x.endsWith('.sol') && !x.startsWith('.deps') && !x.startsWith('.git')) + if (Registry.getInstance().get('platform').api.isDesktop()) { + const search = { + path: '/', + include: ['**/*.sol', '**/*.vy', '**/*.py'], + exclude: [], + pattern: [], + matchCase: false, + useRegExp: false, + matchWholeWord: false, + maxResults: 10000 + } + + const files = await this.plugin.call('ripgrep', 'glob', search) + // only get path property of files + this.data.files = files.map((x) => x.path) + } else { + this.data.files = await this.getDirectory('/') + this.data.files = this.data.files.filter((x) => x.endsWith('.sol') && !x.startsWith('.deps') && !x.startsWith('.git')) + } + this.data.timestamp = this.directoryUpdateCacheTimeStamp || Date.now() } getDirectory = async (dir: string) => { diff --git a/apps/remix-ide/src/app/plugins/remix-templates.ts b/apps/remix-ide/src/app/plugins/remix-templates.ts new file mode 100644 index 0000000000..e7846fbf47 --- /dev/null +++ b/apps/remix-ide/src/app/plugins/remix-templates.ts @@ -0,0 +1,30 @@ +import { Plugin } from '@remixproject/engine' +import * as templateWithContent from '@remix-project/remix-ws-templates' + +const profile = { + name: 'remix-templates', + displayName: 'remix-templates', + description: 'Remix Templates plugin', + methods: ['getTemplate', 'loadTemplateInNewWindow'], +} + +export class TemplatesPlugin extends Plugin { + + constructor() { + super(profile) + } + + async getTemplate (template: string, opts?: any) { + const templateList = Object.keys(templateWithContent) + if (!templateList.includes(template)) return + // @ts-ignore + const files = await templateWithContent[template](opts) + return files + } + // electron only method + async loadTemplateInNewWindow (template: string, opts?: any) { + const files = await this.getTemplate(template, opts) + this.call('electronTemplates', 'loadTemplateInNewWindow', files) + } +} + diff --git a/apps/remix-ide/src/app/plugins/remixd-handle.tsx b/apps/remix-ide/src/app/plugins/remixd-handle.tsx index f74c22bf24..b31e8f6208 100644 --- a/apps/remix-ide/src/app/plugins/remixd-handle.tsx +++ b/apps/remix-ide/src/app/plugins/remixd-handle.tsx @@ -1,12 +1,12 @@ /* eslint-disable no-unused-vars */ import React, {useRef, useState, useEffect} from 'react' // eslint-disable-line -import isElectron from 'is-electron' import {WebsocketPlugin} from '@remixproject/engine-web' import * as packageJson from '../../../../../package.json' // eslint-disable-next-line @nrwl/nx/enforce-module-boundaries import {version as remixdVersion} from '../../../../../libs/remixd/package.json' import {PluginManager} from '@remixproject/engine' -import {AppModal, AlertModal} from '@remix-ui/app' +import {AppModal, AlertModal, appPlatformTypes} from '@remix-ui/app' +import {Registry} from '@remix-project/remix-lib' const LOCALHOST = ' - connect to localhost - ' @@ -50,6 +50,7 @@ export class RemixdHandle extends WebsocketPlugin { } async activate() { + console.trace('activate remixd') this.connectToLocalhost() return true } @@ -111,7 +112,7 @@ export class RemixdHandle extends WebsocketPlugin { } if (this.localhostProvider.isConnected()) { this.deactivate() - } else if (!isElectron()) { + } else if (!(Registry.getInstance().get('platform').api.isDesktop())) { // warn the user only if he/she is in the browser context const mod: AppModal = { id: 'remixdConnect', diff --git a/apps/remix-ide/src/app/plugins/solidity-script.tsx b/apps/remix-ide/src/app/plugins/solidity-script.tsx index 5ea9bdaf8c..5ca2f47b58 100644 --- a/apps/remix-ide/src/app/plugins/solidity-script.tsx +++ b/apps/remix-ide/src/app/plugins/solidity-script.tsx @@ -21,7 +21,7 @@ export class SolidityScript extends Plugin { _paq.push(['trackEvent', 'SolidityScript', 'execute', 'script']) this.call('terminal', 'log', `Running free function '${functionName}' from ${path}...`) let content = await this.call('fileManager', 'readFile', path) - const params = await this.call('solidity', 'getCompilerParameters') + const params = await this.call('solidity', 'getCompilerQueryParameters') content = ` // SPDX-License-Identifier: GPL-3.0 diff --git a/apps/remix-ide/src/app/providers/external-http-provider.tsx b/apps/remix-ide/src/app/providers/external-http-provider.tsx index f21d75d08f..a3b51f9a5d 100644 --- a/apps/remix-ide/src/app/providers/external-http-provider.tsx +++ b/apps/remix-ide/src/app/providers/external-http-provider.tsx @@ -27,7 +27,7 @@ export class ExternalHttpProvider extends AbstractProvider { values={{ a: (chunks) => ( - {chunks} + <>{chunks} ) }} @@ -39,7 +39,7 @@ export class ExternalHttpProvider extends AbstractProvider { values={{ a: (chunks) => ( - {chunks} + <>{chunks} ) }} @@ -49,7 +49,7 @@ export class ExternalHttpProvider extends AbstractProvider {


- {chunks}}} /> + <>{chunks}}} />

{ - this.createTestLibs() + setTimeout(() => this.createTestLibs(), 50) }) this.testRunner.event.on('compilationFinished', (success, data, source, input, version) => { diff --git a/apps/remix-ide/src/app/tabs/theme-module.js b/apps/remix-ide/src/app/tabs/theme-module.js index 6d3e248a93..96cfef7bcd 100644 --- a/apps/remix-ide/src/app/tabs/theme-module.js +++ b/apps/remix-ide/src/app/tabs/theme-module.js @@ -2,7 +2,8 @@ import { Plugin } from '@remixproject/engine' import { EventEmitter } from 'events' import { QueryParams } from '@remix-project/remix-lib' import * as packageJson from '../../../../../package.json' -import Registry from '../state/registry' +import {Registry} from '@remix-project/remix-lib' +const isElectron = require('is-electron') const _paq = window._paq = window._paq || [] //sol2uml dot files cannot work with css variables so hex values for colors are used @@ -43,7 +44,7 @@ const profile = { } export class ThemeModule extends Plugin { - constructor () { + constructor() { super(profile) this.events = new EventEmitter() this._deps = { @@ -53,7 +54,7 @@ export class ThemeModule extends Plugin { themes.map((theme) => { this.themes[theme.name.toLocaleLowerCase()] = { ...theme, - url: window.location.origin + ( window.location.pathname.startsWith('/address/') || window.location.pathname.endsWith('.sol') ? '/' : window.location.pathname ) + theme.url + url: isElectron() ? theme.url : window.location.origin + (window.location.pathname.startsWith('/address/') || window.location.pathname.endsWith('.sol') ? '/' : window.location.pathname) + theme.url } }) this._paq = _paq @@ -71,22 +72,26 @@ export class ThemeModule extends Plugin { /** Return the active theme * @return {{ name: string, quality: string, url: string }} - The active theme */ - currentTheme () { + currentTheme() { + if (isElectron()) { + const theme = 'https://remix.ethereum.org/' + this.themes[this.active].url.replace(/\\/g, '/').replace(/\/\//g, '/').replace(/\/$/g, '') + return { ...this.themes[this.active], url: theme } + } return this.themes[this.active] } /** Returns all themes as an array */ - getThemes () { + getThemes() { return Object.keys(this.themes).map(key => this.themes[key]) } /** * Init the theme */ - initTheme (callback) { // callback is setTimeOut in app.js which is always passed + initTheme(callback) { // callback is setTimeOut in app.js which is always passed if (callback) this.initCallback = callback if (this.active) { - document.getElementById('theme-link') ? document.getElementById('theme-link').remove():null + document.getElementById('theme-link') ? document.getElementById('theme-link').remove() : null const nextTheme = this.themes[this.active] // Theme document.documentElement.style.setProperty('--theme', nextTheme.quality) @@ -98,6 +103,7 @@ export class ThemeModule extends Plugin { if (callback) callback() }) document.head.insertBefore(theme, document.head.firstChild) + //if (callback) callback() } } @@ -115,7 +121,7 @@ export class ThemeModule extends Plugin { _paq.push(['trackEvent', 'themeModule', 'switchTo', next]) const nextTheme = this.themes[next] // Theme if (!this.forced) this._deps.config.set('settings/theme', next) - document.getElementById('theme-link') ? document.getElementById('theme-link').remove():null + document.getElementById('theme-link') ? document.getElementById('theme-link').remove() : null const theme = document.createElement('link') theme.setAttribute('rel', 'stylesheet') @@ -129,15 +135,21 @@ export class ThemeModule extends Plugin { document.documentElement.style.setProperty('--theme', nextTheme.quality) if (themeName) this.active = themeName // TODO: Only keep `this.emit` (issue#2210) - this.emit('themeChanged', nextTheme) - this.events.emit('themeChanged', nextTheme) + if (isElectron()) { + const theme = 'https://remix.ethereum.org/' + nextTheme.url.replace(/\\/g, '/').replace(/\/\//g, '/').replace(/\/$/g, '') + this.emit('themeChanged', { ...nextTheme, url: theme }) + this.events.emit('themeChanged', { ...nextTheme, url: theme }) + } else { + this.emit('themeChanged', nextTheme) + this.events.emit('themeChanged', nextTheme) + } } /** * fixes the invertion for images since this should be adjusted when we switch between dark/light qualified themes * @param {element} [image] - the dom element which invert should be fixed to increase visibility */ - fixInvert (image) { + fixInvert(image) { const invert = this.currentTheme().quality === 'dark' ? 1 : 0 if (image) { image.style.filter = `invert(${invert})` diff --git a/apps/remix-ide/src/app/udapp/make-udapp.js b/apps/remix-ide/src/app/udapp/make-udapp.js index f2980e0263..da76944ce9 100644 --- a/apps/remix-ide/src/app/udapp/make-udapp.js +++ b/apps/remix-ide/src/app/udapp/make-udapp.js @@ -1,4 +1,4 @@ -import Registry from '../state/registry' +import {Registry} from '@remix-project/remix-lib' var remixLib = require('@remix-project/remix-lib') var EventsDecoder = remixLib.execution.EventsDecoder diff --git a/apps/remix-ide/src/assets/css/themes/remix-dark_tvx1s2.css b/apps/remix-ide/src/assets/css/themes/remix-dark_tvx1s2.css index f512a127c8..de97d73757 100644 --- a/apps/remix-ide/src/assets/css/themes/remix-dark_tvx1s2.css +++ b/apps/remix-ide/src/assets/css/themes/remix-dark_tvx1s2.css @@ -1,4 +1,3 @@ -@import url('https://fonts.googleapis.com/css?family=Nunito+Sans:400,600&display=swap'); :root { --blue: #007aa6; --indigo: #6610f2; diff --git a/apps/remix-ide/src/assets/fontawesome/css/all.css b/apps/remix-ide/src/assets/fontawesome/css/all.css new file mode 100644 index 0000000000..09fd88bb0b --- /dev/null +++ b/apps/remix-ide/src/assets/fontawesome/css/all.css @@ -0,0 +1,19022 @@ +.fa { + font-family: var(--fa-style-family, "Font Awesome 6 Pro"); + font-weight: var(--fa-style, 900); } + +.fa, +.fa-classic, +.fa-sharp, +.fas, +.fa-solid, +.far, +.fa-regular, +.fasr, +.fal, +.fa-light, +.fasl, +.fat, +.fa-thin, +.fad, +.fa-duotone, +.fass, +.fa-sharp-solid, +.fab, +.fa-brands { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: var(--fa-display, inline-block); + font-style: normal; + font-variant: normal; + line-height: 1; + text-rendering: auto; } + +.fas, +.fa-classic, +.fa-solid, +.far, +.fa-regular, +.fal, +.fa-light, +.fat, +.fa-thin { + font-family: 'Font Awesome 6 Pro'; } + +.fab, +.fa-brands { + font-family: 'Font Awesome 6 Brands'; } + +.fad, +.fa-classic.fa-duotone, +.fa-duotone { + font-family: 'Font Awesome 6 Duotone'; } + +.fass, +.fasr, +.fasl, +.fa-sharp { + font-family: 'Font Awesome 6 Sharp'; } + +.fass, +.fa-sharp { + font-weight: 900; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.fa-10x { + font-size: 10em; } + +.fa-2xs { + font-size: 0.625em; + line-height: 0.1em; + vertical-align: 0.225em; } + +.fa-xs { + font-size: 0.75em; + line-height: 0.08333em; + vertical-align: 0.125em; } + +.fa-sm { + font-size: 0.875em; + line-height: 0.07143em; + vertical-align: 0.05357em; } + +.fa-lg { + font-size: 1.25em; + line-height: 0.05em; + vertical-align: -0.075em; } + +.fa-xl { + font-size: 1.5em; + line-height: 0.04167em; + vertical-align: -0.125em; } + +.fa-2xl { + font-size: 2em; + line-height: 0.03125em; + vertical-align: -0.1875em; } + +.fa-fw { + text-align: center; + width: 1.25em; } + +.fa-ul { + list-style-type: none; + margin-left: var(--fa-li-margin, 2.5em); + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: calc(var(--fa-li-width, 2em) * -1); + position: absolute; + text-align: center; + width: var(--fa-li-width, 2em); + line-height: inherit; } + +.fa-border { + border-color: var(--fa-border-color, #eee); + border-radius: var(--fa-border-radius, 0.1em); + border-style: var(--fa-border-style, solid); + border-width: var(--fa-border-width, 0.08em); + padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); } + +.fa-pull-left { + float: left; + margin-right: var(--fa-pull-margin, 0.3em); } + +.fa-pull-right { + float: right; + margin-left: var(--fa-pull-margin, 0.3em); } + +.fa-beat { + -webkit-animation-name: fa-beat; + animation-name: fa-beat; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-bounce { + -webkit-animation-name: fa-bounce; + animation-name: fa-bounce; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); } + +.fa-fade { + -webkit-animation-name: fa-fade; + animation-name: fa-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-beat-fade { + -webkit-animation-name: fa-beat-fade; + animation-name: fa-beat-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-flip { + -webkit-animation-name: fa-flip; + animation-name: fa-flip; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-shake { + -webkit-animation-name: fa-shake; + animation-name: fa-shake; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 2s); + animation-duration: var(--fa-animation-duration, 2s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin-reverse { + --fa-animation-direction: reverse; } + +.fa-pulse, +.fa-spin-pulse { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, steps(8)); + animation-timing-function: var(--fa-animation-timing, steps(8)); } + +@media (prefers-reduced-motion: reduce) { + .fa-beat, + .fa-bounce, + .fa-fade, + .fa-beat-fade, + .fa-flip, + .fa-pulse, + .fa-shake, + .fa-spin, + .fa-spin-pulse { + -webkit-animation-delay: -1ms; + animation-delay: -1ms; + -webkit-animation-duration: 1ms; + animation-duration: 1ms; + -webkit-animation-iteration-count: 1; + animation-iteration-count: 1; + -webkit-transition-delay: 0s; + transition-delay: 0s; + -webkit-transition-duration: 0s; + transition-duration: 0s; } } + +@-webkit-keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@-webkit-keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@-webkit-keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@-webkit-keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@-webkit-keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@-webkit-keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.fa-rotate-90 { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + +.fa-rotate-180 { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +.fa-rotate-270 { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + +.fa-flip-horizontal { + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); } + +.fa-flip-vertical { + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.fa-flip-both, +.fa-flip-horizontal.fa-flip-vertical { + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); } + +.fa-rotate-by { + -webkit-transform: rotate(var(--fa-rotate-angle, none)); + transform: rotate(var(--fa-rotate-angle, none)); } + +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2.5em; } + +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; + z-index: var(--fa-stack-z-index, auto); } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + color: var(--fa-inverse, #fff); } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen +readers do not read off random characters that represent icons */ +.fa-0::before { content: "\30"; } +.fa-00::before { content: "\e467"; } +.fa-1::before { content: "\31"; } +.fa-100::before { content: "\e41c"; } +.fa-2::before { content: "\32"; } +.fa-3::before { content: "\33"; } +.fa-360-degrees::before { content: "\e2dc"; } +.fa-4::before { content: "\34"; } +.fa-5::before { content: "\35"; } +.fa-6::before { content: "\36"; } +.fa-7::before { content: "\37"; } +.fa-8::before { content: "\38"; } +.fa-9::before { content: "\39"; } +.fa-a::before { content: "\41"; } +.fa-abacus::before { content: "\f640"; } +.fa-accent-grave::before { content: "\60"; } +.fa-acorn::before { content: "\f6ae"; } +.fa-ad::before { content: "\f641"; } +.fa-add::before { content: "\2b"; } +.fa-address-book::before { content: "\f2b9"; } +.fa-address-card::before { content: "\f2bb"; } +.fa-adjust::before { content: "\f042"; } +.fa-air-conditioner::before { content: "\f8f4"; } +.fa-air-freshener::before { content: "\f5d0"; } +.fa-airplay::before { content: "\e089"; } +.fa-alarm-clock::before { content: "\f34e"; } +.fa-alarm-exclamation::before { content: "\f843"; } +.fa-alarm-plus::before { content: "\f844"; } +.fa-alarm-snooze::before { content: "\f845"; } +.fa-album::before { content: "\f89f"; } +.fa-album-circle-plus::before { content: "\e48c"; } +.fa-album-circle-user::before { content: "\e48d"; } +.fa-album-collection::before { content: "\f8a0"; } +.fa-album-collection-circle-plus::before { content: "\e48e"; } +.fa-album-collection-circle-user::before { content: "\e48f"; } +.fa-alicorn::before { content: "\f6b0"; } +.fa-alien::before { content: "\f8f5"; } +.fa-alien-8bit::before { content: "\f8f6"; } +.fa-alien-monster::before { content: "\f8f6"; } +.fa-align-center::before { content: "\f037"; } +.fa-align-justify::before { content: "\f039"; } +.fa-align-left::before { content: "\f036"; } +.fa-align-right::before { content: "\f038"; } +.fa-align-slash::before { content: "\f846"; } +.fa-allergies::before { content: "\f461"; } +.fa-alt::before { content: "\e08a"; } +.fa-ambulance::before { content: "\f0f9"; } +.fa-american-sign-language-interpreting::before { content: "\f2a3"; } +.fa-amp-guitar::before { content: "\f8a1"; } +.fa-ampersand::before { content: "\26"; } +.fa-analytics::before { content: "\f643"; } +.fa-anchor::before { content: "\f13d"; } +.fa-anchor-circle-check::before { content: "\e4aa"; } +.fa-anchor-circle-exclamation::before { content: "\e4ab"; } +.fa-anchor-circle-xmark::before { content: "\e4ac"; } +.fa-anchor-lock::before { content: "\e4ad"; } +.fa-angel::before { content: "\f779"; } +.fa-angle::before { content: "\e08c"; } +.fa-angle-90::before { content: "\e08d"; } +.fa-angle-double-down::before { content: "\f103"; } +.fa-angle-double-left::before { content: "\f100"; } +.fa-angle-double-right::before { content: "\f101"; } +.fa-angle-double-up::before { content: "\f102"; } +.fa-angle-down::before { content: "\f107"; } +.fa-angle-left::before { content: "\f104"; } +.fa-angle-right::before { content: "\f105"; } +.fa-angle-up::before { content: "\f106"; } +.fa-angles-down::before { content: "\f103"; } +.fa-angles-left::before { content: "\f100"; } +.fa-angles-right::before { content: "\f101"; } +.fa-angles-up::before { content: "\f102"; } +.fa-angles-up-down::before { content: "\e60d"; } +.fa-angry::before { content: "\f556"; } +.fa-ankh::before { content: "\f644"; } +.fa-apartment::before { content: "\e468"; } +.fa-aperture::before { content: "\e2df"; } +.fa-apostrophe::before { content: "\27"; } +.fa-apple-alt::before { content: "\f5d1"; } +.fa-apple-core::before { content: "\e08f"; } +.fa-apple-crate::before { content: "\f6b1"; } +.fa-apple-whole::before { content: "\f5d1"; } +.fa-archive::before { content: "\f187"; } +.fa-archway::before { content: "\f557"; } +.fa-area-chart::before { content: "\f1fe"; } +.fa-arrow-alt-circle-down::before { content: "\f358"; } +.fa-arrow-alt-circle-left::before { content: "\f359"; } +.fa-arrow-alt-circle-right::before { content: "\f35a"; } +.fa-arrow-alt-circle-up::before { content: "\f35b"; } +.fa-arrow-alt-down::before { content: "\f354"; } +.fa-arrow-alt-from-bottom::before { content: "\f346"; } +.fa-arrow-alt-from-left::before { content: "\f347"; } +.fa-arrow-alt-from-right::before { content: "\f348"; } +.fa-arrow-alt-from-top::before { content: "\f349"; } +.fa-arrow-alt-left::before { content: "\f355"; } +.fa-arrow-alt-right::before { content: "\f356"; } +.fa-arrow-alt-square-down::before { content: "\f350"; } +.fa-arrow-alt-square-left::before { content: "\f351"; } +.fa-arrow-alt-square-right::before { content: "\f352"; } +.fa-arrow-alt-square-up::before { content: "\f353"; } +.fa-arrow-alt-to-bottom::before { content: "\f34a"; } +.fa-arrow-alt-to-left::before { content: "\f34b"; } +.fa-arrow-alt-to-right::before { content: "\f34c"; } +.fa-arrow-alt-to-top::before { content: "\f34d"; } +.fa-arrow-alt-up::before { content: "\f357"; } +.fa-arrow-circle-down::before { content: "\f0ab"; } +.fa-arrow-circle-left::before { content: "\f0a8"; } +.fa-arrow-circle-right::before { content: "\f0a9"; } +.fa-arrow-circle-up::before { content: "\f0aa"; } +.fa-arrow-down::before { content: "\f063"; } +.fa-arrow-down-1-9::before { content: "\f162"; } +.fa-arrow-down-9-1::before { content: "\f886"; } +.fa-arrow-down-a-z::before { content: "\f15d"; } +.fa-arrow-down-arrow-up::before { content: "\f883"; } +.fa-arrow-down-big-small::before { content: "\f88c"; } +.fa-arrow-down-from-arc::before { content: "\e614"; } +.fa-arrow-down-from-dotted-line::before { content: "\e090"; } +.fa-arrow-down-from-line::before { content: "\f345"; } +.fa-arrow-down-left::before { content: "\e091"; } +.fa-arrow-down-left-and-arrow-up-right-to-center::before { content: "\e092"; } +.fa-arrow-down-long::before { content: "\f175"; } +.fa-arrow-down-right::before { content: "\e093"; } +.fa-arrow-down-short-wide::before { content: "\f884"; } +.fa-arrow-down-small-big::before { content: "\f88d"; } +.fa-arrow-down-square-triangle::before { content: "\f889"; } +.fa-arrow-down-to-arc::before { content: "\e4ae"; } +.fa-arrow-down-to-bracket::before { content: "\e094"; } +.fa-arrow-down-to-dotted-line::before { content: "\e095"; } +.fa-arrow-down-to-line::before { content: "\f33d"; } +.fa-arrow-down-to-square::before { content: "\e096"; } +.fa-arrow-down-triangle-square::before { content: "\f888"; } +.fa-arrow-down-up-across-line::before { content: "\e4af"; } +.fa-arrow-down-up-lock::before { content: "\e4b0"; } +.fa-arrow-down-wide-short::before { content: "\f160"; } +.fa-arrow-down-z-a::before { content: "\f881"; } +.fa-arrow-from-bottom::before { content: "\f342"; } +.fa-arrow-from-left::before { content: "\f343"; } +.fa-arrow-from-right::before { content: "\f344"; } +.fa-arrow-from-top::before { content: "\f345"; } +.fa-arrow-left::before { content: "\f060"; } +.fa-arrow-left-from-arc::before { content: "\e615"; } +.fa-arrow-left-from-line::before { content: "\f344"; } +.fa-arrow-left-long::before { content: "\f177"; } +.fa-arrow-left-long-to-line::before { content: "\e3d4"; } +.fa-arrow-left-rotate::before { content: "\f0e2"; } +.fa-arrow-left-to-arc::before { content: "\e616"; } +.fa-arrow-left-to-line::before { content: "\f33e"; } +.fa-arrow-pointer::before { content: "\f245"; } +.fa-arrow-progress::before { content: "\e5df"; } +.fa-arrow-right::before { content: "\f061"; } +.fa-arrow-right-arrow-left::before { content: "\f0ec"; } +.fa-arrow-right-from-arc::before { content: "\e4b1"; } +.fa-arrow-right-from-bracket::before { content: "\f08b"; } +.fa-arrow-right-from-file::before { content: "\f56e"; } +.fa-arrow-right-from-line::before { content: "\f343"; } +.fa-arrow-right-long::before { content: "\f178"; } +.fa-arrow-right-long-to-line::before { content: "\e3d5"; } +.fa-arrow-right-rotate::before { content: "\f01e"; } +.fa-arrow-right-to-arc::before { content: "\e4b2"; } +.fa-arrow-right-to-bracket::before { content: "\f090"; } +.fa-arrow-right-to-city::before { content: "\e4b3"; } +.fa-arrow-right-to-file::before { content: "\f56f"; } +.fa-arrow-right-to-line::before { content: "\f340"; } +.fa-arrow-rotate-back::before { content: "\f0e2"; } +.fa-arrow-rotate-backward::before { content: "\f0e2"; } +.fa-arrow-rotate-forward::before { content: "\f01e"; } +.fa-arrow-rotate-left::before { content: "\f0e2"; } +.fa-arrow-rotate-right::before { content: "\f01e"; } +.fa-arrow-square-down::before { content: "\f339"; } +.fa-arrow-square-left::before { content: "\f33a"; } +.fa-arrow-square-right::before { content: "\f33b"; } +.fa-arrow-square-up::before { content: "\f33c"; } +.fa-arrow-to-bottom::before { content: "\f33d"; } +.fa-arrow-to-left::before { content: "\f33e"; } +.fa-arrow-to-right::before { content: "\f340"; } +.fa-arrow-to-top::before { content: "\f341"; } +.fa-arrow-trend-down::before { content: "\e097"; } +.fa-arrow-trend-up::before { content: "\e098"; } +.fa-arrow-turn-down::before { content: "\f149"; } +.fa-arrow-turn-down-left::before { content: "\e2e1"; } +.fa-arrow-turn-down-right::before { content: "\e3d6"; } +.fa-arrow-turn-right::before { content: "\f064"; } +.fa-arrow-turn-up::before { content: "\f148"; } +.fa-arrow-up::before { content: "\f062"; } +.fa-arrow-up-1-9::before { content: "\f163"; } +.fa-arrow-up-9-1::before { content: "\f887"; } +.fa-arrow-up-a-z::before { content: "\f15e"; } +.fa-arrow-up-arrow-down::before { content: "\e099"; } +.fa-arrow-up-big-small::before { content: "\f88e"; } +.fa-arrow-up-from-arc::before { content: "\e4b4"; } +.fa-arrow-up-from-bracket::before { content: "\e09a"; } +.fa-arrow-up-from-dotted-line::before { content: "\e09b"; } +.fa-arrow-up-from-ground-water::before { content: "\e4b5"; } +.fa-arrow-up-from-line::before { content: "\f342"; } +.fa-arrow-up-from-square::before { content: "\e09c"; } +.fa-arrow-up-from-water-pump::before { content: "\e4b6"; } +.fa-arrow-up-left::before { content: "\e09d"; } +.fa-arrow-up-left-from-circle::before { content: "\e09e"; } +.fa-arrow-up-long::before { content: "\f176"; } +.fa-arrow-up-right::before { content: "\e09f"; } +.fa-arrow-up-right-and-arrow-down-left-from-center::before { content: "\e0a0"; } +.fa-arrow-up-right-dots::before { content: "\e4b7"; } +.fa-arrow-up-right-from-square::before { content: "\f08e"; } +.fa-arrow-up-short-wide::before { content: "\f885"; } +.fa-arrow-up-small-big::before { content: "\f88f"; } +.fa-arrow-up-square-triangle::before { content: "\f88b"; } +.fa-arrow-up-to-arc::before { content: "\e617"; } +.fa-arrow-up-to-dotted-line::before { content: "\e0a1"; } +.fa-arrow-up-to-line::before { content: "\f341"; } +.fa-arrow-up-triangle-square::before { content: "\f88a"; } +.fa-arrow-up-wide-short::before { content: "\f161"; } +.fa-arrow-up-z-a::before { content: "\f882"; } +.fa-arrows::before { content: "\f047"; } +.fa-arrows-alt::before { content: "\f0b2"; } +.fa-arrows-alt-h::before { content: "\f337"; } +.fa-arrows-alt-v::before { content: "\f338"; } +.fa-arrows-cross::before { content: "\e0a2"; } +.fa-arrows-down-to-line::before { content: "\e4b8"; } +.fa-arrows-down-to-people::before { content: "\e4b9"; } +.fa-arrows-from-dotted-line::before { content: "\e0a3"; } +.fa-arrows-from-line::before { content: "\e0a4"; } +.fa-arrows-h::before { content: "\f07e"; } +.fa-arrows-left-right::before { content: "\f07e"; } +.fa-arrows-left-right-to-line::before { content: "\e4ba"; } +.fa-arrows-maximize::before { content: "\f31d"; } +.fa-arrows-minimize::before { content: "\e0a5"; } +.fa-arrows-repeat::before { content: "\f364"; } +.fa-arrows-repeat-1::before { content: "\f366"; } +.fa-arrows-retweet::before { content: "\f361"; } +.fa-arrows-rotate::before { content: "\f021"; } +.fa-arrows-spin::before { content: "\e4bb"; } +.fa-arrows-split-up-and-left::before { content: "\e4bc"; } +.fa-arrows-to-circle::before { content: "\e4bd"; } +.fa-arrows-to-dot::before { content: "\e4be"; } +.fa-arrows-to-dotted-line::before { content: "\e0a6"; } +.fa-arrows-to-eye::before { content: "\e4bf"; } +.fa-arrows-to-line::before { content: "\e0a7"; } +.fa-arrows-turn-right::before { content: "\e4c0"; } +.fa-arrows-turn-to-dots::before { content: "\e4c1"; } +.fa-arrows-up-down::before { content: "\f07d"; } +.fa-arrows-up-down-left-right::before { content: "\f047"; } +.fa-arrows-up-to-line::before { content: "\e4c2"; } +.fa-arrows-v::before { content: "\f07d"; } +.fa-asl-interpreting::before { content: "\f2a3"; } +.fa-assistive-listening-systems::before { content: "\f2a2"; } +.fa-asterisk::before { content: "\2a"; } +.fa-at::before { content: "\40"; } +.fa-atlas::before { content: "\f558"; } +.fa-atom::before { content: "\f5d2"; } +.fa-atom-alt::before { content: "\f5d3"; } +.fa-atom-simple::before { content: "\f5d3"; } +.fa-audio-description::before { content: "\f29e"; } +.fa-audio-description-slash::before { content: "\e0a8"; } +.fa-austral-sign::before { content: "\e0a9"; } +.fa-automobile::before { content: "\f1b9"; } +.fa-avocado::before { content: "\e0aa"; } +.fa-award::before { content: "\f559"; } +.fa-award-simple::before { content: "\e0ab"; } +.fa-axe::before { content: "\f6b2"; } +.fa-axe-battle::before { content: "\f6b3"; } +.fa-b::before { content: "\42"; } +.fa-baby::before { content: "\f77c"; } +.fa-baby-carriage::before { content: "\f77d"; } +.fa-backpack::before { content: "\f5d4"; } +.fa-backspace::before { content: "\f55a"; } +.fa-backward::before { content: "\f04a"; } +.fa-backward-fast::before { content: "\f049"; } +.fa-backward-step::before { content: "\f048"; } +.fa-bacon::before { content: "\f7e5"; } +.fa-bacteria::before { content: "\e059"; } +.fa-bacterium::before { content: "\e05a"; } +.fa-badge::before { content: "\f335"; } +.fa-badge-check::before { content: "\f336"; } +.fa-badge-dollar::before { content: "\f645"; } +.fa-badge-percent::before { content: "\f646"; } +.fa-badge-sheriff::before { content: "\f8a2"; } +.fa-badger-honey::before { content: "\f6b4"; } +.fa-badminton::before { content: "\e33a"; } +.fa-bag-seedling::before { content: "\e5f2"; } +.fa-bag-shopping::before { content: "\f290"; } +.fa-bagel::before { content: "\e3d7"; } +.fa-bags-shopping::before { content: "\f847"; } +.fa-baguette::before { content: "\e3d8"; } +.fa-bahai::before { content: "\f666"; } +.fa-baht-sign::before { content: "\e0ac"; } +.fa-balance-scale::before { content: "\f24e"; } +.fa-balance-scale-left::before { content: "\f515"; } +.fa-balance-scale-right::before { content: "\f516"; } +.fa-ball-pile::before { content: "\f77e"; } +.fa-balloon::before { content: "\e2e3"; } +.fa-balloons::before { content: "\e2e4"; } +.fa-ballot::before { content: "\f732"; } +.fa-ballot-check::before { content: "\f733"; } +.fa-ban::before { content: "\f05e"; } +.fa-ban-bug::before { content: "\f7f9"; } +.fa-ban-parking::before { content: "\f616"; } +.fa-ban-smoking::before { content: "\f54d"; } +.fa-banana::before { content: "\e2e5"; } +.fa-band-aid::before { content: "\f462"; } +.fa-bandage::before { content: "\f462"; } +.fa-bangladeshi-taka-sign::before { content: "\e2e6"; } +.fa-banjo::before { content: "\f8a3"; } +.fa-bank::before { content: "\f19c"; } +.fa-bar-chart::before { content: "\f080"; } +.fa-barcode::before { content: "\f02a"; } +.fa-barcode-alt::before { content: "\f463"; } +.fa-barcode-read::before { content: "\f464"; } +.fa-barcode-scan::before { content: "\f465"; } +.fa-barn-silo::before { content: "\f864"; } +.fa-bars::before { content: "\f0c9"; } +.fa-bars-filter::before { content: "\e0ad"; } +.fa-bars-progress::before { content: "\f828"; } +.fa-bars-sort::before { content: "\e0ae"; } +.fa-bars-staggered::before { content: "\f550"; } +.fa-baseball::before { content: "\f433"; } +.fa-baseball-ball::before { content: "\f433"; } +.fa-baseball-bat-ball::before { content: "\f432"; } +.fa-basket-shopping::before { content: "\f291"; } +.fa-basket-shopping-simple::before { content: "\e0af"; } +.fa-basketball::before { content: "\f434"; } +.fa-basketball-ball::before { content: "\f434"; } +.fa-basketball-hoop::before { content: "\f435"; } +.fa-bat::before { content: "\f6b5"; } +.fa-bath::before { content: "\f2cd"; } +.fa-bathtub::before { content: "\f2cd"; } +.fa-battery::before { content: "\f240"; } +.fa-battery-0::before { content: "\f244"; } +.fa-battery-1::before { content: "\e0b1"; } +.fa-battery-2::before { content: "\f243"; } +.fa-battery-3::before { content: "\f242"; } +.fa-battery-4::before { content: "\f241"; } +.fa-battery-5::before { content: "\f240"; } +.fa-battery-bolt::before { content: "\f376"; } +.fa-battery-car::before { content: "\f5df"; } +.fa-battery-empty::before { content: "\f244"; } +.fa-battery-exclamation::before { content: "\e0b0"; } +.fa-battery-full::before { content: "\f240"; } +.fa-battery-half::before { content: "\f242"; } +.fa-battery-low::before { content: "\e0b1"; } +.fa-battery-quarter::before { content: "\f243"; } +.fa-battery-slash::before { content: "\f377"; } +.fa-battery-three-quarters::before { content: "\f241"; } +.fa-bed::before { content: "\f236"; } +.fa-bed-alt::before { content: "\f8f7"; } +.fa-bed-bunk::before { content: "\f8f8"; } +.fa-bed-empty::before { content: "\f8f9"; } +.fa-bed-front::before { content: "\f8f7"; } +.fa-bed-pulse::before { content: "\f487"; } +.fa-bee::before { content: "\e0b2"; } +.fa-beer::before { content: "\f0fc"; } +.fa-beer-foam::before { content: "\e0b3"; } +.fa-beer-mug::before { content: "\e0b3"; } +.fa-beer-mug-empty::before { content: "\f0fc"; } +.fa-bell::before { content: "\f0f3"; } +.fa-bell-concierge::before { content: "\f562"; } +.fa-bell-exclamation::before { content: "\f848"; } +.fa-bell-on::before { content: "\f8fa"; } +.fa-bell-plus::before { content: "\f849"; } +.fa-bell-school::before { content: "\f5d5"; } +.fa-bell-school-slash::before { content: "\f5d6"; } +.fa-bell-slash::before { content: "\f1f6"; } +.fa-bells::before { content: "\f77f"; } +.fa-bench-tree::before { content: "\e2e7"; } +.fa-betamax::before { content: "\f8a4"; } +.fa-bezier-curve::before { content: "\f55b"; } +.fa-bible::before { content: "\f647"; } +.fa-bicycle::before { content: "\f206"; } +.fa-biking::before { content: "\f84a"; } +.fa-biking-mountain::before { content: "\f84b"; } +.fa-billboard::before { content: "\e5cd"; } +.fa-bin-bottles::before { content: "\e5f5"; } +.fa-bin-bottles-recycle::before { content: "\e5f6"; } +.fa-bin-recycle::before { content: "\e5f7"; } +.fa-binary::before { content: "\e33b"; } +.fa-binary-circle-check::before { content: "\e33c"; } +.fa-binary-lock::before { content: "\e33d"; } +.fa-binary-slash::before { content: "\e33e"; } +.fa-binoculars::before { content: "\f1e5"; } +.fa-biohazard::before { content: "\f780"; } +.fa-bird::before { content: "\e469"; } +.fa-birthday-cake::before { content: "\f1fd"; } +.fa-bitcoin-sign::before { content: "\e0b4"; } +.fa-blackboard::before { content: "\f51b"; } +.fa-blanket::before { content: "\f498"; } +.fa-blanket-fire::before { content: "\e3da"; } +.fa-blender::before { content: "\f517"; } +.fa-blender-phone::before { content: "\f6b6"; } +.fa-blind::before { content: "\f29d"; } +.fa-blinds::before { content: "\f8fb"; } +.fa-blinds-open::before { content: "\f8fc"; } +.fa-blinds-raised::before { content: "\f8fd"; } +.fa-block::before { content: "\e46a"; } +.fa-block-brick::before { content: "\e3db"; } +.fa-block-brick-fire::before { content: "\e3dc"; } +.fa-block-question::before { content: "\e3dd"; } +.fa-block-quote::before { content: "\e0b5"; } +.fa-blog::before { content: "\f781"; } +.fa-blueberries::before { content: "\e2e8"; } +.fa-bluetooth::before { content: "\f293"; } +.fa-bold::before { content: "\f032"; } +.fa-bolt::before { content: "\f0e7"; } +.fa-bolt-auto::before { content: "\e0b6"; } +.fa-bolt-lightning::before { content: "\e0b7"; } +.fa-bolt-slash::before { content: "\e0b8"; } +.fa-bomb::before { content: "\f1e2"; } +.fa-bone::before { content: "\f5d7"; } +.fa-bone-break::before { content: "\f5d8"; } +.fa-bong::before { content: "\f55c"; } +.fa-book::before { content: "\f02d"; } +.fa-book-alt::before { content: "\f5d9"; } +.fa-book-arrow-right::before { content: "\e0b9"; } +.fa-book-arrow-up::before { content: "\e0ba"; } +.fa-book-atlas::before { content: "\f558"; } +.fa-book-bible::before { content: "\f647"; } +.fa-book-blank::before { content: "\f5d9"; } +.fa-book-bookmark::before { content: "\e0bb"; } +.fa-book-circle::before { content: "\e0ff"; } +.fa-book-circle-arrow-right::before { content: "\e0bc"; } +.fa-book-circle-arrow-up::before { content: "\e0bd"; } +.fa-book-copy::before { content: "\e0be"; } +.fa-book-dead::before { content: "\f6b7"; } +.fa-book-font::before { content: "\e0bf"; } +.fa-book-heart::before { content: "\f499"; } +.fa-book-journal-whills::before { content: "\f66a"; } +.fa-book-law::before { content: "\e0c1"; } +.fa-book-medical::before { content: "\f7e6"; } +.fa-book-open::before { content: "\f518"; } +.fa-book-open-alt::before { content: "\e0c0"; } +.fa-book-open-cover::before { content: "\e0c0"; } +.fa-book-open-reader::before { content: "\f5da"; } +.fa-book-quran::before { content: "\f687"; } +.fa-book-reader::before { content: "\f5da"; } +.fa-book-section::before { content: "\e0c1"; } +.fa-book-skull::before { content: "\f6b7"; } +.fa-book-sparkles::before { content: "\f6b8"; } +.fa-book-spells::before { content: "\f6b8"; } +.fa-book-tanakh::before { content: "\f827"; } +.fa-book-user::before { content: "\f7e7"; } +.fa-bookmark::before { content: "\f02e"; } +.fa-bookmark-circle::before { content: "\e100"; } +.fa-bookmark-slash::before { content: "\e0c2"; } +.fa-books::before { content: "\f5db"; } +.fa-books-medical::before { content: "\f7e8"; } +.fa-boombox::before { content: "\f8a5"; } +.fa-boot::before { content: "\f782"; } +.fa-boot-heeled::before { content: "\e33f"; } +.fa-booth-curtain::before { content: "\f734"; } +.fa-border-all::before { content: "\f84c"; } +.fa-border-bottom::before { content: "\f84d"; } +.fa-border-bottom-right::before { content: "\f854"; } +.fa-border-center-h::before { content: "\f89c"; } +.fa-border-center-v::before { content: "\f89d"; } +.fa-border-inner::before { content: "\f84e"; } +.fa-border-left::before { content: "\f84f"; } +.fa-border-none::before { content: "\f850"; } +.fa-border-outer::before { content: "\f851"; } +.fa-border-right::before { content: "\f852"; } +.fa-border-style::before { content: "\f853"; } +.fa-border-style-alt::before { content: "\f854"; } +.fa-border-top::before { content: "\f855"; } +.fa-border-top-left::before { content: "\f853"; } +.fa-bore-hole::before { content: "\e4c3"; } +.fa-bottle-droplet::before { content: "\e4c4"; } +.fa-bottle-water::before { content: "\e4c5"; } +.fa-bow-arrow::before { content: "\f6b9"; } +.fa-bowl-chopsticks::before { content: "\e2e9"; } +.fa-bowl-chopsticks-noodles::before { content: "\e2ea"; } +.fa-bowl-food::before { content: "\e4c6"; } +.fa-bowl-hot::before { content: "\f823"; } +.fa-bowl-rice::before { content: "\e2eb"; } +.fa-bowl-salad::before { content: "\f81e"; } +.fa-bowl-scoop::before { content: "\e3de"; } +.fa-bowl-scoops::before { content: "\e3df"; } +.fa-bowl-shaved-ice::before { content: "\e3de"; } +.fa-bowl-soft-serve::before { content: "\e46b"; } +.fa-bowl-spoon::before { content: "\e3e0"; } +.fa-bowling-ball::before { content: "\f436"; } +.fa-bowling-ball-pin::before { content: "\e0c3"; } +.fa-bowling-pins::before { content: "\f437"; } +.fa-box::before { content: "\f466"; } +.fa-box-alt::before { content: "\f49a"; } +.fa-box-archive::before { content: "\f187"; } +.fa-box-ballot::before { content: "\f735"; } +.fa-box-check::before { content: "\f467"; } +.fa-box-circle-check::before { content: "\e0c4"; } +.fa-box-dollar::before { content: "\f4a0"; } +.fa-box-fragile::before { content: "\f49b"; } +.fa-box-full::before { content: "\f49c"; } +.fa-box-heart::before { content: "\f49d"; } +.fa-box-open::before { content: "\f49e"; } +.fa-box-open-full::before { content: "\f49c"; } +.fa-box-taped::before { content: "\f49a"; } +.fa-box-tissue::before { content: "\e05b"; } +.fa-box-up::before { content: "\f49f"; } +.fa-box-usd::before { content: "\f4a0"; } +.fa-boxes::before { content: "\f468"; } +.fa-boxes-alt::before { content: "\f468"; } +.fa-boxes-packing::before { content: "\e4c7"; } +.fa-boxes-stacked::before { content: "\f468"; } +.fa-boxing-glove::before { content: "\f438"; } +.fa-bracket::before { content: "\5b"; } +.fa-bracket-curly::before { content: "\7b"; } +.fa-bracket-curly-left::before { content: "\7b"; } +.fa-bracket-curly-right::before { content: "\7d"; } +.fa-bracket-left::before { content: "\5b"; } +.fa-bracket-round::before { content: "\28"; } +.fa-bracket-round-right::before { content: "\29"; } +.fa-bracket-square::before { content: "\5b"; } +.fa-bracket-square-right::before { content: "\5d"; } +.fa-brackets::before { content: "\f7e9"; } +.fa-brackets-curly::before { content: "\f7ea"; } +.fa-brackets-round::before { content: "\e0c5"; } +.fa-brackets-square::before { content: "\f7e9"; } +.fa-braille::before { content: "\f2a1"; } +.fa-brain::before { content: "\f5dc"; } +.fa-brain-arrow-curved-right::before { content: "\f677"; } +.fa-brain-circuit::before { content: "\e0c6"; } +.fa-brake-warning::before { content: "\e0c7"; } +.fa-brazilian-real-sign::before { content: "\e46c"; } +.fa-bread-loaf::before { content: "\f7eb"; } +.fa-bread-slice::before { content: "\f7ec"; } +.fa-bread-slice-butter::before { content: "\e3e1"; } +.fa-bridge::before { content: "\e4c8"; } +.fa-bridge-circle-check::before { content: "\e4c9"; } +.fa-bridge-circle-exclamation::before { content: "\e4ca"; } +.fa-bridge-circle-xmark::before { content: "\e4cb"; } +.fa-bridge-lock::before { content: "\e4cc"; } +.fa-bridge-suspension::before { content: "\e4cd"; } +.fa-bridge-water::before { content: "\e4ce"; } +.fa-briefcase::before { content: "\f0b1"; } +.fa-briefcase-arrow-right::before { content: "\e2f2"; } +.fa-briefcase-blank::before { content: "\e0c8"; } +.fa-briefcase-clock::before { content: "\f64a"; } +.fa-briefcase-medical::before { content: "\f469"; } +.fa-brightness::before { content: "\e0c9"; } +.fa-brightness-low::before { content: "\e0ca"; } +.fa-bring-forward::before { content: "\f856"; } +.fa-bring-front::before { content: "\f857"; } +.fa-broadcast-tower::before { content: "\f519"; } +.fa-broccoli::before { content: "\e3e2"; } +.fa-broom::before { content: "\f51a"; } +.fa-broom-ball::before { content: "\f458"; } +.fa-broom-wide::before { content: "\e5d1"; } +.fa-browser::before { content: "\f37e"; } +.fa-browsers::before { content: "\e0cb"; } +.fa-brush::before { content: "\f55d"; } +.fa-bucket::before { content: "\e4cf"; } +.fa-bug::before { content: "\f188"; } +.fa-bug-slash::before { content: "\e490"; } +.fa-bugs::before { content: "\e4d0"; } +.fa-building::before { content: "\f1ad"; } +.fa-building-circle-arrow-right::before { content: "\e4d1"; } +.fa-building-circle-check::before { content: "\e4d2"; } +.fa-building-circle-exclamation::before { content: "\e4d3"; } +.fa-building-circle-xmark::before { content: "\e4d4"; } +.fa-building-columns::before { content: "\f19c"; } +.fa-building-flag::before { content: "\e4d5"; } +.fa-building-lock::before { content: "\e4d6"; } +.fa-building-ngo::before { content: "\e4d7"; } +.fa-building-shield::before { content: "\e4d8"; } +.fa-building-un::before { content: "\e4d9"; } +.fa-building-user::before { content: "\e4da"; } +.fa-building-wheat::before { content: "\e4db"; } +.fa-buildings::before { content: "\e0cc"; } +.fa-bullhorn::before { content: "\f0a1"; } +.fa-bullseye::before { content: "\f140"; } +.fa-bullseye-arrow::before { content: "\f648"; } +.fa-bullseye-pointer::before { content: "\f649"; } +.fa-buoy::before { content: "\e5b5"; } +.fa-buoy-mooring::before { content: "\e5b6"; } +.fa-burger::before { content: "\f805"; } +.fa-burger-cheese::before { content: "\f7f1"; } +.fa-burger-fries::before { content: "\e0cd"; } +.fa-burger-glass::before { content: "\e0ce"; } +.fa-burger-lettuce::before { content: "\e3e3"; } +.fa-burger-soda::before { content: "\f858"; } +.fa-burn::before { content: "\f46a"; } +.fa-burrito::before { content: "\f7ed"; } +.fa-burst::before { content: "\e4dc"; } +.fa-bus::before { content: "\f207"; } +.fa-bus-alt::before { content: "\f55e"; } +.fa-bus-school::before { content: "\f5dd"; } +.fa-bus-simple::before { content: "\f55e"; } +.fa-business-front::before { content: "\e45c"; } +.fa-business-time::before { content: "\f64a"; } +.fa-butter::before { content: "\e3e4"; } +.fa-c::before { content: "\43"; } +.fa-cab::before { content: "\f1ba"; } +.fa-cabin::before { content: "\e46d"; } +.fa-cabinet-filing::before { content: "\f64b"; } +.fa-cable-car::before { content: "\f7da"; } +.fa-cactus::before { content: "\f8a7"; } +.fa-cake::before { content: "\f1fd"; } +.fa-cake-candles::before { content: "\f1fd"; } +.fa-cake-slice::before { content: "\e3e5"; } +.fa-calculator::before { content: "\f1ec"; } +.fa-calculator-alt::before { content: "\f64c"; } +.fa-calculator-simple::before { content: "\f64c"; } +.fa-calendar::before { content: "\f133"; } +.fa-calendar-alt::before { content: "\f073"; } +.fa-calendar-arrow-down::before { content: "\e0d0"; } +.fa-calendar-arrow-up::before { content: "\e0d1"; } +.fa-calendar-check::before { content: "\f274"; } +.fa-calendar-circle::before { content: "\e102"; } +.fa-calendar-circle-exclamation::before { content: "\e46e"; } +.fa-calendar-circle-minus::before { content: "\e46f"; } +.fa-calendar-circle-plus::before { content: "\e470"; } +.fa-calendar-circle-user::before { content: "\e471"; } +.fa-calendar-clock::before { content: "\e0d2"; } +.fa-calendar-day::before { content: "\f783"; } +.fa-calendar-days::before { content: "\f073"; } +.fa-calendar-download::before { content: "\e0d0"; } +.fa-calendar-edit::before { content: "\f333"; } +.fa-calendar-exclamation::before { content: "\f334"; } +.fa-calendar-heart::before { content: "\e0d3"; } +.fa-calendar-image::before { content: "\e0d4"; } +.fa-calendar-lines::before { content: "\e0d5"; } +.fa-calendar-lines-pen::before { content: "\e472"; } +.fa-calendar-minus::before { content: "\f272"; } +.fa-calendar-note::before { content: "\e0d5"; } +.fa-calendar-pen::before { content: "\f333"; } +.fa-calendar-plus::before { content: "\f271"; } +.fa-calendar-range::before { content: "\e0d6"; } +.fa-calendar-star::before { content: "\f736"; } +.fa-calendar-time::before { content: "\e0d2"; } +.fa-calendar-times::before { content: "\f273"; } +.fa-calendar-upload::before { content: "\e0d1"; } +.fa-calendar-users::before { content: "\e5e2"; } +.fa-calendar-week::before { content: "\f784"; } +.fa-calendar-xmark::before { content: "\f273"; } +.fa-calendars::before { content: "\e0d7"; } +.fa-camcorder::before { content: "\f8a8"; } +.fa-camera::before { content: "\f030"; } +.fa-camera-alt::before { content: "\f030"; } +.fa-camera-cctv::before { content: "\f8ac"; } +.fa-camera-circle::before { content: "\e103"; } +.fa-camera-home::before { content: "\f8fe"; } +.fa-camera-movie::before { content: "\f8a9"; } +.fa-camera-polaroid::before { content: "\f8aa"; } +.fa-camera-retro::before { content: "\f083"; } +.fa-camera-rotate::before { content: "\e0d8"; } +.fa-camera-security::before { content: "\f8fe"; } +.fa-camera-slash::before { content: "\e0d9"; } +.fa-camera-viewfinder::before { content: "\e0da"; } +.fa-camera-web::before { content: "\f832"; } +.fa-camera-web-slash::before { content: "\f833"; } +.fa-campfire::before { content: "\f6ba"; } +.fa-campground::before { content: "\f6bb"; } +.fa-can-food::before { content: "\e3e6"; } +.fa-cancel::before { content: "\f05e"; } +.fa-candle-holder::before { content: "\f6bc"; } +.fa-candy::before { content: "\e3e7"; } +.fa-candy-bar::before { content: "\e3e8"; } +.fa-candy-cane::before { content: "\f786"; } +.fa-candy-corn::before { content: "\f6bd"; } +.fa-cannabis::before { content: "\f55f"; } +.fa-capsules::before { content: "\f46b"; } +.fa-car::before { content: "\f1b9"; } +.fa-car-alt::before { content: "\f5de"; } +.fa-car-battery::before { content: "\f5df"; } +.fa-car-bolt::before { content: "\e341"; } +.fa-car-building::before { content: "\f859"; } +.fa-car-bump::before { content: "\f5e0"; } +.fa-car-burst::before { content: "\f5e1"; } +.fa-car-bus::before { content: "\f85a"; } +.fa-car-circle-bolt::before { content: "\e342"; } +.fa-car-crash::before { content: "\f5e1"; } +.fa-car-garage::before { content: "\f5e2"; } +.fa-car-mechanic::before { content: "\f5e3"; } +.fa-car-mirrors::before { content: "\e343"; } +.fa-car-on::before { content: "\e4dd"; } +.fa-car-rear::before { content: "\f5de"; } +.fa-car-side::before { content: "\f5e4"; } +.fa-car-side-bolt::before { content: "\e344"; } +.fa-car-tilt::before { content: "\f5e5"; } +.fa-car-tunnel::before { content: "\e4de"; } +.fa-car-wash::before { content: "\f5e6"; } +.fa-car-wrench::before { content: "\f5e3"; } +.fa-caravan::before { content: "\f8ff"; } +.fa-caravan-alt::before { content: "\e000"; } +.fa-caravan-simple::before { content: "\e000"; } +.fa-card-club::before { content: "\e3e9"; } +.fa-card-diamond::before { content: "\e3ea"; } +.fa-card-heart::before { content: "\e3eb"; } +.fa-card-spade::before { content: "\e3ec"; } +.fa-cards::before { content: "\e3ed"; } +.fa-cards-blank::before { content: "\e4df"; } +.fa-caret-circle-down::before { content: "\f32d"; } +.fa-caret-circle-left::before { content: "\f32e"; } +.fa-caret-circle-right::before { content: "\f330"; } +.fa-caret-circle-up::before { content: "\f331"; } +.fa-caret-down::before { content: "\f0d7"; } +.fa-caret-left::before { content: "\f0d9"; } +.fa-caret-right::before { content: "\f0da"; } +.fa-caret-square-down::before { content: "\f150"; } +.fa-caret-square-left::before { content: "\f191"; } +.fa-caret-square-right::before { content: "\f152"; } +.fa-caret-square-up::before { content: "\f151"; } +.fa-caret-up::before { content: "\f0d8"; } +.fa-carriage-baby::before { content: "\f77d"; } +.fa-carrot::before { content: "\f787"; } +.fa-cars::before { content: "\f85b"; } +.fa-cart-arrow-down::before { content: "\f218"; } +.fa-cart-arrow-up::before { content: "\e3ee"; } +.fa-cart-circle-arrow-down::before { content: "\e3ef"; } +.fa-cart-circle-arrow-up::before { content: "\e3f0"; } +.fa-cart-circle-check::before { content: "\e3f1"; } +.fa-cart-circle-exclamation::before { content: "\e3f2"; } +.fa-cart-circle-plus::before { content: "\e3f3"; } +.fa-cart-circle-xmark::before { content: "\e3f4"; } +.fa-cart-flatbed::before { content: "\f474"; } +.fa-cart-flatbed-boxes::before { content: "\f475"; } +.fa-cart-flatbed-empty::before { content: "\f476"; } +.fa-cart-flatbed-suitcase::before { content: "\f59d"; } +.fa-cart-minus::before { content: "\e0db"; } +.fa-cart-plus::before { content: "\f217"; } +.fa-cart-shopping::before { content: "\f07a"; } +.fa-cart-shopping-fast::before { content: "\e0dc"; } +.fa-cart-xmark::before { content: "\e0dd"; } +.fa-cash-register::before { content: "\f788"; } +.fa-cassette-betamax::before { content: "\f8a4"; } +.fa-cassette-tape::before { content: "\f8ab"; } +.fa-cassette-vhs::before { content: "\f8ec"; } +.fa-castle::before { content: "\e0de"; } +.fa-cat::before { content: "\f6be"; } +.fa-cat-space::before { content: "\e001"; } +.fa-cauldron::before { content: "\f6bf"; } +.fa-cctv::before { content: "\f8ac"; } +.fa-cedi-sign::before { content: "\e0df"; } +.fa-cent-sign::before { content: "\e3f5"; } +.fa-certificate::before { content: "\f0a3"; } +.fa-chain::before { content: "\f0c1"; } +.fa-chain-broken::before { content: "\f127"; } +.fa-chain-horizontal::before { content: "\e1cb"; } +.fa-chain-horizontal-slash::before { content: "\e1cc"; } +.fa-chain-slash::before { content: "\f127"; } +.fa-chair::before { content: "\f6c0"; } +.fa-chair-office::before { content: "\f6c1"; } +.fa-chalkboard::before { content: "\f51b"; } +.fa-chalkboard-teacher::before { content: "\f51c"; } +.fa-chalkboard-user::before { content: "\f51c"; } +.fa-champagne-glass::before { content: "\f79e"; } +.fa-champagne-glasses::before { content: "\f79f"; } +.fa-charging-station::before { content: "\f5e7"; } +.fa-chart-area::before { content: "\f1fe"; } +.fa-chart-bar::before { content: "\f080"; } +.fa-chart-bullet::before { content: "\e0e1"; } +.fa-chart-candlestick::before { content: "\e0e2"; } +.fa-chart-column::before { content: "\e0e3"; } +.fa-chart-gantt::before { content: "\e0e4"; } +.fa-chart-line::before { content: "\f201"; } +.fa-chart-line-down::before { content: "\f64d"; } +.fa-chart-line-up::before { content: "\e0e5"; } +.fa-chart-line-up-down::before { content: "\e5d7"; } +.fa-chart-mixed::before { content: "\f643"; } +.fa-chart-mixed-up-circle-currency::before { content: "\e5d8"; } +.fa-chart-mixed-up-circle-dollar::before { content: "\e5d9"; } +.fa-chart-network::before { content: "\f78a"; } +.fa-chart-pie::before { content: "\f200"; } +.fa-chart-pie-alt::before { content: "\f64e"; } +.fa-chart-pie-simple::before { content: "\f64e"; } +.fa-chart-pie-simple-circle-currency::before { content: "\e604"; } +.fa-chart-pie-simple-circle-dollar::before { content: "\e605"; } +.fa-chart-pyramid::before { content: "\e0e6"; } +.fa-chart-radar::before { content: "\e0e7"; } +.fa-chart-scatter::before { content: "\f7ee"; } +.fa-chart-scatter-3d::before { content: "\e0e8"; } +.fa-chart-scatter-bubble::before { content: "\e0e9"; } +.fa-chart-simple::before { content: "\e473"; } +.fa-chart-simple-horizontal::before { content: "\e474"; } +.fa-chart-tree-map::before { content: "\e0ea"; } +.fa-chart-user::before { content: "\f6a3"; } +.fa-chart-waterfall::before { content: "\e0eb"; } +.fa-check::before { content: "\f00c"; } +.fa-check-circle::before { content: "\f058"; } +.fa-check-double::before { content: "\f560"; } +.fa-check-square::before { content: "\f14a"; } +.fa-check-to-slot::before { content: "\f772"; } +.fa-cheese::before { content: "\f7ef"; } +.fa-cheese-swiss::before { content: "\f7f0"; } +.fa-cheeseburger::before { content: "\f7f1"; } +.fa-cherries::before { content: "\e0ec"; } +.fa-chess::before { content: "\f439"; } +.fa-chess-bishop::before { content: "\f43a"; } +.fa-chess-bishop-alt::before { content: "\f43b"; } +.fa-chess-bishop-piece::before { content: "\f43b"; } +.fa-chess-board::before { content: "\f43c"; } +.fa-chess-clock::before { content: "\f43d"; } +.fa-chess-clock-alt::before { content: "\f43e"; } +.fa-chess-clock-flip::before { content: "\f43e"; } +.fa-chess-king::before { content: "\f43f"; } +.fa-chess-king-alt::before { content: "\f440"; } +.fa-chess-king-piece::before { content: "\f440"; } +.fa-chess-knight::before { content: "\f441"; } +.fa-chess-knight-alt::before { content: "\f442"; } +.fa-chess-knight-piece::before { content: "\f442"; } +.fa-chess-pawn::before { content: "\f443"; } +.fa-chess-pawn-alt::before { content: "\f444"; } +.fa-chess-pawn-piece::before { content: "\f444"; } +.fa-chess-queen::before { content: "\f445"; } +.fa-chess-queen-alt::before { content: "\f446"; } +.fa-chess-queen-piece::before { content: "\f446"; } +.fa-chess-rook::before { content: "\f447"; } +.fa-chess-rook-alt::before { content: "\f448"; } +.fa-chess-rook-piece::before { content: "\f448"; } +.fa-chestnut::before { content: "\e3f6"; } +.fa-chevron-circle-down::before { content: "\f13a"; } +.fa-chevron-circle-left::before { content: "\f137"; } +.fa-chevron-circle-right::before { content: "\f138"; } +.fa-chevron-circle-up::before { content: "\f139"; } +.fa-chevron-double-down::before { content: "\f322"; } +.fa-chevron-double-left::before { content: "\f323"; } +.fa-chevron-double-right::before { content: "\f324"; } +.fa-chevron-double-up::before { content: "\f325"; } +.fa-chevron-down::before { content: "\f078"; } +.fa-chevron-left::before { content: "\f053"; } +.fa-chevron-right::before { content: "\f054"; } +.fa-chevron-square-down::before { content: "\f329"; } +.fa-chevron-square-left::before { content: "\f32a"; } +.fa-chevron-square-right::before { content: "\f32b"; } +.fa-chevron-square-up::before { content: "\f32c"; } +.fa-chevron-up::before { content: "\f077"; } +.fa-chevrons-down::before { content: "\f322"; } +.fa-chevrons-left::before { content: "\f323"; } +.fa-chevrons-right::before { content: "\f324"; } +.fa-chevrons-up::before { content: "\f325"; } +.fa-chf-sign::before { content: "\e602"; } +.fa-child::before { content: "\f1ae"; } +.fa-child-combatant::before { content: "\e4e0"; } +.fa-child-dress::before { content: "\e59c"; } +.fa-child-reaching::before { content: "\e59d"; } +.fa-child-rifle::before { content: "\e4e0"; } +.fa-children::before { content: "\e4e1"; } +.fa-chimney::before { content: "\f78b"; } +.fa-chocolate-bar::before { content: "\e3e8"; } +.fa-chopsticks::before { content: "\e3f7"; } +.fa-church::before { content: "\f51d"; } +.fa-circle::before { content: "\f111"; } +.fa-circle-0::before { content: "\e0ed"; } +.fa-circle-1::before { content: "\e0ee"; } +.fa-circle-2::before { content: "\e0ef"; } +.fa-circle-3::before { content: "\e0f0"; } +.fa-circle-4::before { content: "\e0f1"; } +.fa-circle-5::before { content: "\e0f2"; } +.fa-circle-6::before { content: "\e0f3"; } +.fa-circle-7::before { content: "\e0f4"; } +.fa-circle-8::before { content: "\e0f5"; } +.fa-circle-9::before { content: "\e0f6"; } +.fa-circle-a::before { content: "\e0f7"; } +.fa-circle-ampersand::before { content: "\e0f8"; } +.fa-circle-arrow-down::before { content: "\f0ab"; } +.fa-circle-arrow-down-left::before { content: "\e0f9"; } +.fa-circle-arrow-down-right::before { content: "\e0fa"; } +.fa-circle-arrow-left::before { content: "\f0a8"; } +.fa-circle-arrow-right::before { content: "\f0a9"; } +.fa-circle-arrow-up::before { content: "\f0aa"; } +.fa-circle-arrow-up-left::before { content: "\e0fb"; } +.fa-circle-arrow-up-right::before { content: "\e0fc"; } +.fa-circle-b::before { content: "\e0fd"; } +.fa-circle-bolt::before { content: "\e0fe"; } +.fa-circle-book-open::before { content: "\e0ff"; } +.fa-circle-bookmark::before { content: "\e100"; } +.fa-circle-c::before { content: "\e101"; } +.fa-circle-calendar::before { content: "\e102"; } +.fa-circle-camera::before { content: "\e103"; } +.fa-circle-caret-down::before { content: "\f32d"; } +.fa-circle-caret-left::before { content: "\f32e"; } +.fa-circle-caret-right::before { content: "\f330"; } +.fa-circle-caret-up::before { content: "\f331"; } +.fa-circle-check::before { content: "\f058"; } +.fa-circle-chevron-down::before { content: "\f13a"; } +.fa-circle-chevron-left::before { content: "\f137"; } +.fa-circle-chevron-right::before { content: "\f138"; } +.fa-circle-chevron-up::before { content: "\f139"; } +.fa-circle-d::before { content: "\e104"; } +.fa-circle-dashed::before { content: "\e105"; } +.fa-circle-divide::before { content: "\e106"; } +.fa-circle-dollar::before { content: "\f2e8"; } +.fa-circle-dollar-to-slot::before { content: "\f4b9"; } +.fa-circle-dot::before { content: "\f192"; } +.fa-circle-down::before { content: "\f358"; } +.fa-circle-down-left::before { content: "\e107"; } +.fa-circle-down-right::before { content: "\e108"; } +.fa-circle-e::before { content: "\e109"; } +.fa-circle-ellipsis::before { content: "\e10a"; } +.fa-circle-ellipsis-vertical::before { content: "\e10b"; } +.fa-circle-envelope::before { content: "\e10c"; } +.fa-circle-euro::before { content: "\e5ce"; } +.fa-circle-exclamation::before { content: "\f06a"; } +.fa-circle-exclamation-check::before { content: "\e10d"; } +.fa-circle-f::before { content: "\e10e"; } +.fa-circle-g::before { content: "\e10f"; } +.fa-circle-h::before { content: "\f47e"; } +.fa-circle-half::before { content: "\e110"; } +.fa-circle-half-stroke::before { content: "\f042"; } +.fa-circle-heart::before { content: "\f4c7"; } +.fa-circle-i::before { content: "\e111"; } +.fa-circle-info::before { content: "\f05a"; } +.fa-circle-j::before { content: "\e112"; } +.fa-circle-k::before { content: "\e113"; } +.fa-circle-l::before { content: "\e114"; } +.fa-circle-left::before { content: "\f359"; } +.fa-circle-location-arrow::before { content: "\f602"; } +.fa-circle-m::before { content: "\e115"; } +.fa-circle-microphone::before { content: "\e116"; } +.fa-circle-microphone-lines::before { content: "\e117"; } +.fa-circle-minus::before { content: "\f056"; } +.fa-circle-n::before { content: "\e118"; } +.fa-circle-nodes::before { content: "\e4e2"; } +.fa-circle-notch::before { content: "\f1ce"; } +.fa-circle-o::before { content: "\e119"; } +.fa-circle-p::before { content: "\e11a"; } +.fa-circle-parking::before { content: "\f615"; } +.fa-circle-pause::before { content: "\f28b"; } +.fa-circle-phone::before { content: "\e11b"; } +.fa-circle-phone-flip::before { content: "\e11c"; } +.fa-circle-phone-hangup::before { content: "\e11d"; } +.fa-circle-play::before { content: "\f144"; } +.fa-circle-plus::before { content: "\f055"; } +.fa-circle-q::before { content: "\e11e"; } +.fa-circle-quarter::before { content: "\e11f"; } +.fa-circle-quarter-stroke::before { content: "\e5d3"; } +.fa-circle-quarters::before { content: "\e3f8"; } +.fa-circle-question::before { content: "\f059"; } +.fa-circle-r::before { content: "\e120"; } +.fa-circle-radiation::before { content: "\f7ba"; } +.fa-circle-right::before { content: "\f35a"; } +.fa-circle-s::before { content: "\e121"; } +.fa-circle-small::before { content: "\e122"; } +.fa-circle-sort::before { content: "\e030"; } +.fa-circle-sort-down::before { content: "\e031"; } +.fa-circle-sort-up::before { content: "\e032"; } +.fa-circle-star::before { content: "\e123"; } +.fa-circle-sterling::before { content: "\e5cf"; } +.fa-circle-stop::before { content: "\f28d"; } +.fa-circle-t::before { content: "\e124"; } +.fa-circle-three-quarters::before { content: "\e125"; } +.fa-circle-three-quarters-stroke::before { content: "\e5d4"; } +.fa-circle-trash::before { content: "\e126"; } +.fa-circle-u::before { content: "\e127"; } +.fa-circle-up::before { content: "\f35b"; } +.fa-circle-up-left::before { content: "\e128"; } +.fa-circle-up-right::before { content: "\e129"; } +.fa-circle-user::before { content: "\f2bd"; } +.fa-circle-v::before { content: "\e12a"; } +.fa-circle-video::before { content: "\e12b"; } +.fa-circle-w::before { content: "\e12c"; } +.fa-circle-waveform-lines::before { content: "\e12d"; } +.fa-circle-x::before { content: "\e12e"; } +.fa-circle-xmark::before { content: "\f057"; } +.fa-circle-y::before { content: "\e12f"; } +.fa-circle-yen::before { content: "\e5d0"; } +.fa-circle-z::before { content: "\e130"; } +.fa-circles-overlap::before { content: "\e600"; } +.fa-citrus::before { content: "\e2f4"; } +.fa-citrus-slice::before { content: "\e2f5"; } +.fa-city::before { content: "\f64f"; } +.fa-clapperboard::before { content: "\e131"; } +.fa-clapperboard-play::before { content: "\e132"; } +.fa-clarinet::before { content: "\f8ad"; } +.fa-claw-marks::before { content: "\f6c2"; } +.fa-clinic-medical::before { content: "\f7f2"; } +.fa-clipboard::before { content: "\f328"; } +.fa-clipboard-check::before { content: "\f46c"; } +.fa-clipboard-list::before { content: "\f46d"; } +.fa-clipboard-list-check::before { content: "\f737"; } +.fa-clipboard-medical::before { content: "\e133"; } +.fa-clipboard-prescription::before { content: "\f5e8"; } +.fa-clipboard-question::before { content: "\e4e3"; } +.fa-clipboard-user::before { content: "\f7f3"; } +.fa-clock::before { content: "\f017"; } +.fa-clock-desk::before { content: "\e134"; } +.fa-clock-eight::before { content: "\e345"; } +.fa-clock-eight-thirty::before { content: "\e346"; } +.fa-clock-eleven::before { content: "\e347"; } +.fa-clock-eleven-thirty::before { content: "\e348"; } +.fa-clock-five::before { content: "\e349"; } +.fa-clock-five-thirty::before { content: "\e34a"; } +.fa-clock-four::before { content: "\f017"; } +.fa-clock-four-thirty::before { content: "\e34b"; } +.fa-clock-nine::before { content: "\e34c"; } +.fa-clock-nine-thirty::before { content: "\e34d"; } +.fa-clock-one::before { content: "\e34e"; } +.fa-clock-one-thirty::before { content: "\e34f"; } +.fa-clock-rotate-left::before { content: "\f1da"; } +.fa-clock-seven::before { content: "\e350"; } +.fa-clock-seven-thirty::before { content: "\e351"; } +.fa-clock-six::before { content: "\e352"; } +.fa-clock-six-thirty::before { content: "\e353"; } +.fa-clock-ten::before { content: "\e354"; } +.fa-clock-ten-thirty::before { content: "\e355"; } +.fa-clock-three::before { content: "\e356"; } +.fa-clock-three-thirty::before { content: "\e357"; } +.fa-clock-twelve::before { content: "\e358"; } +.fa-clock-twelve-thirty::before { content: "\e359"; } +.fa-clock-two::before { content: "\e35a"; } +.fa-clock-two-thirty::before { content: "\e35b"; } +.fa-clone::before { content: "\f24d"; } +.fa-close::before { content: "\f00d"; } +.fa-closed-captioning::before { content: "\f20a"; } +.fa-closed-captioning-slash::before { content: "\e135"; } +.fa-clothes-hanger::before { content: "\e136"; } +.fa-cloud::before { content: "\f0c2"; } +.fa-cloud-arrow-down::before { content: "\f0ed"; } +.fa-cloud-arrow-up::before { content: "\f0ee"; } +.fa-cloud-binary::before { content: "\e601"; } +.fa-cloud-bolt::before { content: "\f76c"; } +.fa-cloud-bolt-moon::before { content: "\f76d"; } +.fa-cloud-bolt-sun::before { content: "\f76e"; } +.fa-cloud-check::before { content: "\e35c"; } +.fa-cloud-download::before { content: "\f0ed"; } +.fa-cloud-download-alt::before { content: "\f0ed"; } +.fa-cloud-drizzle::before { content: "\f738"; } +.fa-cloud-exclamation::before { content: "\e491"; } +.fa-cloud-fog::before { content: "\f74e"; } +.fa-cloud-hail::before { content: "\f739"; } +.fa-cloud-hail-mixed::before { content: "\f73a"; } +.fa-cloud-meatball::before { content: "\f73b"; } +.fa-cloud-minus::before { content: "\e35d"; } +.fa-cloud-moon::before { content: "\f6c3"; } +.fa-cloud-moon-rain::before { content: "\f73c"; } +.fa-cloud-music::before { content: "\f8ae"; } +.fa-cloud-plus::before { content: "\e35e"; } +.fa-cloud-question::before { content: "\e492"; } +.fa-cloud-rain::before { content: "\f73d"; } +.fa-cloud-rainbow::before { content: "\f73e"; } +.fa-cloud-showers::before { content: "\f73f"; } +.fa-cloud-showers-heavy::before { content: "\f740"; } +.fa-cloud-showers-water::before { content: "\e4e4"; } +.fa-cloud-slash::before { content: "\e137"; } +.fa-cloud-sleet::before { content: "\f741"; } +.fa-cloud-snow::before { content: "\f742"; } +.fa-cloud-sun::before { content: "\f6c4"; } +.fa-cloud-sun-rain::before { content: "\f743"; } +.fa-cloud-upload::before { content: "\f0ee"; } +.fa-cloud-upload-alt::before { content: "\f0ee"; } +.fa-cloud-word::before { content: "\e138"; } +.fa-cloud-xmark::before { content: "\e35f"; } +.fa-clouds::before { content: "\f744"; } +.fa-clouds-moon::before { content: "\f745"; } +.fa-clouds-sun::before { content: "\f746"; } +.fa-clover::before { content: "\e139"; } +.fa-club::before { content: "\f327"; } +.fa-cny::before { content: "\f157"; } +.fa-cocktail::before { content: "\f561"; } +.fa-coconut::before { content: "\e2f6"; } +.fa-code::before { content: "\f121"; } +.fa-code-branch::before { content: "\f126"; } +.fa-code-commit::before { content: "\f386"; } +.fa-code-compare::before { content: "\e13a"; } +.fa-code-fork::before { content: "\e13b"; } +.fa-code-merge::before { content: "\f387"; } +.fa-code-pull-request::before { content: "\e13c"; } +.fa-code-pull-request-closed::before { content: "\e3f9"; } +.fa-code-pull-request-draft::before { content: "\e3fa"; } +.fa-code-simple::before { content: "\e13d"; } +.fa-coffee::before { content: "\f0f4"; } +.fa-coffee-bean::before { content: "\e13e"; } +.fa-coffee-beans::before { content: "\e13f"; } +.fa-coffee-pot::before { content: "\e002"; } +.fa-coffee-togo::before { content: "\f6c5"; } +.fa-coffin::before { content: "\f6c6"; } +.fa-coffin-cross::before { content: "\e051"; } +.fa-cog::before { content: "\f013"; } +.fa-cogs::before { content: "\f085"; } +.fa-coin::before { content: "\f85c"; } +.fa-coin-blank::before { content: "\e3fb"; } +.fa-coin-front::before { content: "\e3fc"; } +.fa-coin-vertical::before { content: "\e3fd"; } +.fa-coins::before { content: "\f51e"; } +.fa-colon::before { content: "\3a"; } +.fa-colon-sign::before { content: "\e140"; } +.fa-columns::before { content: "\f0db"; } +.fa-columns-3::before { content: "\e361"; } +.fa-comet::before { content: "\e003"; } +.fa-comma::before { content: "\2c"; } +.fa-command::before { content: "\e142"; } +.fa-comment::before { content: "\f075"; } +.fa-comment-alt::before { content: "\f27a"; } +.fa-comment-alt-arrow-down::before { content: "\e1db"; } +.fa-comment-alt-arrow-up::before { content: "\e1dc"; } +.fa-comment-alt-captions::before { content: "\e1de"; } +.fa-comment-alt-check::before { content: "\f4a2"; } +.fa-comment-alt-dollar::before { content: "\f650"; } +.fa-comment-alt-dots::before { content: "\f4a3"; } +.fa-comment-alt-edit::before { content: "\f4a4"; } +.fa-comment-alt-exclamation::before { content: "\f4a5"; } +.fa-comment-alt-image::before { content: "\e1e0"; } +.fa-comment-alt-lines::before { content: "\f4a6"; } +.fa-comment-alt-medical::before { content: "\f7f4"; } +.fa-comment-alt-minus::before { content: "\f4a7"; } +.fa-comment-alt-music::before { content: "\f8af"; } +.fa-comment-alt-plus::before { content: "\f4a8"; } +.fa-comment-alt-quote::before { content: "\e1e4"; } +.fa-comment-alt-slash::before { content: "\f4a9"; } +.fa-comment-alt-smile::before { content: "\f4aa"; } +.fa-comment-alt-text::before { content: "\e1e6"; } +.fa-comment-alt-times::before { content: "\f4ab"; } +.fa-comment-arrow-down::before { content: "\e143"; } +.fa-comment-arrow-up::before { content: "\e144"; } +.fa-comment-arrow-up-right::before { content: "\e145"; } +.fa-comment-captions::before { content: "\e146"; } +.fa-comment-check::before { content: "\f4ac"; } +.fa-comment-code::before { content: "\e147"; } +.fa-comment-dollar::before { content: "\f651"; } +.fa-comment-dots::before { content: "\f4ad"; } +.fa-comment-edit::before { content: "\f4ae"; } +.fa-comment-exclamation::before { content: "\f4af"; } +.fa-comment-heart::before { content: "\e5c8"; } +.fa-comment-image::before { content: "\e148"; } +.fa-comment-lines::before { content: "\f4b0"; } +.fa-comment-medical::before { content: "\f7f5"; } +.fa-comment-middle::before { content: "\e149"; } +.fa-comment-middle-alt::before { content: "\e1e1"; } +.fa-comment-middle-top::before { content: "\e14a"; } +.fa-comment-middle-top-alt::before { content: "\e1e2"; } +.fa-comment-minus::before { content: "\f4b1"; } +.fa-comment-music::before { content: "\f8b0"; } +.fa-comment-pen::before { content: "\f4ae"; } +.fa-comment-plus::before { content: "\f4b2"; } +.fa-comment-question::before { content: "\e14b"; } +.fa-comment-quote::before { content: "\e14c"; } +.fa-comment-slash::before { content: "\f4b3"; } +.fa-comment-smile::before { content: "\f4b4"; } +.fa-comment-sms::before { content: "\f7cd"; } +.fa-comment-text::before { content: "\e14d"; } +.fa-comment-times::before { content: "\f4b5"; } +.fa-comment-xmark::before { content: "\f4b5"; } +.fa-commenting::before { content: "\f4ad"; } +.fa-comments::before { content: "\f086"; } +.fa-comments-alt::before { content: "\f4b6"; } +.fa-comments-alt-dollar::before { content: "\f652"; } +.fa-comments-dollar::before { content: "\f653"; } +.fa-comments-question::before { content: "\e14e"; } +.fa-comments-question-check::before { content: "\e14f"; } +.fa-compact-disc::before { content: "\f51f"; } +.fa-compass::before { content: "\f14e"; } +.fa-compass-drafting::before { content: "\f568"; } +.fa-compass-slash::before { content: "\f5e9"; } +.fa-compress::before { content: "\f066"; } +.fa-compress-alt::before { content: "\f422"; } +.fa-compress-arrows::before { content: "\e0a5"; } +.fa-compress-arrows-alt::before { content: "\f78c"; } +.fa-compress-wide::before { content: "\f326"; } +.fa-computer::before { content: "\e4e5"; } +.fa-computer-classic::before { content: "\f8b1"; } +.fa-computer-mouse::before { content: "\f8cc"; } +.fa-computer-mouse-scrollwheel::before { content: "\f8cd"; } +.fa-computer-speaker::before { content: "\f8b2"; } +.fa-concierge-bell::before { content: "\f562"; } +.fa-construction::before { content: "\f85d"; } +.fa-contact-book::before { content: "\f2b9"; } +.fa-contact-card::before { content: "\f2bb"; } +.fa-container-storage::before { content: "\f4b7"; } +.fa-conveyor-belt::before { content: "\f46e"; } +.fa-conveyor-belt-alt::before { content: "\f46f"; } +.fa-conveyor-belt-arm::before { content: "\e5f8"; } +.fa-conveyor-belt-boxes::before { content: "\f46f"; } +.fa-conveyor-belt-empty::before { content: "\e150"; } +.fa-cookie::before { content: "\f563"; } +.fa-cookie-bite::before { content: "\f564"; } +.fa-copy::before { content: "\f0c5"; } +.fa-copyright::before { content: "\f1f9"; } +.fa-corn::before { content: "\f6c7"; } +.fa-corner::before { content: "\e3fe"; } +.fa-couch::before { content: "\f4b8"; } +.fa-couch-small::before { content: "\f4cc"; } +.fa-cow::before { content: "\f6c8"; } +.fa-cowbell::before { content: "\f8b3"; } +.fa-cowbell-circle-plus::before { content: "\f8b4"; } +.fa-cowbell-more::before { content: "\f8b4"; } +.fa-crab::before { content: "\e3ff"; } +.fa-crate-apple::before { content: "\f6b1"; } +.fa-crate-empty::before { content: "\e151"; } +.fa-credit-card::before { content: "\f09d"; } +.fa-credit-card-alt::before { content: "\f09d"; } +.fa-credit-card-blank::before { content: "\f389"; } +.fa-credit-card-front::before { content: "\f38a"; } +.fa-creemee::before { content: "\e400"; } +.fa-cricket::before { content: "\f449"; } +.fa-cricket-bat-ball::before { content: "\f449"; } +.fa-croissant::before { content: "\f7f6"; } +.fa-crop::before { content: "\f125"; } +.fa-crop-alt::before { content: "\f565"; } +.fa-crop-simple::before { content: "\f565"; } +.fa-cross::before { content: "\f654"; } +.fa-crosshairs::before { content: "\f05b"; } +.fa-crosshairs-simple::before { content: "\e59f"; } +.fa-crow::before { content: "\f520"; } +.fa-crown::before { content: "\f521"; } +.fa-crutch::before { content: "\f7f7"; } +.fa-crutches::before { content: "\f7f8"; } +.fa-cruzeiro-sign::before { content: "\e152"; } +.fa-crystal-ball::before { content: "\e362"; } +.fa-cube::before { content: "\f1b2"; } +.fa-cubes::before { content: "\f1b3"; } +.fa-cubes-stacked::before { content: "\e4e6"; } +.fa-cucumber::before { content: "\e401"; } +.fa-cup-straw::before { content: "\e363"; } +.fa-cup-straw-swoosh::before { content: "\e364"; } +.fa-cup-togo::before { content: "\f6c5"; } +.fa-cupcake::before { content: "\e402"; } +.fa-curling::before { content: "\f44a"; } +.fa-curling-stone::before { content: "\f44a"; } +.fa-custard::before { content: "\e403"; } +.fa-cut::before { content: "\f0c4"; } +.fa-cutlery::before { content: "\f2e7"; } +.fa-d::before { content: "\44"; } +.fa-dagger::before { content: "\f6cb"; } +.fa-dash::before { content: "\e404"; } +.fa-dashboard::before { content: "\f624"; } +.fa-database::before { content: "\f1c0"; } +.fa-deaf::before { content: "\f2a4"; } +.fa-deafness::before { content: "\f2a4"; } +.fa-debug::before { content: "\f7f9"; } +.fa-dedent::before { content: "\f03b"; } +.fa-deer::before { content: "\f78e"; } +.fa-deer-rudolph::before { content: "\f78f"; } +.fa-delete-left::before { content: "\f55a"; } +.fa-delete-right::before { content: "\e154"; } +.fa-democrat::before { content: "\f747"; } +.fa-desktop::before { content: "\f390"; } +.fa-desktop-alt::before { content: "\f390"; } +.fa-desktop-arrow-down::before { content: "\e155"; } +.fa-desktop-code::before { content: "\e165"; } +.fa-desktop-medical::before { content: "\e166"; } +.fa-desktop-slash::before { content: "\e2fa"; } +.fa-dewpoint::before { content: "\f748"; } +.fa-dharmachakra::before { content: "\f655"; } +.fa-diagnoses::before { content: "\f470"; } +.fa-diagram-cells::before { content: "\e475"; } +.fa-diagram-lean-canvas::before { content: "\e156"; } +.fa-diagram-nested::before { content: "\e157"; } +.fa-diagram-next::before { content: "\e476"; } +.fa-diagram-predecessor::before { content: "\e477"; } +.fa-diagram-previous::before { content: "\e478"; } +.fa-diagram-project::before { content: "\f542"; } +.fa-diagram-sankey::before { content: "\e158"; } +.fa-diagram-subtask::before { content: "\e479"; } +.fa-diagram-successor::before { content: "\e47a"; } +.fa-diagram-venn::before { content: "\e15a"; } +.fa-dial::before { content: "\e15b"; } +.fa-dial-high::before { content: "\e15c"; } +.fa-dial-low::before { content: "\e15d"; } +.fa-dial-max::before { content: "\e15e"; } +.fa-dial-med::before { content: "\e15f"; } +.fa-dial-med-high::before { content: "\e15b"; } +.fa-dial-med-low::before { content: "\e160"; } +.fa-dial-min::before { content: "\e161"; } +.fa-dial-off::before { content: "\e162"; } +.fa-diamond::before { content: "\f219"; } +.fa-diamond-exclamation::before { content: "\e405"; } +.fa-diamond-half::before { content: "\e5b7"; } +.fa-diamond-half-stroke::before { content: "\e5b8"; } +.fa-diamond-turn-right::before { content: "\f5eb"; } +.fa-dice::before { content: "\f522"; } +.fa-dice-d10::before { content: "\f6cd"; } +.fa-dice-d12::before { content: "\f6ce"; } +.fa-dice-d20::before { content: "\f6cf"; } +.fa-dice-d4::before { content: "\f6d0"; } +.fa-dice-d6::before { content: "\f6d1"; } +.fa-dice-d8::before { content: "\f6d2"; } +.fa-dice-five::before { content: "\f523"; } +.fa-dice-four::before { content: "\f524"; } +.fa-dice-one::before { content: "\f525"; } +.fa-dice-six::before { content: "\f526"; } +.fa-dice-three::before { content: "\f527"; } +.fa-dice-two::before { content: "\f528"; } +.fa-digging::before { content: "\f85e"; } +.fa-digital-tachograph::before { content: "\f566"; } +.fa-dinosaur::before { content: "\e5fe"; } +.fa-diploma::before { content: "\f5ea"; } +.fa-directions::before { content: "\f5eb"; } +.fa-disc-drive::before { content: "\f8b5"; } +.fa-disease::before { content: "\f7fa"; } +.fa-display::before { content: "\e163"; } +.fa-display-arrow-down::before { content: "\e164"; } +.fa-display-chart-up::before { content: "\e5e3"; } +.fa-display-chart-up-circle-currency::before { content: "\e5e5"; } +.fa-display-chart-up-circle-dollar::before { content: "\e5e6"; } +.fa-display-code::before { content: "\e165"; } +.fa-display-medical::before { content: "\e166"; } +.fa-display-slash::before { content: "\e2fa"; } +.fa-distribute-spacing-horizontal::before { content: "\e365"; } +.fa-distribute-spacing-vertical::before { content: "\e366"; } +.fa-ditto::before { content: "\22"; } +.fa-divide::before { content: "\f529"; } +.fa-dizzy::before { content: "\f567"; } +.fa-dna::before { content: "\f471"; } +.fa-do-not-enter::before { content: "\f5ec"; } +.fa-dog::before { content: "\f6d3"; } +.fa-dog-leashed::before { content: "\f6d4"; } +.fa-dollar::before { content: "\24"; } +.fa-dollar-circle::before { content: "\f2e8"; } +.fa-dollar-sign::before { content: "\24"; } +.fa-dollar-square::before { content: "\f2e9"; } +.fa-dolly::before { content: "\f472"; } +.fa-dolly-box::before { content: "\f472"; } +.fa-dolly-empty::before { content: "\f473"; } +.fa-dolly-flatbed::before { content: "\f474"; } +.fa-dolly-flatbed-alt::before { content: "\f475"; } +.fa-dolly-flatbed-empty::before { content: "\f476"; } +.fa-dolphin::before { content: "\e168"; } +.fa-donate::before { content: "\f4b9"; } +.fa-dong-sign::before { content: "\e169"; } +.fa-donut::before { content: "\e406"; } +.fa-door-closed::before { content: "\f52a"; } +.fa-door-open::before { content: "\f52b"; } +.fa-dot-circle::before { content: "\f192"; } +.fa-doughnut::before { content: "\e406"; } +.fa-dove::before { content: "\f4ba"; } +.fa-down::before { content: "\f354"; } +.fa-down-from-dotted-line::before { content: "\e407"; } +.fa-down-from-line::before { content: "\f349"; } +.fa-down-left::before { content: "\e16a"; } +.fa-down-left-and-up-right-to-center::before { content: "\f422"; } +.fa-down-long::before { content: "\f309"; } +.fa-down-right::before { content: "\e16b"; } +.fa-down-to-bracket::before { content: "\e4e7"; } +.fa-down-to-dotted-line::before { content: "\e408"; } +.fa-down-to-line::before { content: "\f34a"; } +.fa-download::before { content: "\f019"; } +.fa-drafting-compass::before { content: "\f568"; } +.fa-dragon::before { content: "\f6d5"; } +.fa-draw-circle::before { content: "\f5ed"; } +.fa-draw-polygon::before { content: "\f5ee"; } +.fa-draw-square::before { content: "\f5ef"; } +.fa-dreidel::before { content: "\f792"; } +.fa-drivers-license::before { content: "\f2c2"; } +.fa-drone::before { content: "\f85f"; } +.fa-drone-alt::before { content: "\f860"; } +.fa-drone-front::before { content: "\f860"; } +.fa-droplet::before { content: "\f043"; } +.fa-droplet-degree::before { content: "\f748"; } +.fa-droplet-percent::before { content: "\f750"; } +.fa-droplet-slash::before { content: "\f5c7"; } +.fa-drum::before { content: "\f569"; } +.fa-drum-steelpan::before { content: "\f56a"; } +.fa-drumstick::before { content: "\f6d6"; } +.fa-drumstick-bite::before { content: "\f6d7"; } +.fa-dryer::before { content: "\f861"; } +.fa-dryer-alt::before { content: "\f862"; } +.fa-dryer-heat::before { content: "\f862"; } +.fa-duck::before { content: "\f6d8"; } +.fa-dumbbell::before { content: "\f44b"; } +.fa-dumpster::before { content: "\f793"; } +.fa-dumpster-fire::before { content: "\f794"; } +.fa-dungeon::before { content: "\f6d9"; } +.fa-e::before { content: "\45"; } +.fa-ear::before { content: "\f5f0"; } +.fa-ear-deaf::before { content: "\f2a4"; } +.fa-ear-listen::before { content: "\f2a2"; } +.fa-ear-muffs::before { content: "\f795"; } +.fa-earth::before { content: "\f57d"; } +.fa-earth-africa::before { content: "\f57c"; } +.fa-earth-america::before { content: "\f57d"; } +.fa-earth-americas::before { content: "\f57d"; } +.fa-earth-asia::before { content: "\f57e"; } +.fa-earth-europe::before { content: "\f7a2"; } +.fa-earth-oceania::before { content: "\e47b"; } +.fa-eclipse::before { content: "\f749"; } +.fa-eclipse-alt::before { content: "\f74a"; } +.fa-edit::before { content: "\f044"; } +.fa-egg::before { content: "\f7fb"; } +.fa-egg-fried::before { content: "\f7fc"; } +.fa-eggplant::before { content: "\e16c"; } +.fa-eject::before { content: "\f052"; } +.fa-elephant::before { content: "\f6da"; } +.fa-elevator::before { content: "\e16d"; } +.fa-ellipsis::before { content: "\f141"; } +.fa-ellipsis-h::before { content: "\f141"; } +.fa-ellipsis-h-alt::before { content: "\f39b"; } +.fa-ellipsis-stroke::before { content: "\f39b"; } +.fa-ellipsis-stroke-vertical::before { content: "\f39c"; } +.fa-ellipsis-v::before { content: "\f142"; } +.fa-ellipsis-v-alt::before { content: "\f39c"; } +.fa-ellipsis-vertical::before { content: "\f142"; } +.fa-empty-set::before { content: "\f656"; } +.fa-engine::before { content: "\e16e"; } +.fa-engine-exclamation::before { content: "\f5f2"; } +.fa-engine-warning::before { content: "\f5f2"; } +.fa-envelope::before { content: "\f0e0"; } +.fa-envelope-badge::before { content: "\e16f"; } +.fa-envelope-circle::before { content: "\e10c"; } +.fa-envelope-circle-check::before { content: "\e4e8"; } +.fa-envelope-dot::before { content: "\e16f"; } +.fa-envelope-open::before { content: "\f2b6"; } +.fa-envelope-open-dollar::before { content: "\f657"; } +.fa-envelope-open-text::before { content: "\f658"; } +.fa-envelope-square::before { content: "\f199"; } +.fa-envelopes::before { content: "\e170"; } +.fa-envelopes-bulk::before { content: "\f674"; } +.fa-equals::before { content: "\3d"; } +.fa-eraser::before { content: "\f12d"; } +.fa-escalator::before { content: "\e171"; } +.fa-ethernet::before { content: "\f796"; } +.fa-eur::before { content: "\f153"; } +.fa-euro::before { content: "\f153"; } +.fa-euro-sign::before { content: "\f153"; } +.fa-exchange::before { content: "\f0ec"; } +.fa-exchange-alt::before { content: "\f362"; } +.fa-exclamation::before { content: "\21"; } +.fa-exclamation-circle::before { content: "\f06a"; } +.fa-exclamation-square::before { content: "\f321"; } +.fa-exclamation-triangle::before { content: "\f071"; } +.fa-expand::before { content: "\f065"; } +.fa-expand-alt::before { content: "\f424"; } +.fa-expand-arrows::before { content: "\f31d"; } +.fa-expand-arrows-alt::before { content: "\f31e"; } +.fa-expand-wide::before { content: "\f320"; } +.fa-exploding-head::before { content: "\e2fe"; } +.fa-explosion::before { content: "\e4e9"; } +.fa-external-link::before { content: "\f08e"; } +.fa-external-link-alt::before { content: "\f35d"; } +.fa-external-link-square::before { content: "\f14c"; } +.fa-external-link-square-alt::before { content: "\f360"; } +.fa-eye::before { content: "\f06e"; } +.fa-eye-dropper::before { content: "\f1fb"; } +.fa-eye-dropper-empty::before { content: "\f1fb"; } +.fa-eye-dropper-full::before { content: "\e172"; } +.fa-eye-dropper-half::before { content: "\e173"; } +.fa-eye-evil::before { content: "\f6db"; } +.fa-eye-low-vision::before { content: "\f2a8"; } +.fa-eye-slash::before { content: "\f070"; } +.fa-eyedropper::before { content: "\f1fb"; } +.fa-eyes::before { content: "\e367"; } +.fa-f::before { content: "\46"; } +.fa-face-angry::before { content: "\f556"; } +.fa-face-angry-horns::before { content: "\e368"; } +.fa-face-anguished::before { content: "\e369"; } +.fa-face-anxious-sweat::before { content: "\e36a"; } +.fa-face-astonished::before { content: "\e36b"; } +.fa-face-awesome::before { content: "\e409"; } +.fa-face-beam-hand-over-mouth::before { content: "\e47c"; } +.fa-face-clouds::before { content: "\e47d"; } +.fa-face-confounded::before { content: "\e36c"; } +.fa-face-confused::before { content: "\e36d"; } +.fa-face-cowboy-hat::before { content: "\e36e"; } +.fa-face-diagonal-mouth::before { content: "\e47e"; } +.fa-face-disappointed::before { content: "\e36f"; } +.fa-face-disguise::before { content: "\e370"; } +.fa-face-dizzy::before { content: "\f567"; } +.fa-face-dotted::before { content: "\e47f"; } +.fa-face-downcast-sweat::before { content: "\e371"; } +.fa-face-drooling::before { content: "\e372"; } +.fa-face-exhaling::before { content: "\e480"; } +.fa-face-explode::before { content: "\e2fe"; } +.fa-face-expressionless::before { content: "\e373"; } +.fa-face-eyes-xmarks::before { content: "\e374"; } +.fa-face-fearful::before { content: "\e375"; } +.fa-face-flushed::before { content: "\f579"; } +.fa-face-frown::before { content: "\f119"; } +.fa-face-frown-open::before { content: "\f57a"; } +.fa-face-frown-slight::before { content: "\e376"; } +.fa-face-glasses::before { content: "\e377"; } +.fa-face-grimace::before { content: "\f57f"; } +.fa-face-grin::before { content: "\f580"; } +.fa-face-grin-beam::before { content: "\f582"; } +.fa-face-grin-beam-sweat::before { content: "\f583"; } +.fa-face-grin-hearts::before { content: "\f584"; } +.fa-face-grin-squint::before { content: "\f585"; } +.fa-face-grin-squint-tears::before { content: "\f586"; } +.fa-face-grin-stars::before { content: "\f587"; } +.fa-face-grin-tears::before { content: "\f588"; } +.fa-face-grin-tongue::before { content: "\f589"; } +.fa-face-grin-tongue-squint::before { content: "\f58a"; } +.fa-face-grin-tongue-wink::before { content: "\f58b"; } +.fa-face-grin-wide::before { content: "\f581"; } +.fa-face-grin-wink::before { content: "\f58c"; } +.fa-face-hand-over-mouth::before { content: "\e378"; } +.fa-face-hand-peeking::before { content: "\e481"; } +.fa-face-hand-yawn::before { content: "\e379"; } +.fa-face-head-bandage::before { content: "\e37a"; } +.fa-face-holding-back-tears::before { content: "\e482"; } +.fa-face-hushed::before { content: "\e37b"; } +.fa-face-icicles::before { content: "\e37c"; } +.fa-face-kiss::before { content: "\f596"; } +.fa-face-kiss-beam::before { content: "\f597"; } +.fa-face-kiss-closed-eyes::before { content: "\e37d"; } +.fa-face-kiss-wink-heart::before { content: "\f598"; } +.fa-face-laugh::before { content: "\f599"; } +.fa-face-laugh-beam::before { content: "\f59a"; } +.fa-face-laugh-squint::before { content: "\f59b"; } +.fa-face-laugh-wink::before { content: "\f59c"; } +.fa-face-lying::before { content: "\e37e"; } +.fa-face-mask::before { content: "\e37f"; } +.fa-face-meh::before { content: "\f11a"; } +.fa-face-meh-blank::before { content: "\f5a4"; } +.fa-face-melting::before { content: "\e483"; } +.fa-face-monocle::before { content: "\e380"; } +.fa-face-nauseated::before { content: "\e381"; } +.fa-face-nose-steam::before { content: "\e382"; } +.fa-face-party::before { content: "\e383"; } +.fa-face-pensive::before { content: "\e384"; } +.fa-face-persevering::before { content: "\e385"; } +.fa-face-pleading::before { content: "\e386"; } +.fa-face-pouting::before { content: "\e387"; } +.fa-face-raised-eyebrow::before { content: "\e388"; } +.fa-face-relieved::before { content: "\e389"; } +.fa-face-rolling-eyes::before { content: "\f5a5"; } +.fa-face-sad-cry::before { content: "\f5b3"; } +.fa-face-sad-sweat::before { content: "\e38a"; } +.fa-face-sad-tear::before { content: "\f5b4"; } +.fa-face-saluting::before { content: "\e484"; } +.fa-face-scream::before { content: "\e38b"; } +.fa-face-shush::before { content: "\e38c"; } +.fa-face-sleeping::before { content: "\e38d"; } +.fa-face-sleepy::before { content: "\e38e"; } +.fa-face-smile::before { content: "\f118"; } +.fa-face-smile-beam::before { content: "\f5b8"; } +.fa-face-smile-halo::before { content: "\e38f"; } +.fa-face-smile-hearts::before { content: "\e390"; } +.fa-face-smile-horns::before { content: "\e391"; } +.fa-face-smile-plus::before { content: "\f5b9"; } +.fa-face-smile-relaxed::before { content: "\e392"; } +.fa-face-smile-tear::before { content: "\e393"; } +.fa-face-smile-tongue::before { content: "\e394"; } +.fa-face-smile-upside-down::before { content: "\e395"; } +.fa-face-smile-wink::before { content: "\f4da"; } +.fa-face-smiling-hands::before { content: "\e396"; } +.fa-face-smirking::before { content: "\e397"; } +.fa-face-spiral-eyes::before { content: "\e485"; } +.fa-face-sunglasses::before { content: "\e398"; } +.fa-face-surprise::before { content: "\f5c2"; } +.fa-face-swear::before { content: "\e399"; } +.fa-face-thermometer::before { content: "\e39a"; } +.fa-face-thinking::before { content: "\e39b"; } +.fa-face-tired::before { content: "\f5c8"; } +.fa-face-tissue::before { content: "\e39c"; } +.fa-face-tongue-money::before { content: "\e39d"; } +.fa-face-tongue-sweat::before { content: "\e39e"; } +.fa-face-unamused::before { content: "\e39f"; } +.fa-face-viewfinder::before { content: "\e2ff"; } +.fa-face-vomit::before { content: "\e3a0"; } +.fa-face-weary::before { content: "\e3a1"; } +.fa-face-woozy::before { content: "\e3a2"; } +.fa-face-worried::before { content: "\e3a3"; } +.fa-face-zany::before { content: "\e3a4"; } +.fa-face-zipper::before { content: "\e3a5"; } +.fa-falafel::before { content: "\e40a"; } +.fa-family::before { content: "\e300"; } +.fa-family-dress::before { content: "\e301"; } +.fa-family-pants::before { content: "\e302"; } +.fa-fan::before { content: "\f863"; } +.fa-fan-table::before { content: "\e004"; } +.fa-farm::before { content: "\f864"; } +.fa-fast-backward::before { content: "\f049"; } +.fa-fast-forward::before { content: "\f050"; } +.fa-faucet::before { content: "\e005"; } +.fa-faucet-drip::before { content: "\e006"; } +.fa-fax::before { content: "\f1ac"; } +.fa-feather::before { content: "\f52d"; } +.fa-feather-alt::before { content: "\f56b"; } +.fa-feather-pointed::before { content: "\f56b"; } +.fa-feed::before { content: "\f09e"; } +.fa-female::before { content: "\f182"; } +.fa-fence::before { content: "\e303"; } +.fa-ferris-wheel::before { content: "\e174"; } +.fa-ferry::before { content: "\e4ea"; } +.fa-field-hockey::before { content: "\f44c"; } +.fa-field-hockey-stick-ball::before { content: "\f44c"; } +.fa-fighter-jet::before { content: "\f0fb"; } +.fa-file::before { content: "\f15b"; } +.fa-file-alt::before { content: "\f15c"; } +.fa-file-archive::before { content: "\f1c6"; } +.fa-file-arrow-down::before { content: "\f56d"; } +.fa-file-arrow-up::before { content: "\f574"; } +.fa-file-audio::before { content: "\f1c7"; } +.fa-file-award::before { content: "\f5f3"; } +.fa-file-binary::before { content: "\e175"; } +.fa-file-caret-down::before { content: "\e429"; } +.fa-file-caret-up::before { content: "\e42a"; } +.fa-file-certificate::before { content: "\f5f3"; } +.fa-file-chart-column::before { content: "\f659"; } +.fa-file-chart-line::before { content: "\f659"; } +.fa-file-chart-pie::before { content: "\f65a"; } +.fa-file-check::before { content: "\f316"; } +.fa-file-circle-check::before { content: "\e5a0"; } +.fa-file-circle-exclamation::before { content: "\e4eb"; } +.fa-file-circle-info::before { content: "\e493"; } +.fa-file-circle-minus::before { content: "\e4ed"; } +.fa-file-circle-plus::before { content: "\e494"; } +.fa-file-circle-question::before { content: "\e4ef"; } +.fa-file-circle-xmark::before { content: "\e5a1"; } +.fa-file-clipboard::before { content: "\f0ea"; } +.fa-file-code::before { content: "\f1c9"; } +.fa-file-contract::before { content: "\f56c"; } +.fa-file-csv::before { content: "\f6dd"; } +.fa-file-dashed-line::before { content: "\f877"; } +.fa-file-doc::before { content: "\e5ed"; } +.fa-file-download::before { content: "\f56d"; } +.fa-file-edit::before { content: "\f31c"; } +.fa-file-excel::before { content: "\f1c3"; } +.fa-file-exclamation::before { content: "\f31a"; } +.fa-file-export::before { content: "\f56e"; } +.fa-file-heart::before { content: "\e176"; } +.fa-file-image::before { content: "\f1c5"; } +.fa-file-import::before { content: "\f56f"; } +.fa-file-invoice::before { content: "\f570"; } +.fa-file-invoice-dollar::before { content: "\f571"; } +.fa-file-lines::before { content: "\f15c"; } +.fa-file-lock::before { content: "\e3a6"; } +.fa-file-magnifying-glass::before { content: "\f865"; } +.fa-file-medical::before { content: "\f477"; } +.fa-file-medical-alt::before { content: "\f478"; } +.fa-file-minus::before { content: "\f318"; } +.fa-file-music::before { content: "\f8b6"; } +.fa-file-pdf::before { content: "\f1c1"; } +.fa-file-pen::before { content: "\f31c"; } +.fa-file-plus::before { content: "\f319"; } +.fa-file-plus-minus::before { content: "\e177"; } +.fa-file-powerpoint::before { content: "\f1c4"; } +.fa-file-prescription::before { content: "\f572"; } +.fa-file-search::before { content: "\f865"; } +.fa-file-shield::before { content: "\e4f0"; } +.fa-file-signature::before { content: "\f573"; } +.fa-file-slash::before { content: "\e3a7"; } +.fa-file-spreadsheet::before { content: "\f65b"; } +.fa-file-text::before { content: "\f15c"; } +.fa-file-times::before { content: "\f317"; } +.fa-file-upload::before { content: "\f574"; } +.fa-file-user::before { content: "\f65c"; } +.fa-file-video::before { content: "\f1c8"; } +.fa-file-waveform::before { content: "\f478"; } +.fa-file-word::before { content: "\f1c2"; } +.fa-file-xmark::before { content: "\f317"; } +.fa-file-zip::before { content: "\e5ee"; } +.fa-file-zipper::before { content: "\f1c6"; } +.fa-files::before { content: "\e178"; } +.fa-files-medical::before { content: "\f7fd"; } +.fa-fill::before { content: "\f575"; } +.fa-fill-drip::before { content: "\f576"; } +.fa-film::before { content: "\f008"; } +.fa-film-alt::before { content: "\f3a0"; } +.fa-film-canister::before { content: "\f8b7"; } +.fa-film-cannister::before { content: "\f8b7"; } +.fa-film-simple::before { content: "\f3a0"; } +.fa-film-slash::before { content: "\e179"; } +.fa-films::before { content: "\e17a"; } +.fa-filter::before { content: "\f0b0"; } +.fa-filter-circle-dollar::before { content: "\f662"; } +.fa-filter-circle-xmark::before { content: "\e17b"; } +.fa-filter-list::before { content: "\e17c"; } +.fa-filter-slash::before { content: "\e17d"; } +.fa-filters::before { content: "\e17e"; } +.fa-fingerprint::before { content: "\f577"; } +.fa-fire::before { content: "\f06d"; } +.fa-fire-alt::before { content: "\f7e4"; } +.fa-fire-burner::before { content: "\e4f1"; } +.fa-fire-extinguisher::before { content: "\f134"; } +.fa-fire-flame::before { content: "\f6df"; } +.fa-fire-flame-curved::before { content: "\f7e4"; } +.fa-fire-flame-simple::before { content: "\f46a"; } +.fa-fire-hydrant::before { content: "\e17f"; } +.fa-fire-smoke::before { content: "\f74b"; } +.fa-fireplace::before { content: "\f79a"; } +.fa-firewall::before { content: "\e3dc"; } +.fa-first-aid::before { content: "\f479"; } +.fa-fish::before { content: "\f578"; } +.fa-fish-bones::before { content: "\e304"; } +.fa-fish-cooked::before { content: "\f7fe"; } +.fa-fish-fins::before { content: "\e4f2"; } +.fa-fishing-rod::before { content: "\e3a8"; } +.fa-fist-raised::before { content: "\f6de"; } +.fa-flag::before { content: "\f024"; } +.fa-flag-alt::before { content: "\f74c"; } +.fa-flag-checkered::before { content: "\f11e"; } +.fa-flag-pennant::before { content: "\f456"; } +.fa-flag-swallowtail::before { content: "\f74c"; } +.fa-flag-usa::before { content: "\f74d"; } +.fa-flame::before { content: "\f6df"; } +.fa-flashlight::before { content: "\f8b8"; } +.fa-flask::before { content: "\f0c3"; } +.fa-flask-gear::before { content: "\e5f1"; } +.fa-flask-poison::before { content: "\f6e0"; } +.fa-flask-potion::before { content: "\f6e1"; } +.fa-flask-round-poison::before { content: "\f6e0"; } +.fa-flask-round-potion::before { content: "\f6e1"; } +.fa-flask-vial::before { content: "\e4f3"; } +.fa-flatbread::before { content: "\e40b"; } +.fa-flatbread-stuffed::before { content: "\e40c"; } +.fa-floppy-disk::before { content: "\f0c7"; } +.fa-floppy-disk-circle-arrow-right::before { content: "\e180"; } +.fa-floppy-disk-circle-xmark::before { content: "\e181"; } +.fa-floppy-disk-pen::before { content: "\e182"; } +.fa-floppy-disk-times::before { content: "\e181"; } +.fa-floppy-disks::before { content: "\e183"; } +.fa-florin-sign::before { content: "\e184"; } +.fa-flower::before { content: "\f7ff"; } +.fa-flower-daffodil::before { content: "\f800"; } +.fa-flower-tulip::before { content: "\f801"; } +.fa-flushed::before { content: "\f579"; } +.fa-flute::before { content: "\f8b9"; } +.fa-flux-capacitor::before { content: "\f8ba"; } +.fa-flying-disc::before { content: "\e3a9"; } +.fa-fog::before { content: "\f74e"; } +.fa-folder::before { content: "\f07b"; } +.fa-folder-arrow-down::before { content: "\e053"; } +.fa-folder-arrow-up::before { content: "\e054"; } +.fa-folder-blank::before { content: "\f07b"; } +.fa-folder-bookmark::before { content: "\e186"; } +.fa-folder-closed::before { content: "\e185"; } +.fa-folder-cog::before { content: "\e187"; } +.fa-folder-download::before { content: "\e053"; } +.fa-folder-gear::before { content: "\e187"; } +.fa-folder-grid::before { content: "\e188"; } +.fa-folder-heart::before { content: "\e189"; } +.fa-folder-image::before { content: "\e18a"; } +.fa-folder-magnifying-glass::before { content: "\e18b"; } +.fa-folder-medical::before { content: "\e18c"; } +.fa-folder-minus::before { content: "\f65d"; } +.fa-folder-music::before { content: "\e18d"; } +.fa-folder-open::before { content: "\f07c"; } +.fa-folder-plus::before { content: "\f65e"; } +.fa-folder-search::before { content: "\e18b"; } +.fa-folder-times::before { content: "\f65f"; } +.fa-folder-tree::before { content: "\f802"; } +.fa-folder-upload::before { content: "\e054"; } +.fa-folder-user::before { content: "\e18e"; } +.fa-folder-xmark::before { content: "\f65f"; } +.fa-folders::before { content: "\f660"; } +.fa-fondue-pot::before { content: "\e40d"; } +.fa-font::before { content: "\f031"; } +.fa-font-awesome::before { content: "\f2b4"; } +.fa-font-awesome-flag::before { content: "\f2b4"; } +.fa-font-awesome-logo-full::before { content: "\f2b4"; } +.fa-font-case::before { content: "\f866"; } +.fa-football::before { content: "\f44e"; } +.fa-football-ball::before { content: "\f44e"; } +.fa-football-helmet::before { content: "\f44f"; } +.fa-fork::before { content: "\f2e3"; } +.fa-fork-knife::before { content: "\f2e6"; } +.fa-forklift::before { content: "\f47a"; } +.fa-fort::before { content: "\e486"; } +.fa-forward::before { content: "\f04e"; } +.fa-forward-fast::before { content: "\f050"; } +.fa-forward-step::before { content: "\f051"; } +.fa-fragile::before { content: "\f4bb"; } +.fa-frame::before { content: "\e495"; } +.fa-franc-sign::before { content: "\e18f"; } +.fa-french-fries::before { content: "\f803"; } +.fa-frog::before { content: "\f52e"; } +.fa-frosty-head::before { content: "\f79b"; } +.fa-frown::before { content: "\f119"; } +.fa-frown-open::before { content: "\f57a"; } +.fa-function::before { content: "\f661"; } +.fa-funnel-dollar::before { content: "\f662"; } +.fa-futbol::before { content: "\f1e3"; } +.fa-futbol-ball::before { content: "\f1e3"; } +.fa-g::before { content: "\47"; } +.fa-galaxy::before { content: "\e008"; } +.fa-gallery-thumbnails::before { content: "\e3aa"; } +.fa-game-board::before { content: "\f867"; } +.fa-game-board-alt::before { content: "\f868"; } +.fa-game-board-simple::before { content: "\f868"; } +.fa-game-console-handheld::before { content: "\f8bb"; } +.fa-game-console-handheld-crank::before { content: "\e5b9"; } +.fa-gamepad::before { content: "\f11b"; } +.fa-gamepad-alt::before { content: "\e5a2"; } +.fa-gamepad-modern::before { content: "\e5a2"; } +.fa-garage::before { content: "\e009"; } +.fa-garage-car::before { content: "\e00a"; } +.fa-garage-open::before { content: "\e00b"; } +.fa-garlic::before { content: "\e40e"; } +.fa-gas-pump::before { content: "\f52f"; } +.fa-gas-pump-slash::before { content: "\f5f4"; } +.fa-gauge::before { content: "\f624"; } +.fa-gauge-circle-bolt::before { content: "\e496"; } +.fa-gauge-circle-minus::before { content: "\e497"; } +.fa-gauge-circle-plus::before { content: "\e498"; } +.fa-gauge-high::before { content: "\f625"; } +.fa-gauge-low::before { content: "\f627"; } +.fa-gauge-max::before { content: "\f626"; } +.fa-gauge-med::before { content: "\f624"; } +.fa-gauge-min::before { content: "\f628"; } +.fa-gauge-simple::before { content: "\f629"; } +.fa-gauge-simple-high::before { content: "\f62a"; } +.fa-gauge-simple-low::before { content: "\f62c"; } +.fa-gauge-simple-max::before { content: "\f62b"; } +.fa-gauge-simple-med::before { content: "\f629"; } +.fa-gauge-simple-min::before { content: "\f62d"; } +.fa-gave-dandy::before { content: "\e409"; } +.fa-gavel::before { content: "\f0e3"; } +.fa-gbp::before { content: "\f154"; } +.fa-gear::before { content: "\f013"; } +.fa-gear-code::before { content: "\e5e8"; } +.fa-gear-complex::before { content: "\e5e9"; } +.fa-gear-complex-code::before { content: "\e5eb"; } +.fa-gears::before { content: "\f085"; } +.fa-gem::before { content: "\f3a5"; } +.fa-genderless::before { content: "\f22d"; } +.fa-ghost::before { content: "\f6e2"; } +.fa-gif::before { content: "\e190"; } +.fa-gift::before { content: "\f06b"; } +.fa-gift-card::before { content: "\f663"; } +.fa-gifts::before { content: "\f79c"; } +.fa-gingerbread-man::before { content: "\f79d"; } +.fa-glass::before { content: "\f804"; } +.fa-glass-champagne::before { content: "\f79e"; } +.fa-glass-cheers::before { content: "\f79f"; } +.fa-glass-citrus::before { content: "\f869"; } +.fa-glass-empty::before { content: "\e191"; } +.fa-glass-half::before { content: "\e192"; } +.fa-glass-half-empty::before { content: "\e192"; } +.fa-glass-half-full::before { content: "\e192"; } +.fa-glass-martini::before { content: "\f000"; } +.fa-glass-martini-alt::before { content: "\f57b"; } +.fa-glass-water::before { content: "\e4f4"; } +.fa-glass-water-droplet::before { content: "\e4f5"; } +.fa-glass-whiskey::before { content: "\f7a0"; } +.fa-glass-whiskey-rocks::before { content: "\f7a1"; } +.fa-glasses::before { content: "\f530"; } +.fa-glasses-alt::before { content: "\f5f5"; } +.fa-glasses-round::before { content: "\f5f5"; } +.fa-globe::before { content: "\f0ac"; } +.fa-globe-africa::before { content: "\f57c"; } +.fa-globe-americas::before { content: "\f57d"; } +.fa-globe-asia::before { content: "\f57e"; } +.fa-globe-europe::before { content: "\f7a2"; } +.fa-globe-oceania::before { content: "\e47b"; } +.fa-globe-pointer::before { content: "\e60e"; } +.fa-globe-snow::before { content: "\f7a3"; } +.fa-globe-stand::before { content: "\f5f6"; } +.fa-glove-boxing::before { content: "\f438"; } +.fa-goal-net::before { content: "\e3ab"; } +.fa-golf-ball::before { content: "\f450"; } +.fa-golf-ball-tee::before { content: "\f450"; } +.fa-golf-club::before { content: "\f451"; } +.fa-golf-flag-hole::before { content: "\e3ac"; } +.fa-gopuram::before { content: "\f664"; } +.fa-graduation-cap::before { content: "\f19d"; } +.fa-gramophone::before { content: "\f8bd"; } +.fa-grapes::before { content: "\e306"; } +.fa-grate::before { content: "\e193"; } +.fa-grate-droplet::before { content: "\e194"; } +.fa-greater-than::before { content: "\3e"; } +.fa-greater-than-equal::before { content: "\f532"; } +.fa-grid::before { content: "\e195"; } +.fa-grid-2::before { content: "\e196"; } +.fa-grid-2-plus::before { content: "\e197"; } +.fa-grid-3::before { content: "\e195"; } +.fa-grid-4::before { content: "\e198"; } +.fa-grid-5::before { content: "\e199"; } +.fa-grid-dividers::before { content: "\e3ad"; } +.fa-grid-horizontal::before { content: "\e307"; } +.fa-grid-round::before { content: "\e5da"; } +.fa-grid-round-2::before { content: "\e5db"; } +.fa-grid-round-2-plus::before { content: "\e5dc"; } +.fa-grid-round-4::before { content: "\e5dd"; } +.fa-grid-round-5::before { content: "\e5de"; } +.fa-grill::before { content: "\e5a3"; } +.fa-grill-fire::before { content: "\e5a4"; } +.fa-grill-hot::before { content: "\e5a5"; } +.fa-grimace::before { content: "\f57f"; } +.fa-grin::before { content: "\f580"; } +.fa-grin-alt::before { content: "\f581"; } +.fa-grin-beam::before { content: "\f582"; } +.fa-grin-beam-sweat::before { content: "\f583"; } +.fa-grin-hearts::before { content: "\f584"; } +.fa-grin-squint::before { content: "\f585"; } +.fa-grin-squint-tears::before { content: "\f586"; } +.fa-grin-stars::before { content: "\f587"; } +.fa-grin-tears::before { content: "\f588"; } +.fa-grin-tongue::before { content: "\f589"; } +.fa-grin-tongue-squint::before { content: "\f58a"; } +.fa-grin-tongue-wink::before { content: "\f58b"; } +.fa-grin-wink::before { content: "\f58c"; } +.fa-grip::before { content: "\f58d"; } +.fa-grip-dots::before { content: "\e410"; } +.fa-grip-dots-vertical::before { content: "\e411"; } +.fa-grip-horizontal::before { content: "\f58d"; } +.fa-grip-lines::before { content: "\f7a4"; } +.fa-grip-lines-vertical::before { content: "\f7a5"; } +.fa-grip-vertical::before { content: "\f58e"; } +.fa-group-arrows-rotate::before { content: "\e4f6"; } +.fa-guarani-sign::before { content: "\e19a"; } +.fa-guitar::before { content: "\f7a6"; } +.fa-guitar-electric::before { content: "\f8be"; } +.fa-guitars::before { content: "\f8bf"; } +.fa-gun::before { content: "\e19b"; } +.fa-gun-slash::before { content: "\e19c"; } +.fa-gun-squirt::before { content: "\e19d"; } +.fa-h::before { content: "\48"; } +.fa-h-square::before { content: "\f0fd"; } +.fa-h1::before { content: "\f313"; } +.fa-h2::before { content: "\f314"; } +.fa-h3::before { content: "\f315"; } +.fa-h4::before { content: "\f86a"; } +.fa-h5::before { content: "\e412"; } +.fa-h6::before { content: "\e413"; } +.fa-hamburger::before { content: "\f805"; } +.fa-hammer::before { content: "\f6e3"; } +.fa-hammer-crash::before { content: "\e414"; } +.fa-hammer-war::before { content: "\f6e4"; } +.fa-hamsa::before { content: "\f665"; } +.fa-hand::before { content: "\f256"; } +.fa-hand-back-fist::before { content: "\f255"; } +.fa-hand-back-point-down::before { content: "\e19e"; } +.fa-hand-back-point-left::before { content: "\e19f"; } +.fa-hand-back-point-ribbon::before { content: "\e1a0"; } +.fa-hand-back-point-right::before { content: "\e1a1"; } +.fa-hand-back-point-up::before { content: "\e1a2"; } +.fa-hand-dots::before { content: "\f461"; } +.fa-hand-fingers-crossed::before { content: "\e1a3"; } +.fa-hand-fist::before { content: "\f6de"; } +.fa-hand-heart::before { content: "\f4bc"; } +.fa-hand-holding::before { content: "\f4bd"; } +.fa-hand-holding-box::before { content: "\f47b"; } +.fa-hand-holding-dollar::before { content: "\f4c0"; } +.fa-hand-holding-droplet::before { content: "\f4c1"; } +.fa-hand-holding-hand::before { content: "\e4f7"; } +.fa-hand-holding-heart::before { content: "\f4be"; } +.fa-hand-holding-magic::before { content: "\f6e5"; } +.fa-hand-holding-medical::before { content: "\e05c"; } +.fa-hand-holding-seedling::before { content: "\f4bf"; } +.fa-hand-holding-skull::before { content: "\e1a4"; } +.fa-hand-holding-usd::before { content: "\f4c0"; } +.fa-hand-holding-water::before { content: "\f4c1"; } +.fa-hand-horns::before { content: "\e1a9"; } +.fa-hand-lizard::before { content: "\f258"; } +.fa-hand-love::before { content: "\e1a5"; } +.fa-hand-middle-finger::before { content: "\f806"; } +.fa-hand-paper::before { content: "\f256"; } +.fa-hand-peace::before { content: "\f25b"; } +.fa-hand-point-down::before { content: "\f0a7"; } +.fa-hand-point-left::before { content: "\f0a5"; } +.fa-hand-point-ribbon::before { content: "\e1a6"; } +.fa-hand-point-right::before { content: "\f0a4"; } +.fa-hand-point-up::before { content: "\f0a6"; } +.fa-hand-pointer::before { content: "\f25a"; } +.fa-hand-receiving::before { content: "\f47c"; } +.fa-hand-rock::before { content: "\f255"; } +.fa-hand-scissors::before { content: "\f257"; } +.fa-hand-sparkles::before { content: "\e05d"; } +.fa-hand-spock::before { content: "\f259"; } +.fa-hand-wave::before { content: "\e1a7"; } +.fa-handcuffs::before { content: "\e4f8"; } +.fa-hands::before { content: "\f2a7"; } +.fa-hands-american-sign-language-interpreting::before { content: "\f2a3"; } +.fa-hands-asl-interpreting::before { content: "\f2a3"; } +.fa-hands-bound::before { content: "\e4f9"; } +.fa-hands-bubbles::before { content: "\e05e"; } +.fa-hands-clapping::before { content: "\e1a8"; } +.fa-hands-heart::before { content: "\f4c3"; } +.fa-hands-helping::before { content: "\f4c4"; } +.fa-hands-holding::before { content: "\f4c2"; } +.fa-hands-holding-child::before { content: "\e4fa"; } +.fa-hands-holding-circle::before { content: "\e4fb"; } +.fa-hands-holding-diamond::before { content: "\f47c"; } +.fa-hands-holding-dollar::before { content: "\f4c5"; } +.fa-hands-holding-heart::before { content: "\f4c3"; } +.fa-hands-praying::before { content: "\f684"; } +.fa-hands-usd::before { content: "\f4c5"; } +.fa-hands-wash::before { content: "\e05e"; } +.fa-handshake::before { content: "\f2b5"; } +.fa-handshake-alt::before { content: "\f4c6"; } +.fa-handshake-alt-slash::before { content: "\e05f"; } +.fa-handshake-angle::before { content: "\f4c4"; } +.fa-handshake-simple::before { content: "\f4c6"; } +.fa-handshake-simple-slash::before { content: "\e05f"; } +.fa-handshake-slash::before { content: "\e060"; } +.fa-hanukiah::before { content: "\f6e6"; } +.fa-hard-drive::before { content: "\f0a0"; } +.fa-hard-hat::before { content: "\f807"; } +.fa-hard-of-hearing::before { content: "\f2a4"; } +.fa-hashtag::before { content: "\23"; } +.fa-hashtag-lock::before { content: "\e415"; } +.fa-hat-beach::before { content: "\e606"; } +.fa-hat-chef::before { content: "\f86b"; } +.fa-hat-cowboy::before { content: "\f8c0"; } +.fa-hat-cowboy-side::before { content: "\f8c1"; } +.fa-hat-hard::before { content: "\f807"; } +.fa-hat-santa::before { content: "\f7a7"; } +.fa-hat-winter::before { content: "\f7a8"; } +.fa-hat-witch::before { content: "\f6e7"; } +.fa-hat-wizard::before { content: "\f6e8"; } +.fa-haykal::before { content: "\f666"; } +.fa-hdd::before { content: "\f0a0"; } +.fa-head-side::before { content: "\f6e9"; } +.fa-head-side-brain::before { content: "\f808"; } +.fa-head-side-cough::before { content: "\e061"; } +.fa-head-side-cough-slash::before { content: "\e062"; } +.fa-head-side-gear::before { content: "\e611"; } +.fa-head-side-goggles::before { content: "\f6ea"; } +.fa-head-side-headphones::before { content: "\f8c2"; } +.fa-head-side-heart::before { content: "\e1aa"; } +.fa-head-side-mask::before { content: "\e063"; } +.fa-head-side-medical::before { content: "\f809"; } +.fa-head-side-virus::before { content: "\e064"; } +.fa-head-vr::before { content: "\f6ea"; } +.fa-header::before { content: "\f1dc"; } +.fa-heading::before { content: "\f1dc"; } +.fa-headphones::before { content: "\f025"; } +.fa-headphones-alt::before { content: "\f58f"; } +.fa-headphones-simple::before { content: "\f58f"; } +.fa-headset::before { content: "\f590"; } +.fa-heart::before { content: "\f004"; } +.fa-heart-broken::before { content: "\f7a9"; } +.fa-heart-circle::before { content: "\f4c7"; } +.fa-heart-circle-bolt::before { content: "\e4fc"; } +.fa-heart-circle-check::before { content: "\e4fd"; } +.fa-heart-circle-exclamation::before { content: "\e4fe"; } +.fa-heart-circle-minus::before { content: "\e4ff"; } +.fa-heart-circle-plus::before { content: "\e500"; } +.fa-heart-circle-xmark::before { content: "\e501"; } +.fa-heart-crack::before { content: "\f7a9"; } +.fa-heart-half::before { content: "\e1ab"; } +.fa-heart-half-alt::before { content: "\e1ac"; } +.fa-heart-half-stroke::before { content: "\e1ac"; } +.fa-heart-music-camera-bolt::before { content: "\f86d"; } +.fa-heart-pulse::before { content: "\f21e"; } +.fa-heart-rate::before { content: "\f5f8"; } +.fa-heart-square::before { content: "\f4c8"; } +.fa-heartbeat::before { content: "\f21e"; } +.fa-heat::before { content: "\e00c"; } +.fa-helicopter::before { content: "\f533"; } +.fa-helicopter-symbol::before { content: "\e502"; } +.fa-helmet-battle::before { content: "\f6eb"; } +.fa-helmet-safety::before { content: "\f807"; } +.fa-helmet-un::before { content: "\e503"; } +.fa-hexagon::before { content: "\f312"; } +.fa-hexagon-check::before { content: "\e416"; } +.fa-hexagon-divide::before { content: "\e1ad"; } +.fa-hexagon-exclamation::before { content: "\e417"; } +.fa-hexagon-image::before { content: "\e504"; } +.fa-hexagon-minus::before { content: "\f307"; } +.fa-hexagon-plus::before { content: "\f300"; } +.fa-hexagon-vertical-nft::before { content: "\e505"; } +.fa-hexagon-vertical-nft-slanted::before { content: "\e506"; } +.fa-hexagon-xmark::before { content: "\f2ee"; } +.fa-high-definition::before { content: "\e1ae"; } +.fa-highlighter::before { content: "\f591"; } +.fa-highlighter-line::before { content: "\e1af"; } +.fa-hiking::before { content: "\f6ec"; } +.fa-hill-avalanche::before { content: "\e507"; } +.fa-hill-rockslide::before { content: "\e508"; } +.fa-hippo::before { content: "\f6ed"; } +.fa-history::before { content: "\f1da"; } +.fa-hockey-mask::before { content: "\f6ee"; } +.fa-hockey-puck::before { content: "\f453"; } +.fa-hockey-stick-puck::before { content: "\e3ae"; } +.fa-hockey-sticks::before { content: "\f454"; } +.fa-holly-berry::before { content: "\f7aa"; } +.fa-home::before { content: "\f015"; } +.fa-home-alt::before { content: "\f015"; } +.fa-home-blank::before { content: "\e487"; } +.fa-home-heart::before { content: "\f4c9"; } +.fa-home-lg::before { content: "\e3af"; } +.fa-home-lg-alt::before { content: "\f015"; } +.fa-home-user::before { content: "\e1b0"; } +.fa-honey-pot::before { content: "\e418"; } +.fa-hood-cloak::before { content: "\f6ef"; } +.fa-horizontal-rule::before { content: "\f86c"; } +.fa-horse::before { content: "\f6f0"; } +.fa-horse-head::before { content: "\f7ab"; } +.fa-horse-saddle::before { content: "\f8c3"; } +.fa-hose::before { content: "\e419"; } +.fa-hose-reel::before { content: "\e41a"; } +.fa-hospital::before { content: "\f0f8"; } +.fa-hospital-alt::before { content: "\f0f8"; } +.fa-hospital-symbol::before { content: "\f47e"; } +.fa-hospital-user::before { content: "\f80d"; } +.fa-hospital-wide::before { content: "\f0f8"; } +.fa-hospitals::before { content: "\f80e"; } +.fa-hot-tub::before { content: "\f593"; } +.fa-hot-tub-person::before { content: "\f593"; } +.fa-hotdog::before { content: "\f80f"; } +.fa-hotel::before { content: "\f594"; } +.fa-hourglass::before { content: "\f254"; } +.fa-hourglass-1::before { content: "\f251"; } +.fa-hourglass-2::before { content: "\f252"; } +.fa-hourglass-3::before { content: "\f253"; } +.fa-hourglass-clock::before { content: "\e41b"; } +.fa-hourglass-empty::before { content: "\f254"; } +.fa-hourglass-end::before { content: "\f253"; } +.fa-hourglass-half::before { content: "\f252"; } +.fa-hourglass-start::before { content: "\f251"; } +.fa-house::before { content: "\f015"; } +.fa-house-blank::before { content: "\e487"; } +.fa-house-building::before { content: "\e1b1"; } +.fa-house-chimney::before { content: "\e3af"; } +.fa-house-chimney-blank::before { content: "\e3b0"; } +.fa-house-chimney-crack::before { content: "\f6f1"; } +.fa-house-chimney-heart::before { content: "\e1b2"; } +.fa-house-chimney-medical::before { content: "\f7f2"; } +.fa-house-chimney-user::before { content: "\e065"; } +.fa-house-chimney-window::before { content: "\e00d"; } +.fa-house-circle-check::before { content: "\e509"; } +.fa-house-circle-exclamation::before { content: "\e50a"; } +.fa-house-circle-xmark::before { content: "\e50b"; } +.fa-house-crack::before { content: "\e3b1"; } +.fa-house-damage::before { content: "\f6f1"; } +.fa-house-day::before { content: "\e00e"; } +.fa-house-fire::before { content: "\e50c"; } +.fa-house-flag::before { content: "\e50d"; } +.fa-house-flood::before { content: "\f74f"; } +.fa-house-flood-water::before { content: "\e50e"; } +.fa-house-flood-water-circle-arrow-right::before { content: "\e50f"; } +.fa-house-heart::before { content: "\f4c9"; } +.fa-house-laptop::before { content: "\e066"; } +.fa-house-leave::before { content: "\e00f"; } +.fa-house-lock::before { content: "\e510"; } +.fa-house-medical::before { content: "\e3b2"; } +.fa-house-medical-circle-check::before { content: "\e511"; } +.fa-house-medical-circle-exclamation::before { content: "\e512"; } +.fa-house-medical-circle-xmark::before { content: "\e513"; } +.fa-house-medical-flag::before { content: "\e514"; } +.fa-house-night::before { content: "\e010"; } +.fa-house-person-arrive::before { content: "\e011"; } +.fa-house-person-depart::before { content: "\e00f"; } +.fa-house-person-leave::before { content: "\e00f"; } +.fa-house-person-return::before { content: "\e011"; } +.fa-house-return::before { content: "\e011"; } +.fa-house-signal::before { content: "\e012"; } +.fa-house-tree::before { content: "\e1b3"; } +.fa-house-tsunami::before { content: "\e515"; } +.fa-house-turret::before { content: "\e1b4"; } +.fa-house-user::before { content: "\e1b0"; } +.fa-house-water::before { content: "\f74f"; } +.fa-house-window::before { content: "\e3b3"; } +.fa-hryvnia::before { content: "\f6f2"; } +.fa-hryvnia-sign::before { content: "\f6f2"; } +.fa-humidity::before { content: "\f750"; } +.fa-hundred-points::before { content: "\e41c"; } +.fa-hurricane::before { content: "\f751"; } +.fa-hyphen::before { content: "\2d"; } +.fa-i::before { content: "\49"; } +.fa-i-cursor::before { content: "\f246"; } +.fa-ice-cream::before { content: "\f810"; } +.fa-ice-skate::before { content: "\f7ac"; } +.fa-icicles::before { content: "\f7ad"; } +.fa-icons::before { content: "\f86d"; } +.fa-icons-alt::before { content: "\f86e"; } +.fa-id-badge::before { content: "\f2c1"; } +.fa-id-card::before { content: "\f2c2"; } +.fa-id-card-alt::before { content: "\f47f"; } +.fa-id-card-clip::before { content: "\f47f"; } +.fa-igloo::before { content: "\f7ae"; } +.fa-ils::before { content: "\f20b"; } +.fa-image::before { content: "\f03e"; } +.fa-image-landscape::before { content: "\e1b5"; } +.fa-image-polaroid::before { content: "\f8c4"; } +.fa-image-polaroid-user::before { content: "\e1b6"; } +.fa-image-portrait::before { content: "\f3e0"; } +.fa-image-slash::before { content: "\e1b7"; } +.fa-image-user::before { content: "\e1b8"; } +.fa-images::before { content: "\f302"; } +.fa-images-user::before { content: "\e1b9"; } +.fa-inbox::before { content: "\f01c"; } +.fa-inbox-arrow-down::before { content: "\f310"; } +.fa-inbox-arrow-up::before { content: "\f311"; } +.fa-inbox-full::before { content: "\e1ba"; } +.fa-inbox-in::before { content: "\f310"; } +.fa-inbox-out::before { content: "\f311"; } +.fa-inboxes::before { content: "\e1bb"; } +.fa-indent::before { content: "\f03c"; } +.fa-indian-rupee::before { content: "\e1bc"; } +.fa-indian-rupee-sign::before { content: "\e1bc"; } +.fa-industry::before { content: "\f275"; } +.fa-industry-alt::before { content: "\f3b3"; } +.fa-industry-windows::before { content: "\f3b3"; } +.fa-infinity::before { content: "\f534"; } +.fa-info::before { content: "\f129"; } +.fa-info-circle::before { content: "\f05a"; } +.fa-info-square::before { content: "\f30f"; } +.fa-inhaler::before { content: "\f5f9"; } +.fa-input-numeric::before { content: "\e1bd"; } +.fa-input-pipe::before { content: "\e1be"; } +.fa-input-text::before { content: "\e1bf"; } +.fa-inr::before { content: "\e1bc"; } +.fa-institution::before { content: "\f19c"; } +.fa-integral::before { content: "\f667"; } +.fa-interrobang::before { content: "\e5ba"; } +.fa-intersection::before { content: "\f668"; } +.fa-inventory::before { content: "\f480"; } +.fa-island-tree-palm::before { content: "\f811"; } +.fa-island-tropical::before { content: "\f811"; } +.fa-italic::before { content: "\f033"; } +.fa-j::before { content: "\4a"; } +.fa-jack-o-lantern::before { content: "\f30e"; } +.fa-jar::before { content: "\e516"; } +.fa-jar-wheat::before { content: "\e517"; } +.fa-jedi::before { content: "\f669"; } +.fa-jet-fighter::before { content: "\f0fb"; } +.fa-jet-fighter-up::before { content: "\e518"; } +.fa-joint::before { content: "\f595"; } +.fa-journal-whills::before { content: "\f66a"; } +.fa-joystick::before { content: "\f8c5"; } +.fa-jpy::before { content: "\f157"; } +.fa-jug::before { content: "\f8c6"; } +.fa-jug-bottle::before { content: "\e5fb"; } +.fa-jug-detergent::before { content: "\e519"; } +.fa-k::before { content: "\4b"; } +.fa-kaaba::before { content: "\f66b"; } +.fa-kazoo::before { content: "\f8c7"; } +.fa-kerning::before { content: "\f86f"; } +.fa-key::before { content: "\f084"; } +.fa-key-skeleton::before { content: "\f6f3"; } +.fa-key-skeleton-left-right::before { content: "\e3b4"; } +.fa-keyboard::before { content: "\f11c"; } +.fa-keyboard-brightness::before { content: "\e1c0"; } +.fa-keyboard-brightness-low::before { content: "\e1c1"; } +.fa-keyboard-down::before { content: "\e1c2"; } +.fa-keyboard-left::before { content: "\e1c3"; } +.fa-keynote::before { content: "\f66c"; } +.fa-khanda::before { content: "\f66d"; } +.fa-kidneys::before { content: "\f5fb"; } +.fa-kip-sign::before { content: "\e1c4"; } +.fa-kiss::before { content: "\f596"; } +.fa-kiss-beam::before { content: "\f597"; } +.fa-kiss-wink-heart::before { content: "\f598"; } +.fa-kit-medical::before { content: "\f479"; } +.fa-kitchen-set::before { content: "\e51a"; } +.fa-kite::before { content: "\f6f4"; } +.fa-kiwi-bird::before { content: "\f535"; } +.fa-kiwi-fruit::before { content: "\e30c"; } +.fa-knife::before { content: "\f2e4"; } +.fa-knife-kitchen::before { content: "\f6f5"; } +.fa-krw::before { content: "\f159"; } +.fa-l::before { content: "\4c"; } +.fa-lacrosse-stick::before { content: "\e3b5"; } +.fa-lacrosse-stick-ball::before { content: "\e3b6"; } +.fa-ladder-water::before { content: "\f5c5"; } +.fa-lambda::before { content: "\f66e"; } +.fa-lamp::before { content: "\f4ca"; } +.fa-lamp-desk::before { content: "\e014"; } +.fa-lamp-floor::before { content: "\e015"; } +.fa-lamp-street::before { content: "\e1c5"; } +.fa-land-mine-on::before { content: "\e51b"; } +.fa-landmark::before { content: "\f66f"; } +.fa-landmark-alt::before { content: "\f752"; } +.fa-landmark-dome::before { content: "\f752"; } +.fa-landmark-flag::before { content: "\e51c"; } +.fa-landscape::before { content: "\e1b5"; } +.fa-language::before { content: "\f1ab"; } +.fa-laptop::before { content: "\f109"; } +.fa-laptop-arrow-down::before { content: "\e1c6"; } +.fa-laptop-binary::before { content: "\e5e7"; } +.fa-laptop-code::before { content: "\f5fc"; } +.fa-laptop-file::before { content: "\e51d"; } +.fa-laptop-house::before { content: "\e066"; } +.fa-laptop-medical::before { content: "\f812"; } +.fa-laptop-mobile::before { content: "\f87a"; } +.fa-laptop-slash::before { content: "\e1c7"; } +.fa-lari-sign::before { content: "\e1c8"; } +.fa-lasso::before { content: "\f8c8"; } +.fa-lasso-sparkles::before { content: "\e1c9"; } +.fa-laugh::before { content: "\f599"; } +.fa-laugh-beam::before { content: "\f59a"; } +.fa-laugh-squint::before { content: "\f59b"; } +.fa-laugh-wink::before { content: "\f59c"; } +.fa-layer-group::before { content: "\f5fd"; } +.fa-layer-group-minus::before { content: "\f5fe"; } +.fa-layer-group-plus::before { content: "\f5ff"; } +.fa-layer-minus::before { content: "\f5fe"; } +.fa-layer-plus::before { content: "\f5ff"; } +.fa-leaf::before { content: "\f06c"; } +.fa-leaf-heart::before { content: "\f4cb"; } +.fa-leaf-maple::before { content: "\f6f6"; } +.fa-leaf-oak::before { content: "\f6f7"; } +.fa-leafy-green::before { content: "\e41d"; } +.fa-left::before { content: "\f355"; } +.fa-left-from-line::before { content: "\f348"; } +.fa-left-long::before { content: "\f30a"; } +.fa-left-long-to-line::before { content: "\e41e"; } +.fa-left-right::before { content: "\f337"; } +.fa-left-to-line::before { content: "\f34b"; } +.fa-legal::before { content: "\f0e3"; } +.fa-lemon::before { content: "\f094"; } +.fa-less-than::before { content: "\3c"; } +.fa-less-than-equal::before { content: "\f537"; } +.fa-level-down::before { content: "\f149"; } +.fa-level-down-alt::before { content: "\f3be"; } +.fa-level-up::before { content: "\f148"; } +.fa-level-up-alt::before { content: "\f3bf"; } +.fa-life-ring::before { content: "\f1cd"; } +.fa-light-ceiling::before { content: "\e016"; } +.fa-light-emergency::before { content: "\e41f"; } +.fa-light-emergency-on::before { content: "\e420"; } +.fa-light-switch::before { content: "\e017"; } +.fa-light-switch-off::before { content: "\e018"; } +.fa-light-switch-on::before { content: "\e019"; } +.fa-lightbulb::before { content: "\f0eb"; } +.fa-lightbulb-cfl::before { content: "\e5a6"; } +.fa-lightbulb-cfl-on::before { content: "\e5a7"; } +.fa-lightbulb-dollar::before { content: "\f670"; } +.fa-lightbulb-exclamation::before { content: "\f671"; } +.fa-lightbulb-exclamation-on::before { content: "\e1ca"; } +.fa-lightbulb-gear::before { content: "\e5fd"; } +.fa-lightbulb-on::before { content: "\f672"; } +.fa-lightbulb-slash::before { content: "\f673"; } +.fa-lighthouse::before { content: "\e612"; } +.fa-lights-holiday::before { content: "\f7b2"; } +.fa-line-chart::before { content: "\f201"; } +.fa-line-columns::before { content: "\f870"; } +.fa-line-height::before { content: "\f871"; } +.fa-lines-leaning::before { content: "\e51e"; } +.fa-link::before { content: "\f0c1"; } +.fa-link-horizontal::before { content: "\e1cb"; } +.fa-link-horizontal-slash::before { content: "\e1cc"; } +.fa-link-simple::before { content: "\e1cd"; } +.fa-link-simple-slash::before { content: "\e1ce"; } +.fa-link-slash::before { content: "\f127"; } +.fa-lips::before { content: "\f600"; } +.fa-lira-sign::before { content: "\f195"; } +.fa-list::before { content: "\f03a"; } +.fa-list-1-2::before { content: "\f0cb"; } +.fa-list-alt::before { content: "\f022"; } +.fa-list-check::before { content: "\f0ae"; } +.fa-list-dots::before { content: "\f0ca"; } +.fa-list-dropdown::before { content: "\e1cf"; } +.fa-list-music::before { content: "\f8c9"; } +.fa-list-numeric::before { content: "\f0cb"; } +.fa-list-ol::before { content: "\f0cb"; } +.fa-list-radio::before { content: "\e1d0"; } +.fa-list-squares::before { content: "\f03a"; } +.fa-list-timeline::before { content: "\e1d1"; } +.fa-list-tree::before { content: "\e1d2"; } +.fa-list-ul::before { content: "\f0ca"; } +.fa-litecoin-sign::before { content: "\e1d3"; } +.fa-loader::before { content: "\e1d4"; } +.fa-lobster::before { content: "\e421"; } +.fa-location::before { content: "\f601"; } +.fa-location-arrow::before { content: "\f124"; } +.fa-location-check::before { content: "\f606"; } +.fa-location-circle::before { content: "\f602"; } +.fa-location-crosshairs::before { content: "\f601"; } +.fa-location-crosshairs-slash::before { content: "\f603"; } +.fa-location-dot::before { content: "\f3c5"; } +.fa-location-dot-slash::before { content: "\f605"; } +.fa-location-exclamation::before { content: "\f608"; } +.fa-location-minus::before { content: "\f609"; } +.fa-location-pen::before { content: "\f607"; } +.fa-location-pin::before { content: "\f041"; } +.fa-location-pin-lock::before { content: "\e51f"; } +.fa-location-pin-slash::before { content: "\f60c"; } +.fa-location-plus::before { content: "\f60a"; } +.fa-location-question::before { content: "\f60b"; } +.fa-location-slash::before { content: "\f603"; } +.fa-location-smile::before { content: "\f60d"; } +.fa-location-xmark::before { content: "\f60e"; } +.fa-lock::before { content: "\f023"; } +.fa-lock-a::before { content: "\e422"; } +.fa-lock-alt::before { content: "\f30d"; } +.fa-lock-hashtag::before { content: "\e423"; } +.fa-lock-keyhole::before { content: "\f30d"; } +.fa-lock-keyhole-open::before { content: "\f3c2"; } +.fa-lock-open::before { content: "\f3c1"; } +.fa-lock-open-alt::before { content: "\f3c2"; } +.fa-locust::before { content: "\e520"; } +.fa-lollipop::before { content: "\e424"; } +.fa-lollypop::before { content: "\e424"; } +.fa-long-arrow-alt-down::before { content: "\f309"; } +.fa-long-arrow-alt-left::before { content: "\f30a"; } +.fa-long-arrow-alt-right::before { content: "\f30b"; } +.fa-long-arrow-alt-up::before { content: "\f30c"; } +.fa-long-arrow-down::before { content: "\f175"; } +.fa-long-arrow-left::before { content: "\f177"; } +.fa-long-arrow-right::before { content: "\f178"; } +.fa-long-arrow-up::before { content: "\f176"; } +.fa-loveseat::before { content: "\f4cc"; } +.fa-low-vision::before { content: "\f2a8"; } +.fa-luchador::before { content: "\f455"; } +.fa-luchador-mask::before { content: "\f455"; } +.fa-luggage-cart::before { content: "\f59d"; } +.fa-lungs::before { content: "\f604"; } +.fa-lungs-virus::before { content: "\e067"; } +.fa-m::before { content: "\4d"; } +.fa-mace::before { content: "\f6f8"; } +.fa-magic::before { content: "\f0d0"; } +.fa-magic-wand-sparkles::before { content: "\e2ca"; } +.fa-magnet::before { content: "\f076"; } +.fa-magnifying-glass::before { content: "\f002"; } +.fa-magnifying-glass-arrow-right::before { content: "\e521"; } +.fa-magnifying-glass-chart::before { content: "\e522"; } +.fa-magnifying-glass-dollar::before { content: "\f688"; } +.fa-magnifying-glass-location::before { content: "\f689"; } +.fa-magnifying-glass-minus::before { content: "\f010"; } +.fa-magnifying-glass-plus::before { content: "\f00e"; } +.fa-mail-bulk::before { content: "\f674"; } +.fa-mail-forward::before { content: "\f064"; } +.fa-mail-reply::before { content: "\f3e5"; } +.fa-mail-reply-all::before { content: "\f122"; } +.fa-mailbox::before { content: "\f813"; } +.fa-mailbox-flag-up::before { content: "\e5bb"; } +.fa-maki-roll::before { content: "\e48b"; } +.fa-makizushi::before { content: "\e48b"; } +.fa-male::before { content: "\f183"; } +.fa-manat-sign::before { content: "\e1d5"; } +.fa-mandolin::before { content: "\f6f9"; } +.fa-mango::before { content: "\e30f"; } +.fa-manhole::before { content: "\e1d6"; } +.fa-map::before { content: "\f279"; } +.fa-map-location::before { content: "\f59f"; } +.fa-map-location-dot::before { content: "\f5a0"; } +.fa-map-marked::before { content: "\f59f"; } +.fa-map-marked-alt::before { content: "\f5a0"; } +.fa-map-marker::before { content: "\f041"; } +.fa-map-marker-alt::before { content: "\f3c5"; } +.fa-map-marker-alt-slash::before { content: "\f605"; } +.fa-map-marker-check::before { content: "\f606"; } +.fa-map-marker-edit::before { content: "\f607"; } +.fa-map-marker-exclamation::before { content: "\f608"; } +.fa-map-marker-minus::before { content: "\f609"; } +.fa-map-marker-plus::before { content: "\f60a"; } +.fa-map-marker-question::before { content: "\f60b"; } +.fa-map-marker-slash::before { content: "\f60c"; } +.fa-map-marker-smile::before { content: "\f60d"; } +.fa-map-marker-times::before { content: "\f60e"; } +.fa-map-marker-xmark::before { content: "\f60e"; } +.fa-map-pin::before { content: "\f276"; } +.fa-map-signs::before { content: "\f277"; } +.fa-marker::before { content: "\f5a1"; } +.fa-mars::before { content: "\f222"; } +.fa-mars-and-venus::before { content: "\f224"; } +.fa-mars-and-venus-burst::before { content: "\e523"; } +.fa-mars-double::before { content: "\f227"; } +.fa-mars-stroke::before { content: "\f229"; } +.fa-mars-stroke-h::before { content: "\f22b"; } +.fa-mars-stroke-right::before { content: "\f22b"; } +.fa-mars-stroke-up::before { content: "\f22a"; } +.fa-mars-stroke-v::before { content: "\f22a"; } +.fa-martini-glass::before { content: "\f57b"; } +.fa-martini-glass-citrus::before { content: "\f561"; } +.fa-martini-glass-empty::before { content: "\f000"; } +.fa-mask::before { content: "\f6fa"; } +.fa-mask-face::before { content: "\e1d7"; } +.fa-mask-luchador::before { content: "\f455"; } +.fa-mask-snorkel::before { content: "\e3b7"; } +.fa-mask-ventilator::before { content: "\e524"; } +.fa-masks-theater::before { content: "\f630"; } +.fa-mattress-pillow::before { content: "\e525"; } +.fa-maximize::before { content: "\f31e"; } +.fa-meat::before { content: "\f814"; } +.fa-medal::before { content: "\f5a2"; } +.fa-medkit::before { content: "\f0fa"; } +.fa-megaphone::before { content: "\f675"; } +.fa-meh::before { content: "\f11a"; } +.fa-meh-blank::before { content: "\f5a4"; } +.fa-meh-rolling-eyes::before { content: "\f5a5"; } +.fa-melon::before { content: "\e310"; } +.fa-melon-slice::before { content: "\e311"; } +.fa-memo::before { content: "\e1d8"; } +.fa-memo-circle-check::before { content: "\e1d9"; } +.fa-memo-circle-info::before { content: "\e49a"; } +.fa-memo-pad::before { content: "\e1da"; } +.fa-memory::before { content: "\f538"; } +.fa-menorah::before { content: "\f676"; } +.fa-mercury::before { content: "\f223"; } +.fa-merge::before { content: "\e526"; } +.fa-message::before { content: "\f27a"; } +.fa-message-arrow-down::before { content: "\e1db"; } +.fa-message-arrow-up::before { content: "\e1dc"; } +.fa-message-arrow-up-right::before { content: "\e1dd"; } +.fa-message-bot::before { content: "\e3b8"; } +.fa-message-captions::before { content: "\e1de"; } +.fa-message-check::before { content: "\f4a2"; } +.fa-message-code::before { content: "\e1df"; } +.fa-message-dollar::before { content: "\f650"; } +.fa-message-dots::before { content: "\f4a3"; } +.fa-message-edit::before { content: "\f4a4"; } +.fa-message-exclamation::before { content: "\f4a5"; } +.fa-message-heart::before { content: "\e5c9"; } +.fa-message-image::before { content: "\e1e0"; } +.fa-message-lines::before { content: "\f4a6"; } +.fa-message-medical::before { content: "\f7f4"; } +.fa-message-middle::before { content: "\e1e1"; } +.fa-message-middle-top::before { content: "\e1e2"; } +.fa-message-minus::before { content: "\f4a7"; } +.fa-message-music::before { content: "\f8af"; } +.fa-message-pen::before { content: "\f4a4"; } +.fa-message-plus::before { content: "\f4a8"; } +.fa-message-question::before { content: "\e1e3"; } +.fa-message-quote::before { content: "\e1e4"; } +.fa-message-slash::before { content: "\f4a9"; } +.fa-message-smile::before { content: "\f4aa"; } +.fa-message-sms::before { content: "\e1e5"; } +.fa-message-text::before { content: "\e1e6"; } +.fa-message-times::before { content: "\f4ab"; } +.fa-message-xmark::before { content: "\f4ab"; } +.fa-messages::before { content: "\f4b6"; } +.fa-messages-dollar::before { content: "\f652"; } +.fa-messages-question::before { content: "\e1e7"; } +.fa-messaging::before { content: "\f4a3"; } +.fa-meteor::before { content: "\f753"; } +.fa-meter::before { content: "\e1e8"; } +.fa-meter-bolt::before { content: "\e1e9"; } +.fa-meter-droplet::before { content: "\e1ea"; } +.fa-meter-fire::before { content: "\e1eb"; } +.fa-microchip::before { content: "\f2db"; } +.fa-microchip-ai::before { content: "\e1ec"; } +.fa-microphone::before { content: "\f130"; } +.fa-microphone-alt::before { content: "\f3c9"; } +.fa-microphone-alt-slash::before { content: "\f539"; } +.fa-microphone-circle::before { content: "\e116"; } +.fa-microphone-circle-alt::before { content: "\e117"; } +.fa-microphone-lines::before { content: "\f3c9"; } +.fa-microphone-lines-slash::before { content: "\f539"; } +.fa-microphone-slash::before { content: "\f131"; } +.fa-microphone-stand::before { content: "\f8cb"; } +.fa-microscope::before { content: "\f610"; } +.fa-microwave::before { content: "\e01b"; } +.fa-mill-sign::before { content: "\e1ed"; } +.fa-mind-share::before { content: "\f677"; } +.fa-minimize::before { content: "\f78c"; } +.fa-minus::before { content: "\f068"; } +.fa-minus-circle::before { content: "\f056"; } +.fa-minus-hexagon::before { content: "\f307"; } +.fa-minus-large::before { content: "\e404"; } +.fa-minus-octagon::before { content: "\f308"; } +.fa-minus-square::before { content: "\f146"; } +.fa-mistletoe::before { content: "\f7b4"; } +.fa-mitten::before { content: "\f7b5"; } +.fa-mobile::before { content: "\f3ce"; } +.fa-mobile-alt::before { content: "\f3cd"; } +.fa-mobile-android::before { content: "\f3ce"; } +.fa-mobile-android-alt::before { content: "\f3cf"; } +.fa-mobile-button::before { content: "\f10b"; } +.fa-mobile-iphone::before { content: "\e1ee"; } +.fa-mobile-notch::before { content: "\e1ee"; } +.fa-mobile-phone::before { content: "\f3ce"; } +.fa-mobile-retro::before { content: "\e527"; } +.fa-mobile-screen::before { content: "\f3cf"; } +.fa-mobile-screen-button::before { content: "\f3cd"; } +.fa-mobile-signal::before { content: "\e1ef"; } +.fa-mobile-signal-out::before { content: "\e1f0"; } +.fa-money-bill::before { content: "\f0d6"; } +.fa-money-bill-1::before { content: "\f3d1"; } +.fa-money-bill-1-wave::before { content: "\f53b"; } +.fa-money-bill-alt::before { content: "\f3d1"; } +.fa-money-bill-simple::before { content: "\e1f1"; } +.fa-money-bill-simple-wave::before { content: "\e1f2"; } +.fa-money-bill-transfer::before { content: "\e528"; } +.fa-money-bill-trend-up::before { content: "\e529"; } +.fa-money-bill-wave::before { content: "\f53a"; } +.fa-money-bill-wave-alt::before { content: "\f53b"; } +.fa-money-bill-wheat::before { content: "\e52a"; } +.fa-money-bills::before { content: "\e1f3"; } +.fa-money-bills-alt::before { content: "\e1f4"; } +.fa-money-bills-simple::before { content: "\e1f4"; } +.fa-money-check::before { content: "\f53c"; } +.fa-money-check-alt::before { content: "\f53d"; } +.fa-money-check-dollar::before { content: "\f53d"; } +.fa-money-check-dollar-pen::before { content: "\f873"; } +.fa-money-check-edit::before { content: "\f872"; } +.fa-money-check-edit-alt::before { content: "\f873"; } +.fa-money-check-pen::before { content: "\f872"; } +.fa-money-from-bracket::before { content: "\e312"; } +.fa-money-simple-from-bracket::before { content: "\e313"; } +.fa-monitor-heart-rate::before { content: "\f611"; } +.fa-monitor-waveform::before { content: "\f611"; } +.fa-monkey::before { content: "\f6fb"; } +.fa-monument::before { content: "\f5a6"; } +.fa-moon::before { content: "\f186"; } +.fa-moon-cloud::before { content: "\f754"; } +.fa-moon-over-sun::before { content: "\f74a"; } +.fa-moon-stars::before { content: "\f755"; } +.fa-moped::before { content: "\e3b9"; } +.fa-mortar-board::before { content: "\f19d"; } +.fa-mortar-pestle::before { content: "\f5a7"; } +.fa-mosque::before { content: "\f678"; } +.fa-mosquito::before { content: "\e52b"; } +.fa-mosquito-net::before { content: "\e52c"; } +.fa-motorcycle::before { content: "\f21c"; } +.fa-mound::before { content: "\e52d"; } +.fa-mountain::before { content: "\f6fc"; } +.fa-mountain-city::before { content: "\e52e"; } +.fa-mountain-sun::before { content: "\e52f"; } +.fa-mountains::before { content: "\f6fd"; } +.fa-mouse::before { content: "\f8cc"; } +.fa-mouse-alt::before { content: "\f8cd"; } +.fa-mouse-field::before { content: "\e5a8"; } +.fa-mouse-pointer::before { content: "\f245"; } +.fa-mp3-player::before { content: "\f8ce"; } +.fa-mug::before { content: "\f874"; } +.fa-mug-hot::before { content: "\f7b6"; } +.fa-mug-marshmallows::before { content: "\f7b7"; } +.fa-mug-saucer::before { content: "\f0f4"; } +.fa-mug-tea::before { content: "\f875"; } +.fa-mug-tea-saucer::before { content: "\e1f5"; } +.fa-multiply::before { content: "\f00d"; } +.fa-museum::before { content: "\f19c"; } +.fa-mushroom::before { content: "\e425"; } +.fa-music::before { content: "\f001"; } +.fa-music-alt::before { content: "\f8cf"; } +.fa-music-alt-slash::before { content: "\f8d0"; } +.fa-music-note::before { content: "\f8cf"; } +.fa-music-note-slash::before { content: "\f8d0"; } +.fa-music-slash::before { content: "\f8d1"; } +.fa-mustache::before { content: "\e5bc"; } +.fa-n::before { content: "\4e"; } +.fa-naira-sign::before { content: "\e1f6"; } +.fa-narwhal::before { content: "\f6fe"; } +.fa-navicon::before { content: "\f0c9"; } +.fa-nesting-dolls::before { content: "\e3ba"; } +.fa-network-wired::before { content: "\f6ff"; } +.fa-neuter::before { content: "\f22c"; } +.fa-newspaper::before { content: "\f1ea"; } +.fa-nfc::before { content: "\e1f7"; } +.fa-nfc-lock::before { content: "\e1f8"; } +.fa-nfc-magnifying-glass::before { content: "\e1f9"; } +.fa-nfc-pen::before { content: "\e1fa"; } +.fa-nfc-signal::before { content: "\e1fb"; } +.fa-nfc-slash::before { content: "\e1fc"; } +.fa-nfc-symbol::before { content: "\e531"; } +.fa-nfc-trash::before { content: "\e1fd"; } +.fa-nigiri::before { content: "\e48a"; } +.fa-nose::before { content: "\e5bd"; } +.fa-not-equal::before { content: "\f53e"; } +.fa-notdef::before { content: "\e1fe"; } +.fa-note::before { content: "\e1ff"; } +.fa-note-medical::before { content: "\e200"; } +.fa-note-sticky::before { content: "\f249"; } +.fa-notebook::before { content: "\e201"; } +.fa-notes::before { content: "\e202"; } +.fa-notes-medical::before { content: "\f481"; } +.fa-o::before { content: "\4f"; } +.fa-object-exclude::before { content: "\e49c"; } +.fa-object-group::before { content: "\f247"; } +.fa-object-intersect::before { content: "\e49d"; } +.fa-object-subtract::before { content: "\e49e"; } +.fa-object-ungroup::before { content: "\f248"; } +.fa-object-union::before { content: "\e49f"; } +.fa-objects-align-bottom::before { content: "\e3bb"; } +.fa-objects-align-center-horizontal::before { content: "\e3bc"; } +.fa-objects-align-center-vertical::before { content: "\e3bd"; } +.fa-objects-align-left::before { content: "\e3be"; } +.fa-objects-align-right::before { content: "\e3bf"; } +.fa-objects-align-top::before { content: "\e3c0"; } +.fa-objects-column::before { content: "\e3c1"; } +.fa-octagon::before { content: "\f306"; } +.fa-octagon-check::before { content: "\e426"; } +.fa-octagon-divide::before { content: "\e203"; } +.fa-octagon-exclamation::before { content: "\e204"; } +.fa-octagon-minus::before { content: "\f308"; } +.fa-octagon-plus::before { content: "\f301"; } +.fa-octagon-xmark::before { content: "\f2f0"; } +.fa-oil-can::before { content: "\f613"; } +.fa-oil-can-drip::before { content: "\e205"; } +.fa-oil-temp::before { content: "\f614"; } +.fa-oil-temperature::before { content: "\f614"; } +.fa-oil-well::before { content: "\e532"; } +.fa-olive::before { content: "\e316"; } +.fa-olive-branch::before { content: "\e317"; } +.fa-om::before { content: "\f679"; } +.fa-omega::before { content: "\f67a"; } +.fa-onion::before { content: "\e427"; } +.fa-option::before { content: "\e318"; } +.fa-ornament::before { content: "\f7b8"; } +.fa-otter::before { content: "\f700"; } +.fa-outdent::before { content: "\f03b"; } +.fa-outlet::before { content: "\e01c"; } +.fa-oven::before { content: "\e01d"; } +.fa-overline::before { content: "\f876"; } +.fa-p::before { content: "\50"; } +.fa-page::before { content: "\e428"; } +.fa-page-break::before { content: "\f877"; } +.fa-page-caret-down::before { content: "\e429"; } +.fa-page-caret-up::before { content: "\e42a"; } +.fa-pager::before { content: "\f815"; } +.fa-paint-brush::before { content: "\f1fc"; } +.fa-paint-brush-alt::before { content: "\f5a9"; } +.fa-paint-brush-fine::before { content: "\f5a9"; } +.fa-paint-roller::before { content: "\f5aa"; } +.fa-paintbrush::before { content: "\f1fc"; } +.fa-paintbrush-alt::before { content: "\f5a9"; } +.fa-paintbrush-fine::before { content: "\f5a9"; } +.fa-paintbrush-pencil::before { content: "\e206"; } +.fa-palette::before { content: "\f53f"; } +.fa-palette-boxes::before { content: "\f483"; } +.fa-pallet::before { content: "\f482"; } +.fa-pallet-alt::before { content: "\f483"; } +.fa-pallet-box::before { content: "\e208"; } +.fa-pallet-boxes::before { content: "\f483"; } +.fa-pan-food::before { content: "\e42b"; } +.fa-pan-frying::before { content: "\e42c"; } +.fa-pancakes::before { content: "\e42d"; } +.fa-panel-ews::before { content: "\e42e"; } +.fa-panel-fire::before { content: "\e42f"; } +.fa-panorama::before { content: "\e209"; } +.fa-paper-plane::before { content: "\f1d8"; } +.fa-paper-plane-alt::before { content: "\e20a"; } +.fa-paper-plane-top::before { content: "\e20a"; } +.fa-paperclip::before { content: "\f0c6"; } +.fa-paperclip-vertical::before { content: "\e3c2"; } +.fa-parachute-box::before { content: "\f4cd"; } +.fa-paragraph::before { content: "\f1dd"; } +.fa-paragraph-left::before { content: "\f878"; } +.fa-paragraph-rtl::before { content: "\f878"; } +.fa-parentheses::before { content: "\e0c5"; } +.fa-parenthesis::before { content: "\28"; } +.fa-parking::before { content: "\f540"; } +.fa-parking-circle::before { content: "\f615"; } +.fa-parking-circle-slash::before { content: "\f616"; } +.fa-parking-slash::before { content: "\f617"; } +.fa-party-back::before { content: "\e45c"; } +.fa-party-bell::before { content: "\e31a"; } +.fa-party-horn::before { content: "\e31b"; } +.fa-passport::before { content: "\f5ab"; } +.fa-pastafarianism::before { content: "\f67b"; } +.fa-paste::before { content: "\f0ea"; } +.fa-pause::before { content: "\f04c"; } +.fa-pause-circle::before { content: "\f28b"; } +.fa-paw::before { content: "\f1b0"; } +.fa-paw-alt::before { content: "\f701"; } +.fa-paw-claws::before { content: "\f702"; } +.fa-paw-simple::before { content: "\f701"; } +.fa-peace::before { content: "\f67c"; } +.fa-peach::before { content: "\e20b"; } +.fa-peanut::before { content: "\e430"; } +.fa-peanuts::before { content: "\e431"; } +.fa-peapod::before { content: "\e31c"; } +.fa-pear::before { content: "\e20c"; } +.fa-pedestal::before { content: "\e20d"; } +.fa-pegasus::before { content: "\f703"; } +.fa-pen::before { content: "\f304"; } +.fa-pen-alt::before { content: "\f305"; } +.fa-pen-alt-slash::before { content: "\e20f"; } +.fa-pen-circle::before { content: "\e20e"; } +.fa-pen-clip::before { content: "\f305"; } +.fa-pen-clip-slash::before { content: "\e20f"; } +.fa-pen-fancy::before { content: "\f5ac"; } +.fa-pen-fancy-slash::before { content: "\e210"; } +.fa-pen-field::before { content: "\e211"; } +.fa-pen-line::before { content: "\e212"; } +.fa-pen-nib::before { content: "\f5ad"; } +.fa-pen-nib-slash::before { content: "\e4a1"; } +.fa-pen-paintbrush::before { content: "\f618"; } +.fa-pen-ruler::before { content: "\f5ae"; } +.fa-pen-slash::before { content: "\e213"; } +.fa-pen-square::before { content: "\f14b"; } +.fa-pen-swirl::before { content: "\e214"; } +.fa-pen-to-square::before { content: "\f044"; } +.fa-pencil::before { content: "\f303"; } +.fa-pencil-alt::before { content: "\f303"; } +.fa-pencil-mechanical::before { content: "\e5ca"; } +.fa-pencil-paintbrush::before { content: "\f618"; } +.fa-pencil-ruler::before { content: "\f5ae"; } +.fa-pencil-slash::before { content: "\e215"; } +.fa-pencil-square::before { content: "\f14b"; } +.fa-pennant::before { content: "\f456"; } +.fa-people::before { content: "\e216"; } +.fa-people-arrows::before { content: "\e068"; } +.fa-people-arrows-left-right::before { content: "\e068"; } +.fa-people-carry::before { content: "\f4ce"; } +.fa-people-carry-box::before { content: "\f4ce"; } +.fa-people-dress::before { content: "\e217"; } +.fa-people-dress-simple::before { content: "\e218"; } +.fa-people-group::before { content: "\e533"; } +.fa-people-line::before { content: "\e534"; } +.fa-people-pants::before { content: "\e219"; } +.fa-people-pants-simple::before { content: "\e21a"; } +.fa-people-pulling::before { content: "\e535"; } +.fa-people-robbery::before { content: "\e536"; } +.fa-people-roof::before { content: "\e537"; } +.fa-people-simple::before { content: "\e21b"; } +.fa-pepper::before { content: "\e432"; } +.fa-pepper-hot::before { content: "\f816"; } +.fa-percent::before { content: "\25"; } +.fa-percentage::before { content: "\25"; } +.fa-period::before { content: "\2e"; } +.fa-person::before { content: "\f183"; } +.fa-person-arrow-down-to-line::before { content: "\e538"; } +.fa-person-arrow-up-from-line::before { content: "\e539"; } +.fa-person-biking::before { content: "\f84a"; } +.fa-person-biking-mountain::before { content: "\f84b"; } +.fa-person-booth::before { content: "\f756"; } +.fa-person-breastfeeding::before { content: "\e53a"; } +.fa-person-burst::before { content: "\e53b"; } +.fa-person-cane::before { content: "\e53c"; } +.fa-person-carry::before { content: "\f4cf"; } +.fa-person-carry-box::before { content: "\f4cf"; } +.fa-person-chalkboard::before { content: "\e53d"; } +.fa-person-circle-check::before { content: "\e53e"; } +.fa-person-circle-exclamation::before { content: "\e53f"; } +.fa-person-circle-minus::before { content: "\e540"; } +.fa-person-circle-plus::before { content: "\e541"; } +.fa-person-circle-question::before { content: "\e542"; } +.fa-person-circle-xmark::before { content: "\e543"; } +.fa-person-digging::before { content: "\f85e"; } +.fa-person-dolly::before { content: "\f4d0"; } +.fa-person-dolly-empty::before { content: "\f4d1"; } +.fa-person-dots-from-line::before { content: "\f470"; } +.fa-person-dress::before { content: "\f182"; } +.fa-person-dress-burst::before { content: "\e544"; } +.fa-person-dress-fairy::before { content: "\e607"; } +.fa-person-dress-simple::before { content: "\e21c"; } +.fa-person-drowning::before { content: "\e545"; } +.fa-person-fairy::before { content: "\e608"; } +.fa-person-falling::before { content: "\e546"; } +.fa-person-falling-burst::before { content: "\e547"; } +.fa-person-from-portal::before { content: "\e023"; } +.fa-person-half-dress::before { content: "\e548"; } +.fa-person-harassing::before { content: "\e549"; } +.fa-person-hiking::before { content: "\f6ec"; } +.fa-person-military-pointing::before { content: "\e54a"; } +.fa-person-military-rifle::before { content: "\e54b"; } +.fa-person-military-to-person::before { content: "\e54c"; } +.fa-person-pinball::before { content: "\e21d"; } +.fa-person-praying::before { content: "\f683"; } +.fa-person-pregnant::before { content: "\e31e"; } +.fa-person-rays::before { content: "\e54d"; } +.fa-person-rifle::before { content: "\e54e"; } +.fa-person-running::before { content: "\f70c"; } +.fa-person-running-fast::before { content: "\e5ff"; } +.fa-person-seat::before { content: "\e21e"; } +.fa-person-seat-reclined::before { content: "\e21f"; } +.fa-person-shelter::before { content: "\e54f"; } +.fa-person-sign::before { content: "\f757"; } +.fa-person-simple::before { content: "\e220"; } +.fa-person-skating::before { content: "\f7c5"; } +.fa-person-ski-jumping::before { content: "\f7c7"; } +.fa-person-ski-lift::before { content: "\f7c8"; } +.fa-person-skiing::before { content: "\f7c9"; } +.fa-person-skiing-nordic::before { content: "\f7ca"; } +.fa-person-sledding::before { content: "\f7cb"; } +.fa-person-snowboarding::before { content: "\f7ce"; } +.fa-person-snowmobiling::before { content: "\f7d1"; } +.fa-person-swimming::before { content: "\f5c4"; } +.fa-person-through-window::before { content: "\e5a9"; } +.fa-person-to-door::before { content: "\e433"; } +.fa-person-to-portal::before { content: "\e022"; } +.fa-person-walking::before { content: "\f554"; } +.fa-person-walking-arrow-loop-left::before { content: "\e551"; } +.fa-person-walking-arrow-right::before { content: "\e552"; } +.fa-person-walking-dashed-line-arrow-right::before { content: "\e553"; } +.fa-person-walking-luggage::before { content: "\e554"; } +.fa-person-walking-with-cane::before { content: "\f29d"; } +.fa-peseta-sign::before { content: "\e221"; } +.fa-peso-sign::before { content: "\e222"; } +.fa-phone::before { content: "\f095"; } +.fa-phone-alt::before { content: "\f879"; } +.fa-phone-arrow-down::before { content: "\e223"; } +.fa-phone-arrow-down-left::before { content: "\e223"; } +.fa-phone-arrow-right::before { content: "\e5be"; } +.fa-phone-arrow-up::before { content: "\e224"; } +.fa-phone-arrow-up-right::before { content: "\e224"; } +.fa-phone-circle::before { content: "\e11b"; } +.fa-phone-circle-alt::before { content: "\e11c"; } +.fa-phone-circle-down::before { content: "\e11d"; } +.fa-phone-flip::before { content: "\f879"; } +.fa-phone-hangup::before { content: "\e225"; } +.fa-phone-incoming::before { content: "\e223"; } +.fa-phone-intercom::before { content: "\e434"; } +.fa-phone-laptop::before { content: "\f87a"; } +.fa-phone-missed::before { content: "\e226"; } +.fa-phone-office::before { content: "\f67d"; } +.fa-phone-outgoing::before { content: "\e224"; } +.fa-phone-plus::before { content: "\f4d2"; } +.fa-phone-rotary::before { content: "\f8d3"; } +.fa-phone-slash::before { content: "\f3dd"; } +.fa-phone-square::before { content: "\f098"; } +.fa-phone-square-alt::before { content: "\f87b"; } +.fa-phone-square-down::before { content: "\e27a"; } +.fa-phone-volume::before { content: "\f2a0"; } +.fa-phone-xmark::before { content: "\e227"; } +.fa-photo-film::before { content: "\f87c"; } +.fa-photo-film-music::before { content: "\e228"; } +.fa-photo-video::before { content: "\f87c"; } +.fa-pi::before { content: "\f67e"; } +.fa-piano::before { content: "\f8d4"; } +.fa-piano-keyboard::before { content: "\f8d5"; } +.fa-pickaxe::before { content: "\e5bf"; } +.fa-pickleball::before { content: "\e435"; } +.fa-pie::before { content: "\f705"; } +.fa-pie-chart::before { content: "\f200"; } +.fa-pig::before { content: "\f706"; } +.fa-piggy-bank::before { content: "\f4d3"; } +.fa-pills::before { content: "\f484"; } +.fa-pinata::before { content: "\e3c3"; } +.fa-pinball::before { content: "\e229"; } +.fa-pineapple::before { content: "\e31f"; } +.fa-ping-pong-paddle-ball::before { content: "\f45d"; } +.fa-pipe::before { content: "\7c"; } +.fa-pipe-circle-check::before { content: "\e436"; } +.fa-pipe-collar::before { content: "\e437"; } +.fa-pipe-section::before { content: "\e438"; } +.fa-pipe-smoking::before { content: "\e3c4"; } +.fa-pipe-valve::before { content: "\e439"; } +.fa-pizza::before { content: "\f817"; } +.fa-pizza-slice::before { content: "\f818"; } +.fa-place-of-worship::before { content: "\f67f"; } +.fa-plane::before { content: "\f072"; } +.fa-plane-alt::before { content: "\f3de"; } +.fa-plane-arrival::before { content: "\f5af"; } +.fa-plane-circle-check::before { content: "\e555"; } +.fa-plane-circle-exclamation::before { content: "\e556"; } +.fa-plane-circle-xmark::before { content: "\e557"; } +.fa-plane-departure::before { content: "\f5b0"; } +.fa-plane-engines::before { content: "\f3de"; } +.fa-plane-lock::before { content: "\e558"; } +.fa-plane-prop::before { content: "\e22b"; } +.fa-plane-slash::before { content: "\e069"; } +.fa-plane-tail::before { content: "\e22c"; } +.fa-plane-up::before { content: "\e22d"; } +.fa-plane-up-slash::before { content: "\e22e"; } +.fa-planet-moon::before { content: "\e01f"; } +.fa-planet-ringed::before { content: "\e020"; } +.fa-plant-wilt::before { content: "\e5aa"; } +.fa-plate-utensils::before { content: "\e43b"; } +.fa-plate-wheat::before { content: "\e55a"; } +.fa-play::before { content: "\f04b"; } +.fa-play-circle::before { content: "\f144"; } +.fa-play-pause::before { content: "\e22f"; } +.fa-plug::before { content: "\f1e6"; } +.fa-plug-circle-bolt::before { content: "\e55b"; } +.fa-plug-circle-check::before { content: "\e55c"; } +.fa-plug-circle-exclamation::before { content: "\e55d"; } +.fa-plug-circle-minus::before { content: "\e55e"; } +.fa-plug-circle-plus::before { content: "\e55f"; } +.fa-plug-circle-xmark::before { content: "\e560"; } +.fa-plus::before { content: "\2b"; } +.fa-plus-circle::before { content: "\f055"; } +.fa-plus-hexagon::before { content: "\f300"; } +.fa-plus-large::before { content: "\e59e"; } +.fa-plus-minus::before { content: "\e43c"; } +.fa-plus-octagon::before { content: "\f301"; } +.fa-plus-square::before { content: "\f0fe"; } +.fa-podcast::before { content: "\f2ce"; } +.fa-podium::before { content: "\f680"; } +.fa-podium-star::before { content: "\f758"; } +.fa-police-box::before { content: "\e021"; } +.fa-poll::before { content: "\f681"; } +.fa-poll-h::before { content: "\f682"; } +.fa-poll-people::before { content: "\f759"; } +.fa-pompebled::before { content: "\e43d"; } +.fa-poo::before { content: "\f2fe"; } +.fa-poo-bolt::before { content: "\f75a"; } +.fa-poo-storm::before { content: "\f75a"; } +.fa-pool-8-ball::before { content: "\e3c5"; } +.fa-poop::before { content: "\f619"; } +.fa-popcorn::before { content: "\f819"; } +.fa-popsicle::before { content: "\e43e"; } +.fa-portal-enter::before { content: "\e022"; } +.fa-portal-exit::before { content: "\e023"; } +.fa-portrait::before { content: "\f3e0"; } +.fa-pot-food::before { content: "\e43f"; } +.fa-potato::before { content: "\e440"; } +.fa-pound-sign::before { content: "\f154"; } +.fa-power-off::before { content: "\f011"; } +.fa-pray::before { content: "\f683"; } +.fa-praying-hands::before { content: "\f684"; } +.fa-prescription::before { content: "\f5b1"; } +.fa-prescription-bottle::before { content: "\f485"; } +.fa-prescription-bottle-alt::before { content: "\f486"; } +.fa-prescription-bottle-medical::before { content: "\f486"; } +.fa-prescription-bottle-pill::before { content: "\e5c0"; } +.fa-presentation::before { content: "\f685"; } +.fa-presentation-screen::before { content: "\f685"; } +.fa-pretzel::before { content: "\e441"; } +.fa-print::before { content: "\f02f"; } +.fa-print-magnifying-glass::before { content: "\f81a"; } +.fa-print-search::before { content: "\f81a"; } +.fa-print-slash::before { content: "\f686"; } +.fa-pro::before { content: "\e235"; } +.fa-procedures::before { content: "\f487"; } +.fa-project-diagram::before { content: "\f542"; } +.fa-projector::before { content: "\f8d6"; } +.fa-pump::before { content: "\e442"; } +.fa-pump-medical::before { content: "\e06a"; } +.fa-pump-soap::before { content: "\e06b"; } +.fa-pumpkin::before { content: "\f707"; } +.fa-puzzle::before { content: "\e443"; } +.fa-puzzle-piece::before { content: "\f12e"; } +.fa-puzzle-piece-alt::before { content: "\e231"; } +.fa-puzzle-piece-simple::before { content: "\e231"; } +.fa-q::before { content: "\51"; } +.fa-qrcode::before { content: "\f029"; } +.fa-question::before { content: "\3f"; } +.fa-question-circle::before { content: "\f059"; } +.fa-question-square::before { content: "\f2fd"; } +.fa-quidditch::before { content: "\f458"; } +.fa-quidditch-broom-ball::before { content: "\f458"; } +.fa-quote-left::before { content: "\f10d"; } +.fa-quote-left-alt::before { content: "\f10d"; } +.fa-quote-right::before { content: "\f10e"; } +.fa-quote-right-alt::before { content: "\f10e"; } +.fa-quotes::before { content: "\e234"; } +.fa-quran::before { content: "\f687"; } +.fa-r::before { content: "\52"; } +.fa-rabbit::before { content: "\f708"; } +.fa-rabbit-fast::before { content: "\f709"; } +.fa-rabbit-running::before { content: "\f709"; } +.fa-raccoon::before { content: "\e613"; } +.fa-racquet::before { content: "\f45a"; } +.fa-radar::before { content: "\e024"; } +.fa-radiation::before { content: "\f7b9"; } +.fa-radiation-alt::before { content: "\f7ba"; } +.fa-radio::before { content: "\f8d7"; } +.fa-radio-alt::before { content: "\f8d8"; } +.fa-radio-tuner::before { content: "\f8d8"; } +.fa-rainbow::before { content: "\f75b"; } +.fa-raindrops::before { content: "\f75c"; } +.fa-ram::before { content: "\f70a"; } +.fa-ramp-loading::before { content: "\f4d4"; } +.fa-random::before { content: "\f074"; } +.fa-ranking-star::before { content: "\e561"; } +.fa-raygun::before { content: "\e025"; } +.fa-receipt::before { content: "\f543"; } +.fa-record-vinyl::before { content: "\f8d9"; } +.fa-rectangle::before { content: "\f2fa"; } +.fa-rectangle-ad::before { content: "\f641"; } +.fa-rectangle-barcode::before { content: "\f463"; } +.fa-rectangle-code::before { content: "\e322"; } +.fa-rectangle-hd::before { content: "\e1ae"; } +.fa-rectangle-history::before { content: "\e4a2"; } +.fa-rectangle-history-circle-plus::before { content: "\e4a3"; } +.fa-rectangle-history-circle-user::before { content: "\e4a4"; } +.fa-rectangle-landscape::before { content: "\f2fa"; } +.fa-rectangle-list::before { content: "\f022"; } +.fa-rectangle-portrait::before { content: "\f2fb"; } +.fa-rectangle-pro::before { content: "\e235"; } +.fa-rectangle-sd::before { content: "\e28a"; } +.fa-rectangle-terminal::before { content: "\e236"; } +.fa-rectangle-times::before { content: "\f410"; } +.fa-rectangle-vertical::before { content: "\f2fb"; } +.fa-rectangle-vertical-history::before { content: "\e237"; } +.fa-rectangle-wide::before { content: "\f2fc"; } +.fa-rectangle-xmark::before { content: "\f410"; } +.fa-rectangles-mixed::before { content: "\e323"; } +.fa-recycle::before { content: "\f1b8"; } +.fa-redo::before { content: "\f01e"; } +.fa-redo-alt::before { content: "\f2f9"; } +.fa-reel::before { content: "\e238"; } +.fa-refresh::before { content: "\f021"; } +.fa-refrigerator::before { content: "\e026"; } +.fa-registered::before { content: "\f25d"; } +.fa-remove::before { content: "\f00d"; } +.fa-remove-format::before { content: "\f87d"; } +.fa-reorder::before { content: "\f550"; } +.fa-repeat::before { content: "\f363"; } +.fa-repeat-1::before { content: "\f365"; } +.fa-repeat-1-alt::before { content: "\f366"; } +.fa-repeat-alt::before { content: "\f364"; } +.fa-reply::before { content: "\f3e5"; } +.fa-reply-all::before { content: "\f122"; } +.fa-reply-clock::before { content: "\e239"; } +.fa-reply-time::before { content: "\e239"; } +.fa-republican::before { content: "\f75e"; } +.fa-restroom::before { content: "\f7bd"; } +.fa-restroom-simple::before { content: "\e23a"; } +.fa-retweet::before { content: "\f079"; } +.fa-retweet-alt::before { content: "\f361"; } +.fa-rhombus::before { content: "\e23b"; } +.fa-ribbon::before { content: "\f4d6"; } +.fa-right::before { content: "\f356"; } +.fa-right-from-bracket::before { content: "\f2f5"; } +.fa-right-from-line::before { content: "\f347"; } +.fa-right-left::before { content: "\f362"; } +.fa-right-left-large::before { content: "\e5e1"; } +.fa-right-long::before { content: "\f30b"; } +.fa-right-long-to-line::before { content: "\e444"; } +.fa-right-to-bracket::before { content: "\f2f6"; } +.fa-right-to-line::before { content: "\f34c"; } +.fa-ring::before { content: "\f70b"; } +.fa-ring-diamond::before { content: "\e5ab"; } +.fa-rings-wedding::before { content: "\f81b"; } +.fa-rmb::before { content: "\f157"; } +.fa-road::before { content: "\f018"; } +.fa-road-barrier::before { content: "\e562"; } +.fa-road-bridge::before { content: "\e563"; } +.fa-road-circle-check::before { content: "\e564"; } +.fa-road-circle-exclamation::before { content: "\e565"; } +.fa-road-circle-xmark::before { content: "\e566"; } +.fa-road-lock::before { content: "\e567"; } +.fa-road-spikes::before { content: "\e568"; } +.fa-robot::before { content: "\f544"; } +.fa-robot-astromech::before { content: "\e2d2"; } +.fa-rocket::before { content: "\f135"; } +.fa-rocket-launch::before { content: "\e027"; } +.fa-rod-asclepius::before { content: "\e579"; } +.fa-rod-snake::before { content: "\e579"; } +.fa-roller-coaster::before { content: "\e324"; } +.fa-rotate::before { content: "\f2f1"; } +.fa-rotate-back::before { content: "\f2ea"; } +.fa-rotate-backward::before { content: "\f2ea"; } +.fa-rotate-exclamation::before { content: "\e23c"; } +.fa-rotate-forward::before { content: "\f2f9"; } +.fa-rotate-left::before { content: "\f2ea"; } +.fa-rotate-right::before { content: "\f2f9"; } +.fa-rouble::before { content: "\f158"; } +.fa-route::before { content: "\f4d7"; } +.fa-route-highway::before { content: "\f61a"; } +.fa-route-interstate::before { content: "\f61b"; } +.fa-router::before { content: "\f8da"; } +.fa-rows::before { content: "\e292"; } +.fa-rss::before { content: "\f09e"; } +.fa-rss-square::before { content: "\f143"; } +.fa-rub::before { content: "\f158"; } +.fa-ruble::before { content: "\f158"; } +.fa-ruble-sign::before { content: "\f158"; } +.fa-rug::before { content: "\e569"; } +.fa-rugby-ball::before { content: "\e3c6"; } +.fa-ruler::before { content: "\f545"; } +.fa-ruler-combined::before { content: "\f546"; } +.fa-ruler-horizontal::before { content: "\f547"; } +.fa-ruler-triangle::before { content: "\f61c"; } +.fa-ruler-vertical::before { content: "\f548"; } +.fa-running::before { content: "\f70c"; } +.fa-rupee::before { content: "\f156"; } +.fa-rupee-sign::before { content: "\f156"; } +.fa-rupiah-sign::before { content: "\e23d"; } +.fa-rv::before { content: "\f7be"; } +.fa-s::before { content: "\53"; } +.fa-sack::before { content: "\f81c"; } +.fa-sack-dollar::before { content: "\f81d"; } +.fa-sack-xmark::before { content: "\e56a"; } +.fa-sad-cry::before { content: "\f5b3"; } +.fa-sad-tear::before { content: "\f5b4"; } +.fa-sailboat::before { content: "\e445"; } +.fa-salad::before { content: "\f81e"; } +.fa-salt-shaker::before { content: "\e446"; } +.fa-sandwich::before { content: "\f81f"; } +.fa-satellite::before { content: "\f7bf"; } +.fa-satellite-dish::before { content: "\f7c0"; } +.fa-sausage::before { content: "\f820"; } +.fa-save::before { content: "\f0c7"; } +.fa-save-circle-arrow-right::before { content: "\e180"; } +.fa-save-circle-xmark::before { content: "\e181"; } +.fa-save-times::before { content: "\e181"; } +.fa-sax-hot::before { content: "\f8db"; } +.fa-saxophone::before { content: "\f8dc"; } +.fa-saxophone-fire::before { content: "\f8db"; } +.fa-scale-balanced::before { content: "\f24e"; } +.fa-scale-unbalanced::before { content: "\f515"; } +.fa-scale-unbalanced-flip::before { content: "\f516"; } +.fa-scalpel::before { content: "\f61d"; } +.fa-scalpel-line-dashed::before { content: "\f61e"; } +.fa-scalpel-path::before { content: "\f61e"; } +.fa-scanner::before { content: "\f488"; } +.fa-scanner-gun::before { content: "\f488"; } +.fa-scanner-image::before { content: "\f8f3"; } +.fa-scanner-keyboard::before { content: "\f489"; } +.fa-scanner-touchscreen::before { content: "\f48a"; } +.fa-scarecrow::before { content: "\f70d"; } +.fa-scarf::before { content: "\f7c1"; } +.fa-school::before { content: "\f549"; } +.fa-school-circle-check::before { content: "\e56b"; } +.fa-school-circle-exclamation::before { content: "\e56c"; } +.fa-school-circle-xmark::before { content: "\e56d"; } +.fa-school-flag::before { content: "\e56e"; } +.fa-school-lock::before { content: "\e56f"; } +.fa-scissors::before { content: "\f0c4"; } +.fa-screen-users::before { content: "\f63d"; } +.fa-screencast::before { content: "\e23e"; } +.fa-screenshot::before { content: "\e0da"; } +.fa-screwdriver::before { content: "\f54a"; } +.fa-screwdriver-wrench::before { content: "\f7d9"; } +.fa-scribble::before { content: "\e23f"; } +.fa-scroll::before { content: "\f70e"; } +.fa-scroll-old::before { content: "\f70f"; } +.fa-scroll-ribbon::before { content: "\f5ea"; } +.fa-scroll-torah::before { content: "\f6a0"; } +.fa-scrubber::before { content: "\f2f8"; } +.fa-scythe::before { content: "\f710"; } +.fa-sd-card::before { content: "\f7c2"; } +.fa-sd-cards::before { content: "\e240"; } +.fa-seal::before { content: "\e241"; } +.fa-seal-exclamation::before { content: "\e242"; } +.fa-seal-question::before { content: "\e243"; } +.fa-search::before { content: "\f002"; } +.fa-search-dollar::before { content: "\f688"; } +.fa-search-location::before { content: "\f689"; } +.fa-search-minus::before { content: "\f010"; } +.fa-search-plus::before { content: "\f00e"; } +.fa-seat-airline::before { content: "\e244"; } +.fa-section::before { content: "\e447"; } +.fa-seedling::before { content: "\f4d8"; } +.fa-semicolon::before { content: "\3b"; } +.fa-send::before { content: "\e20a"; } +.fa-send-back::before { content: "\f87e"; } +.fa-send-backward::before { content: "\f87f"; } +.fa-sensor::before { content: "\e028"; } +.fa-sensor-alert::before { content: "\e029"; } +.fa-sensor-cloud::before { content: "\e02c"; } +.fa-sensor-fire::before { content: "\e02a"; } +.fa-sensor-on::before { content: "\e02b"; } +.fa-sensor-smoke::before { content: "\e02c"; } +.fa-sensor-triangle-exclamation::before { content: "\e029"; } +.fa-server::before { content: "\f233"; } +.fa-shapes::before { content: "\f61f"; } +.fa-share::before { content: "\f064"; } +.fa-share-all::before { content: "\f367"; } +.fa-share-alt::before { content: "\f1e0"; } +.fa-share-alt-square::before { content: "\f1e1"; } +.fa-share-from-square::before { content: "\f14d"; } +.fa-share-nodes::before { content: "\f1e0"; } +.fa-share-square::before { content: "\f14d"; } +.fa-sheep::before { content: "\f711"; } +.fa-sheet-plastic::before { content: "\e571"; } +.fa-shekel::before { content: "\f20b"; } +.fa-shekel-sign::before { content: "\f20b"; } +.fa-shelves::before { content: "\f480"; } +.fa-shelves-empty::before { content: "\e246"; } +.fa-sheqel::before { content: "\f20b"; } +.fa-sheqel-sign::before { content: "\f20b"; } +.fa-shield::before { content: "\f132"; } +.fa-shield-alt::before { content: "\f3ed"; } +.fa-shield-blank::before { content: "\f132"; } +.fa-shield-cat::before { content: "\e572"; } +.fa-shield-check::before { content: "\f2f7"; } +.fa-shield-cross::before { content: "\f712"; } +.fa-shield-dog::before { content: "\e573"; } +.fa-shield-exclamation::before { content: "\e247"; } +.fa-shield-halved::before { content: "\f3ed"; } +.fa-shield-heart::before { content: "\e574"; } +.fa-shield-keyhole::before { content: "\e248"; } +.fa-shield-minus::before { content: "\e249"; } +.fa-shield-plus::before { content: "\e24a"; } +.fa-shield-quartered::before { content: "\e575"; } +.fa-shield-slash::before { content: "\e24b"; } +.fa-shield-times::before { content: "\e24c"; } +.fa-shield-virus::before { content: "\e06c"; } +.fa-shield-xmark::before { content: "\e24c"; } +.fa-ship::before { content: "\f21a"; } +.fa-shipping-fast::before { content: "\f48b"; } +.fa-shipping-timed::before { content: "\f48c"; } +.fa-shirt::before { content: "\f553"; } +.fa-shirt-long-sleeve::before { content: "\e3c7"; } +.fa-shirt-running::before { content: "\e3c8"; } +.fa-shirt-tank-top::before { content: "\e3c9"; } +.fa-shish-kebab::before { content: "\f821"; } +.fa-shoe-prints::before { content: "\f54b"; } +.fa-shop::before { content: "\f54f"; } +.fa-shop-lock::before { content: "\e4a5"; } +.fa-shop-slash::before { content: "\e070"; } +.fa-shopping-bag::before { content: "\f290"; } +.fa-shopping-basket::before { content: "\f291"; } +.fa-shopping-basket-alt::before { content: "\e0af"; } +.fa-shopping-cart::before { content: "\f07a"; } +.fa-shortcake::before { content: "\e3e5"; } +.fa-shovel::before { content: "\f713"; } +.fa-shovel-snow::before { content: "\f7c3"; } +.fa-shower::before { content: "\f2cc"; } +.fa-shower-alt::before { content: "\e24d"; } +.fa-shower-down::before { content: "\e24d"; } +.fa-shredder::before { content: "\f68a"; } +.fa-shrimp::before { content: "\e448"; } +.fa-shuffle::before { content: "\f074"; } +.fa-shutters::before { content: "\e449"; } +.fa-shuttle-space::before { content: "\f197"; } +.fa-shuttle-van::before { content: "\f5b6"; } +.fa-shuttlecock::before { content: "\f45b"; } +.fa-sickle::before { content: "\f822"; } +.fa-sidebar::before { content: "\e24e"; } +.fa-sidebar-flip::before { content: "\e24f"; } +.fa-sigma::before { content: "\f68b"; } +.fa-sign::before { content: "\f4d9"; } +.fa-sign-hanging::before { content: "\f4d9"; } +.fa-sign-in::before { content: "\f090"; } +.fa-sign-in-alt::before { content: "\f2f6"; } +.fa-sign-language::before { content: "\f2a7"; } +.fa-sign-out::before { content: "\f08b"; } +.fa-sign-out-alt::before { content: "\f2f5"; } +.fa-signal::before { content: "\f012"; } +.fa-signal-1::before { content: "\f68c"; } +.fa-signal-2::before { content: "\f68d"; } +.fa-signal-3::before { content: "\f68e"; } +.fa-signal-4::before { content: "\f68f"; } +.fa-signal-5::before { content: "\f012"; } +.fa-signal-alt::before { content: "\f690"; } +.fa-signal-alt-1::before { content: "\f691"; } +.fa-signal-alt-2::before { content: "\f692"; } +.fa-signal-alt-3::before { content: "\f693"; } +.fa-signal-alt-4::before { content: "\f690"; } +.fa-signal-alt-slash::before { content: "\f694"; } +.fa-signal-bars::before { content: "\f690"; } +.fa-signal-bars-fair::before { content: "\f692"; } +.fa-signal-bars-good::before { content: "\f693"; } +.fa-signal-bars-slash::before { content: "\f694"; } +.fa-signal-bars-strong::before { content: "\f690"; } +.fa-signal-bars-weak::before { content: "\f691"; } +.fa-signal-fair::before { content: "\f68d"; } +.fa-signal-good::before { content: "\f68e"; } +.fa-signal-perfect::before { content: "\f012"; } +.fa-signal-slash::before { content: "\f695"; } +.fa-signal-stream::before { content: "\f8dd"; } +.fa-signal-stream-slash::before { content: "\e250"; } +.fa-signal-strong::before { content: "\f68f"; } +.fa-signal-weak::before { content: "\f68c"; } +.fa-signature::before { content: "\f5b7"; } +.fa-signature-lock::before { content: "\e3ca"; } +.fa-signature-slash::before { content: "\e3cb"; } +.fa-signing::before { content: "\f2a7"; } +.fa-signs-post::before { content: "\f277"; } +.fa-sim-card::before { content: "\f7c4"; } +.fa-sim-cards::before { content: "\e251"; } +.fa-sink::before { content: "\e06d"; } +.fa-siren::before { content: "\e02d"; } +.fa-siren-on::before { content: "\e02e"; } +.fa-sitemap::before { content: "\f0e8"; } +.fa-skating::before { content: "\f7c5"; } +.fa-skeleton::before { content: "\f620"; } +.fa-skeleton-ribs::before { content: "\e5cb"; } +.fa-ski-boot::before { content: "\e3cc"; } +.fa-ski-boot-ski::before { content: "\e3cd"; } +.fa-ski-jump::before { content: "\f7c7"; } +.fa-ski-lift::before { content: "\f7c8"; } +.fa-skiing::before { content: "\f7c9"; } +.fa-skiing-nordic::before { content: "\f7ca"; } +.fa-skull::before { content: "\f54c"; } +.fa-skull-cow::before { content: "\f8de"; } +.fa-skull-crossbones::before { content: "\f714"; } +.fa-slash::before { content: "\f715"; } +.fa-slash-back::before { content: "\5c"; } +.fa-slash-forward::before { content: "\2f"; } +.fa-sledding::before { content: "\f7cb"; } +.fa-sleigh::before { content: "\f7cc"; } +.fa-slider::before { content: "\e252"; } +.fa-sliders::before { content: "\f1de"; } +.fa-sliders-h::before { content: "\f1de"; } +.fa-sliders-h-square::before { content: "\f3f0"; } +.fa-sliders-simple::before { content: "\e253"; } +.fa-sliders-up::before { content: "\f3f1"; } +.fa-sliders-v::before { content: "\f3f1"; } +.fa-sliders-v-square::before { content: "\f3f2"; } +.fa-slot-machine::before { content: "\e3ce"; } +.fa-smile::before { content: "\f118"; } +.fa-smile-beam::before { content: "\f5b8"; } +.fa-smile-plus::before { content: "\f5b9"; } +.fa-smile-wink::before { content: "\f4da"; } +.fa-smog::before { content: "\f75f"; } +.fa-smoke::before { content: "\f760"; } +.fa-smoking::before { content: "\f48d"; } +.fa-smoking-ban::before { content: "\f54d"; } +.fa-sms::before { content: "\f7cd"; } +.fa-snake::before { content: "\f716"; } +.fa-snooze::before { content: "\f880"; } +.fa-snow-blowing::before { content: "\f761"; } +.fa-snowboarding::before { content: "\f7ce"; } +.fa-snowflake::before { content: "\f2dc"; } +.fa-snowflake-droplets::before { content: "\e5c1"; } +.fa-snowflakes::before { content: "\f7cf"; } +.fa-snowman::before { content: "\f7d0"; } +.fa-snowman-head::before { content: "\f79b"; } +.fa-snowmobile::before { content: "\f7d1"; } +.fa-snowplow::before { content: "\f7d2"; } +.fa-soap::before { content: "\e06e"; } +.fa-soccer-ball::before { content: "\f1e3"; } +.fa-socks::before { content: "\f696"; } +.fa-soft-serve::before { content: "\e400"; } +.fa-solar-panel::before { content: "\f5ba"; } +.fa-solar-system::before { content: "\e02f"; } +.fa-sort::before { content: "\f0dc"; } +.fa-sort-alpha-asc::before { content: "\f15d"; } +.fa-sort-alpha-desc::before { content: "\f881"; } +.fa-sort-alpha-down::before { content: "\f15d"; } +.fa-sort-alpha-down-alt::before { content: "\f881"; } +.fa-sort-alpha-up::before { content: "\f15e"; } +.fa-sort-alpha-up-alt::before { content: "\f882"; } +.fa-sort-alt::before { content: "\f883"; } +.fa-sort-amount-asc::before { content: "\f160"; } +.fa-sort-amount-desc::before { content: "\f884"; } +.fa-sort-amount-down::before { content: "\f160"; } +.fa-sort-amount-down-alt::before { content: "\f884"; } +.fa-sort-amount-up::before { content: "\f161"; } +.fa-sort-amount-up-alt::before { content: "\f885"; } +.fa-sort-asc::before { content: "\f0de"; } +.fa-sort-circle::before { content: "\e030"; } +.fa-sort-circle-down::before { content: "\e031"; } +.fa-sort-circle-up::before { content: "\e032"; } +.fa-sort-desc::before { content: "\f0dd"; } +.fa-sort-down::before { content: "\f0dd"; } +.fa-sort-numeric-asc::before { content: "\f162"; } +.fa-sort-numeric-desc::before { content: "\f886"; } +.fa-sort-numeric-down::before { content: "\f162"; } +.fa-sort-numeric-down-alt::before { content: "\f886"; } +.fa-sort-numeric-up::before { content: "\f163"; } +.fa-sort-numeric-up-alt::before { content: "\f887"; } +.fa-sort-shapes-down::before { content: "\f888"; } +.fa-sort-shapes-down-alt::before { content: "\f889"; } +.fa-sort-shapes-up::before { content: "\f88a"; } +.fa-sort-shapes-up-alt::before { content: "\f88b"; } +.fa-sort-size-down::before { content: "\f88c"; } +.fa-sort-size-down-alt::before { content: "\f88d"; } +.fa-sort-size-up::before { content: "\f88e"; } +.fa-sort-size-up-alt::before { content: "\f88f"; } +.fa-sort-up::before { content: "\f0de"; } +.fa-sort-up-down::before { content: "\e099"; } +.fa-soup::before { content: "\f823"; } +.fa-spa::before { content: "\f5bb"; } +.fa-space-shuttle::before { content: "\f197"; } +.fa-space-station-moon::before { content: "\e033"; } +.fa-space-station-moon-alt::before { content: "\e034"; } +.fa-space-station-moon-construction::before { content: "\e034"; } +.fa-spade::before { content: "\f2f4"; } +.fa-spaghetti-monster-flying::before { content: "\f67b"; } +.fa-sparkle::before { content: "\e5d6"; } +.fa-sparkles::before { content: "\f890"; } +.fa-speaker::before { content: "\f8df"; } +.fa-speakers::before { content: "\f8e0"; } +.fa-spell-check::before { content: "\f891"; } +.fa-spider::before { content: "\f717"; } +.fa-spider-black-widow::before { content: "\f718"; } +.fa-spider-web::before { content: "\f719"; } +.fa-spinner::before { content: "\f110"; } +.fa-spinner-third::before { content: "\f3f4"; } +.fa-split::before { content: "\e254"; } +.fa-splotch::before { content: "\f5bc"; } +.fa-spoon::before { content: "\f2e5"; } +.fa-sportsball::before { content: "\e44b"; } +.fa-spray-can::before { content: "\f5bd"; } +.fa-spray-can-sparkles::before { content: "\f5d0"; } +.fa-sprinkler::before { content: "\e035"; } +.fa-sprinkler-ceiling::before { content: "\e44c"; } +.fa-sprout::before { content: "\f4d8"; } +.fa-square::before { content: "\f0c8"; } +.fa-square-0::before { content: "\e255"; } +.fa-square-1::before { content: "\e256"; } +.fa-square-2::before { content: "\e257"; } +.fa-square-3::before { content: "\e258"; } +.fa-square-4::before { content: "\e259"; } +.fa-square-5::before { content: "\e25a"; } +.fa-square-6::before { content: "\e25b"; } +.fa-square-7::before { content: "\e25c"; } +.fa-square-8::before { content: "\e25d"; } +.fa-square-9::before { content: "\e25e"; } +.fa-square-a::before { content: "\e25f"; } +.fa-square-a-lock::before { content: "\e44d"; } +.fa-square-ampersand::before { content: "\e260"; } +.fa-square-arrow-down::before { content: "\f339"; } +.fa-square-arrow-down-left::before { content: "\e261"; } +.fa-square-arrow-down-right::before { content: "\e262"; } +.fa-square-arrow-left::before { content: "\f33a"; } +.fa-square-arrow-right::before { content: "\f33b"; } +.fa-square-arrow-up::before { content: "\f33c"; } +.fa-square-arrow-up-left::before { content: "\e263"; } +.fa-square-arrow-up-right::before { content: "\f14c"; } +.fa-square-b::before { content: "\e264"; } +.fa-square-bolt::before { content: "\e265"; } +.fa-square-c::before { content: "\e266"; } +.fa-square-caret-down::before { content: "\f150"; } +.fa-square-caret-left::before { content: "\f191"; } +.fa-square-caret-right::before { content: "\f152"; } +.fa-square-caret-up::before { content: "\f151"; } +.fa-square-check::before { content: "\f14a"; } +.fa-square-chevron-down::before { content: "\f329"; } +.fa-square-chevron-left::before { content: "\f32a"; } +.fa-square-chevron-right::before { content: "\f32b"; } +.fa-square-chevron-up::before { content: "\f32c"; } +.fa-square-code::before { content: "\e267"; } +.fa-square-d::before { content: "\e268"; } +.fa-square-dashed::before { content: "\e269"; } +.fa-square-dashed-circle-plus::before { content: "\e5c2"; } +.fa-square-divide::before { content: "\e26a"; } +.fa-square-dollar::before { content: "\f2e9"; } +.fa-square-down::before { content: "\f350"; } +.fa-square-down-left::before { content: "\e26b"; } +.fa-square-down-right::before { content: "\e26c"; } +.fa-square-e::before { content: "\e26d"; } +.fa-square-ellipsis::before { content: "\e26e"; } +.fa-square-ellipsis-vertical::before { content: "\e26f"; } +.fa-square-envelope::before { content: "\f199"; } +.fa-square-exclamation::before { content: "\f321"; } +.fa-square-f::before { content: "\e270"; } +.fa-square-fragile::before { content: "\f49b"; } +.fa-square-full::before { content: "\f45c"; } +.fa-square-g::before { content: "\e271"; } +.fa-square-h::before { content: "\f0fd"; } +.fa-square-heart::before { content: "\f4c8"; } +.fa-square-i::before { content: "\e272"; } +.fa-square-info::before { content: "\f30f"; } +.fa-square-j::before { content: "\e273"; } +.fa-square-k::before { content: "\e274"; } +.fa-square-kanban::before { content: "\e488"; } +.fa-square-l::before { content: "\e275"; } +.fa-square-left::before { content: "\f351"; } +.fa-square-list::before { content: "\e489"; } +.fa-square-m::before { content: "\e276"; } +.fa-square-minus::before { content: "\f146"; } +.fa-square-n::before { content: "\e277"; } +.fa-square-nfi::before { content: "\e576"; } +.fa-square-o::before { content: "\e278"; } +.fa-square-p::before { content: "\e279"; } +.fa-square-parking::before { content: "\f540"; } +.fa-square-parking-slash::before { content: "\f617"; } +.fa-square-pen::before { content: "\f14b"; } +.fa-square-person-confined::before { content: "\e577"; } +.fa-square-phone::before { content: "\f098"; } +.fa-square-phone-flip::before { content: "\f87b"; } +.fa-square-phone-hangup::before { content: "\e27a"; } +.fa-square-plus::before { content: "\f0fe"; } +.fa-square-poll-horizontal::before { content: "\f682"; } +.fa-square-poll-vertical::before { content: "\f681"; } +.fa-square-q::before { content: "\e27b"; } +.fa-square-quarters::before { content: "\e44e"; } +.fa-square-question::before { content: "\f2fd"; } +.fa-square-quote::before { content: "\e329"; } +.fa-square-r::before { content: "\e27c"; } +.fa-square-right::before { content: "\f352"; } +.fa-square-ring::before { content: "\e44f"; } +.fa-square-root::before { content: "\f697"; } +.fa-square-root-alt::before { content: "\f698"; } +.fa-square-root-variable::before { content: "\f698"; } +.fa-square-rss::before { content: "\f143"; } +.fa-square-s::before { content: "\e27d"; } +.fa-square-share-nodes::before { content: "\f1e1"; } +.fa-square-sliders::before { content: "\f3f0"; } +.fa-square-sliders-vertical::before { content: "\f3f2"; } +.fa-square-small::before { content: "\e27e"; } +.fa-square-star::before { content: "\e27f"; } +.fa-square-t::before { content: "\e280"; } +.fa-square-terminal::before { content: "\e32a"; } +.fa-square-this-way-up::before { content: "\f49f"; } +.fa-square-u::before { content: "\e281"; } +.fa-square-up::before { content: "\f353"; } +.fa-square-up-left::before { content: "\e282"; } +.fa-square-up-right::before { content: "\f360"; } +.fa-square-user::before { content: "\e283"; } +.fa-square-v::before { content: "\e284"; } +.fa-square-virus::before { content: "\e578"; } +.fa-square-w::before { content: "\e285"; } +.fa-square-wine-glass-crack::before { content: "\f49b"; } +.fa-square-x::before { content: "\e286"; } +.fa-square-xmark::before { content: "\f2d3"; } +.fa-square-y::before { content: "\e287"; } +.fa-square-z::before { content: "\e288"; } +.fa-squid::before { content: "\e450"; } +.fa-squirrel::before { content: "\f71a"; } +.fa-staff::before { content: "\f71b"; } +.fa-staff-aesculapius::before { content: "\e579"; } +.fa-staff-snake::before { content: "\e579"; } +.fa-stairs::before { content: "\e289"; } +.fa-stamp::before { content: "\f5bf"; } +.fa-standard-definition::before { content: "\e28a"; } +.fa-stapler::before { content: "\e5af"; } +.fa-star::before { content: "\f005"; } +.fa-star-and-crescent::before { content: "\f699"; } +.fa-star-christmas::before { content: "\f7d4"; } +.fa-star-circle::before { content: "\e123"; } +.fa-star-exclamation::before { content: "\f2f3"; } +.fa-star-half::before { content: "\f089"; } +.fa-star-half-alt::before { content: "\f5c0"; } +.fa-star-half-stroke::before { content: "\f5c0"; } +.fa-star-of-david::before { content: "\f69a"; } +.fa-star-of-life::before { content: "\f621"; } +.fa-star-sharp::before { content: "\e28b"; } +.fa-star-sharp-half::before { content: "\e28c"; } +.fa-star-sharp-half-alt::before { content: "\e28d"; } +.fa-star-sharp-half-stroke::before { content: "\e28d"; } +.fa-star-shooting::before { content: "\e036"; } +.fa-starfighter::before { content: "\e037"; } +.fa-starfighter-alt::before { content: "\e038"; } +.fa-starfighter-alt-advanced::before { content: "\e28e"; } +.fa-starfighter-twin-ion-engine::before { content: "\e038"; } +.fa-starfighter-twin-ion-engine-advanced::before { content: "\e28e"; } +.fa-stars::before { content: "\f762"; } +.fa-starship::before { content: "\e039"; } +.fa-starship-freighter::before { content: "\e03a"; } +.fa-steak::before { content: "\f824"; } +.fa-steering-wheel::before { content: "\f622"; } +.fa-step-backward::before { content: "\f048"; } +.fa-step-forward::before { content: "\f051"; } +.fa-sterling-sign::before { content: "\f154"; } +.fa-stethoscope::before { content: "\f0f1"; } +.fa-sticky-note::before { content: "\f249"; } +.fa-stocking::before { content: "\f7d5"; } +.fa-stomach::before { content: "\f623"; } +.fa-stop::before { content: "\f04d"; } +.fa-stop-circle::before { content: "\f28d"; } +.fa-stopwatch::before { content: "\f2f2"; } +.fa-stopwatch-20::before { content: "\e06f"; } +.fa-store::before { content: "\f54e"; } +.fa-store-alt::before { content: "\f54f"; } +.fa-store-alt-slash::before { content: "\e070"; } +.fa-store-lock::before { content: "\e4a6"; } +.fa-store-slash::before { content: "\e071"; } +.fa-strawberry::before { content: "\e32b"; } +.fa-stream::before { content: "\f550"; } +.fa-street-view::before { content: "\f21d"; } +.fa-stretcher::before { content: "\f825"; } +.fa-strikethrough::before { content: "\f0cc"; } +.fa-stroopwafel::before { content: "\f551"; } +.fa-subscript::before { content: "\f12c"; } +.fa-subtitles::before { content: "\e60f"; } +.fa-subtitles-slash::before { content: "\e610"; } +.fa-subtract::before { content: "\f068"; } +.fa-subway::before { content: "\f239"; } +.fa-subway-tunnel::before { content: "\e2a3"; } +.fa-suitcase::before { content: "\f0f2"; } +.fa-suitcase-medical::before { content: "\f0fa"; } +.fa-suitcase-rolling::before { content: "\f5c1"; } +.fa-sun::before { content: "\f185"; } +.fa-sun-alt::before { content: "\e28f"; } +.fa-sun-bright::before { content: "\e28f"; } +.fa-sun-cloud::before { content: "\f763"; } +.fa-sun-dust::before { content: "\f764"; } +.fa-sun-haze::before { content: "\f765"; } +.fa-sun-plant-wilt::before { content: "\e57a"; } +.fa-sunglasses::before { content: "\f892"; } +.fa-sunrise::before { content: "\f766"; } +.fa-sunset::before { content: "\f767"; } +.fa-superscript::before { content: "\f12b"; } +.fa-surprise::before { content: "\f5c2"; } +.fa-sushi::before { content: "\e48a"; } +.fa-sushi-roll::before { content: "\e48b"; } +.fa-swap::before { content: "\e609"; } +.fa-swap-arrows::before { content: "\e60a"; } +.fa-swatchbook::before { content: "\f5c3"; } +.fa-swimmer::before { content: "\f5c4"; } +.fa-swimming-pool::before { content: "\f5c5"; } +.fa-sword::before { content: "\f71c"; } +.fa-sword-laser::before { content: "\e03b"; } +.fa-sword-laser-alt::before { content: "\e03c"; } +.fa-swords::before { content: "\f71d"; } +.fa-swords-laser::before { content: "\e03d"; } +.fa-symbols::before { content: "\f86e"; } +.fa-synagogue::before { content: "\f69b"; } +.fa-sync::before { content: "\f021"; } +.fa-sync-alt::before { content: "\f2f1"; } +.fa-syringe::before { content: "\f48e"; } +.fa-t::before { content: "\54"; } +.fa-t-shirt::before { content: "\f553"; } +.fa-table::before { content: "\f0ce"; } +.fa-table-cells::before { content: "\f00a"; } +.fa-table-cells-large::before { content: "\f009"; } +.fa-table-columns::before { content: "\f0db"; } +.fa-table-layout::before { content: "\e290"; } +.fa-table-list::before { content: "\f00b"; } +.fa-table-picnic::before { content: "\e32d"; } +.fa-table-pivot::before { content: "\e291"; } +.fa-table-rows::before { content: "\e292"; } +.fa-table-tennis::before { content: "\f45d"; } +.fa-table-tennis-paddle-ball::before { content: "\f45d"; } +.fa-table-tree::before { content: "\e293"; } +.fa-tablet::before { content: "\f3fb"; } +.fa-tablet-alt::before { content: "\f3fa"; } +.fa-tablet-android::before { content: "\f3fb"; } +.fa-tablet-android-alt::before { content: "\f3fc"; } +.fa-tablet-button::before { content: "\f10a"; } +.fa-tablet-rugged::before { content: "\f48f"; } +.fa-tablet-screen::before { content: "\f3fc"; } +.fa-tablet-screen-button::before { content: "\f3fa"; } +.fa-tablets::before { content: "\f490"; } +.fa-tachograph-digital::before { content: "\f566"; } +.fa-tachometer::before { content: "\f62a"; } +.fa-tachometer-alt::before { content: "\f625"; } +.fa-tachometer-alt-average::before { content: "\f624"; } +.fa-tachometer-alt-fast::before { content: "\f625"; } +.fa-tachometer-alt-fastest::before { content: "\f626"; } +.fa-tachometer-alt-slow::before { content: "\f627"; } +.fa-tachometer-alt-slowest::before { content: "\f628"; } +.fa-tachometer-average::before { content: "\f629"; } +.fa-tachometer-fast::before { content: "\f62a"; } +.fa-tachometer-fastest::before { content: "\f62b"; } +.fa-tachometer-slow::before { content: "\f62c"; } +.fa-tachometer-slowest::before { content: "\f62d"; } +.fa-taco::before { content: "\f826"; } +.fa-tag::before { content: "\f02b"; } +.fa-tags::before { content: "\f02c"; } +.fa-tally::before { content: "\f69c"; } +.fa-tally-1::before { content: "\e294"; } +.fa-tally-2::before { content: "\e295"; } +.fa-tally-3::before { content: "\e296"; } +.fa-tally-4::before { content: "\e297"; } +.fa-tally-5::before { content: "\f69c"; } +.fa-tamale::before { content: "\e451"; } +.fa-tanakh::before { content: "\f827"; } +.fa-tank-water::before { content: "\e452"; } +.fa-tape::before { content: "\f4db"; } +.fa-tarp::before { content: "\e57b"; } +.fa-tarp-droplet::before { content: "\e57c"; } +.fa-tasks::before { content: "\f0ae"; } +.fa-tasks-alt::before { content: "\f828"; } +.fa-taxi::before { content: "\f1ba"; } +.fa-taxi-bus::before { content: "\e298"; } +.fa-teddy-bear::before { content: "\e3cf"; } +.fa-teeth::before { content: "\f62e"; } +.fa-teeth-open::before { content: "\f62f"; } +.fa-telescope::before { content: "\e03e"; } +.fa-teletype::before { content: "\f1e4"; } +.fa-teletype-answer::before { content: "\e2b9"; } +.fa-television::before { content: "\f26c"; } +.fa-temperature-0::before { content: "\f2cb"; } +.fa-temperature-1::before { content: "\f2ca"; } +.fa-temperature-2::before { content: "\f2c9"; } +.fa-temperature-3::before { content: "\f2c8"; } +.fa-temperature-4::before { content: "\f2c7"; } +.fa-temperature-arrow-down::before { content: "\e03f"; } +.fa-temperature-arrow-up::before { content: "\e040"; } +.fa-temperature-down::before { content: "\e03f"; } +.fa-temperature-empty::before { content: "\f2cb"; } +.fa-temperature-frigid::before { content: "\f768"; } +.fa-temperature-full::before { content: "\f2c7"; } +.fa-temperature-half::before { content: "\f2c9"; } +.fa-temperature-high::before { content: "\f769"; } +.fa-temperature-hot::before { content: "\f76a"; } +.fa-temperature-list::before { content: "\e299"; } +.fa-temperature-low::before { content: "\f76b"; } +.fa-temperature-quarter::before { content: "\f2ca"; } +.fa-temperature-snow::before { content: "\f768"; } +.fa-temperature-sun::before { content: "\f76a"; } +.fa-temperature-three-quarters::before { content: "\f2c8"; } +.fa-temperature-up::before { content: "\e040"; } +.fa-tenge::before { content: "\f7d7"; } +.fa-tenge-sign::before { content: "\f7d7"; } +.fa-tennis-ball::before { content: "\f45e"; } +.fa-tent::before { content: "\e57d"; } +.fa-tent-arrow-down-to-line::before { content: "\e57e"; } +.fa-tent-arrow-left-right::before { content: "\e57f"; } +.fa-tent-arrow-turn-left::before { content: "\e580"; } +.fa-tent-arrows-down::before { content: "\e581"; } +.fa-tents::before { content: "\e582"; } +.fa-terminal::before { content: "\f120"; } +.fa-text::before { content: "\f893"; } +.fa-text-height::before { content: "\f034"; } +.fa-text-size::before { content: "\f894"; } +.fa-text-slash::before { content: "\f87d"; } +.fa-text-width::before { content: "\f035"; } +.fa-th::before { content: "\f00a"; } +.fa-th-large::before { content: "\f009"; } +.fa-th-list::before { content: "\f00b"; } +.fa-theater-masks::before { content: "\f630"; } +.fa-thermometer::before { content: "\f491"; } +.fa-thermometer-0::before { content: "\f2cb"; } +.fa-thermometer-1::before { content: "\f2ca"; } +.fa-thermometer-2::before { content: "\f2c9"; } +.fa-thermometer-3::before { content: "\f2c8"; } +.fa-thermometer-4::before { content: "\f2c7"; } +.fa-thermometer-empty::before { content: "\f2cb"; } +.fa-thermometer-full::before { content: "\f2c7"; } +.fa-thermometer-half::before { content: "\f2c9"; } +.fa-thermometer-quarter::before { content: "\f2ca"; } +.fa-thermometer-three-quarters::before { content: "\f2c8"; } +.fa-theta::before { content: "\f69e"; } +.fa-thought-bubble::before { content: "\e32e"; } +.fa-thumb-tack::before { content: "\f08d"; } +.fa-thumbs-down::before { content: "\f165"; } +.fa-thumbs-up::before { content: "\f164"; } +.fa-thumbtack::before { content: "\f08d"; } +.fa-thunderstorm::before { content: "\f76c"; } +.fa-thunderstorm-moon::before { content: "\f76d"; } +.fa-thunderstorm-sun::before { content: "\f76e"; } +.fa-tick::before { content: "\e32f"; } +.fa-ticket::before { content: "\f145"; } +.fa-ticket-airline::before { content: "\e29a"; } +.fa-ticket-alt::before { content: "\f3ff"; } +.fa-ticket-simple::before { content: "\f3ff"; } +.fa-tickets-airline::before { content: "\e29b"; } +.fa-tilde::before { content: "\7e"; } +.fa-timeline::before { content: "\e29c"; } +.fa-timeline-arrow::before { content: "\e29d"; } +.fa-timer::before { content: "\e29e"; } +.fa-times::before { content: "\f00d"; } +.fa-times-circle::before { content: "\f057"; } +.fa-times-hexagon::before { content: "\f2ee"; } +.fa-times-octagon::before { content: "\f2f0"; } +.fa-times-rectangle::before { content: "\f410"; } +.fa-times-square::before { content: "\f2d3"; } +.fa-times-to-slot::before { content: "\f771"; } +.fa-tint::before { content: "\f043"; } +.fa-tint-slash::before { content: "\f5c7"; } +.fa-tire::before { content: "\f631"; } +.fa-tire-flat::before { content: "\f632"; } +.fa-tire-pressure-warning::before { content: "\f633"; } +.fa-tire-rugged::before { content: "\f634"; } +.fa-tired::before { content: "\f5c8"; } +.fa-toggle-large-off::before { content: "\e5b0"; } +.fa-toggle-large-on::before { content: "\e5b1"; } +.fa-toggle-off::before { content: "\f204"; } +.fa-toggle-on::before { content: "\f205"; } +.fa-toilet::before { content: "\f7d8"; } +.fa-toilet-paper::before { content: "\f71e"; } +.fa-toilet-paper-alt::before { content: "\f71f"; } +.fa-toilet-paper-blank::before { content: "\f71f"; } +.fa-toilet-paper-blank-under::before { content: "\e29f"; } +.fa-toilet-paper-check::before { content: "\e5b2"; } +.fa-toilet-paper-reverse::before { content: "\e2a0"; } +.fa-toilet-paper-reverse-alt::before { content: "\e29f"; } +.fa-toilet-paper-reverse-slash::before { content: "\e2a1"; } +.fa-toilet-paper-slash::before { content: "\e072"; } +.fa-toilet-paper-under::before { content: "\e2a0"; } +.fa-toilet-paper-under-slash::before { content: "\e2a1"; } +.fa-toilet-paper-xmark::before { content: "\e5b3"; } +.fa-toilet-portable::before { content: "\e583"; } +.fa-toilets-portable::before { content: "\e584"; } +.fa-tomato::before { content: "\e330"; } +.fa-tombstone::before { content: "\f720"; } +.fa-tombstone-alt::before { content: "\f721"; } +.fa-tombstone-blank::before { content: "\f721"; } +.fa-toolbox::before { content: "\f552"; } +.fa-tools::before { content: "\f7d9"; } +.fa-tooth::before { content: "\f5c9"; } +.fa-toothbrush::before { content: "\f635"; } +.fa-torah::before { content: "\f6a0"; } +.fa-torii-gate::before { content: "\f6a1"; } +.fa-tornado::before { content: "\f76f"; } +.fa-tower-broadcast::before { content: "\f519"; } +.fa-tower-cell::before { content: "\e585"; } +.fa-tower-control::before { content: "\e2a2"; } +.fa-tower-observation::before { content: "\e586"; } +.fa-tractor::before { content: "\f722"; } +.fa-trademark::before { content: "\f25c"; } +.fa-traffic-cone::before { content: "\f636"; } +.fa-traffic-light::before { content: "\f637"; } +.fa-traffic-light-go::before { content: "\f638"; } +.fa-traffic-light-slow::before { content: "\f639"; } +.fa-traffic-light-stop::before { content: "\f63a"; } +.fa-trailer::before { content: "\e041"; } +.fa-train::before { content: "\f238"; } +.fa-train-subway::before { content: "\f239"; } +.fa-train-subway-tunnel::before { content: "\e2a3"; } +.fa-train-track::before { content: "\e453"; } +.fa-train-tram::before { content: "\e5b4"; } +.fa-train-tunnel::before { content: "\e454"; } +.fa-tram::before { content: "\f7da"; } +.fa-transformer-bolt::before { content: "\e2a4"; } +.fa-transgender::before { content: "\f225"; } +.fa-transgender-alt::before { content: "\f225"; } +.fa-transporter::before { content: "\e042"; } +.fa-transporter-1::before { content: "\e043"; } +.fa-transporter-2::before { content: "\e044"; } +.fa-transporter-3::before { content: "\e045"; } +.fa-transporter-4::before { content: "\e2a5"; } +.fa-transporter-5::before { content: "\e2a6"; } +.fa-transporter-6::before { content: "\e2a7"; } +.fa-transporter-7::before { content: "\e2a8"; } +.fa-transporter-empty::before { content: "\e046"; } +.fa-trash::before { content: "\f1f8"; } +.fa-trash-alt::before { content: "\f2ed"; } +.fa-trash-alt-slash::before { content: "\e2ad"; } +.fa-trash-arrow-turn-left::before { content: "\f895"; } +.fa-trash-arrow-up::before { content: "\f829"; } +.fa-trash-can::before { content: "\f2ed"; } +.fa-trash-can-arrow-turn-left::before { content: "\f896"; } +.fa-trash-can-arrow-up::before { content: "\f82a"; } +.fa-trash-can-check::before { content: "\e2a9"; } +.fa-trash-can-clock::before { content: "\e2aa"; } +.fa-trash-can-list::before { content: "\e2ab"; } +.fa-trash-can-plus::before { content: "\e2ac"; } +.fa-trash-can-slash::before { content: "\e2ad"; } +.fa-trash-can-undo::before { content: "\f896"; } +.fa-trash-can-xmark::before { content: "\e2ae"; } +.fa-trash-check::before { content: "\e2af"; } +.fa-trash-circle::before { content: "\e126"; } +.fa-trash-clock::before { content: "\e2b0"; } +.fa-trash-list::before { content: "\e2b1"; } +.fa-trash-plus::before { content: "\e2b2"; } +.fa-trash-restore::before { content: "\f829"; } +.fa-trash-restore-alt::before { content: "\f82a"; } +.fa-trash-slash::before { content: "\e2b3"; } +.fa-trash-undo::before { content: "\f895"; } +.fa-trash-undo-alt::before { content: "\f896"; } +.fa-trash-xmark::before { content: "\e2b4"; } +.fa-treasure-chest::before { content: "\f723"; } +.fa-tree::before { content: "\f1bb"; } +.fa-tree-alt::before { content: "\f400"; } +.fa-tree-christmas::before { content: "\f7db"; } +.fa-tree-city::before { content: "\e587"; } +.fa-tree-deciduous::before { content: "\f400"; } +.fa-tree-decorated::before { content: "\f7dc"; } +.fa-tree-large::before { content: "\f7dd"; } +.fa-tree-palm::before { content: "\f82b"; } +.fa-trees::before { content: "\f724"; } +.fa-trian-balbot::before { content: "\e45c"; } +.fa-triangle::before { content: "\f2ec"; } +.fa-triangle-circle-square::before { content: "\f61f"; } +.fa-triangle-exclamation::before { content: "\f071"; } +.fa-triangle-instrument::before { content: "\f8e2"; } +.fa-triangle-music::before { content: "\f8e2"; } +.fa-triangle-person-digging::before { content: "\f85d"; } +.fa-tricycle::before { content: "\e5c3"; } +.fa-tricycle-adult::before { content: "\e5c4"; } +.fa-trillium::before { content: "\e588"; } +.fa-trophy::before { content: "\f091"; } +.fa-trophy-alt::before { content: "\f2eb"; } +.fa-trophy-star::before { content: "\f2eb"; } +.fa-trowel::before { content: "\e589"; } +.fa-trowel-bricks::before { content: "\e58a"; } +.fa-truck::before { content: "\f0d1"; } +.fa-truck-arrow-right::before { content: "\e58b"; } +.fa-truck-bolt::before { content: "\e3d0"; } +.fa-truck-clock::before { content: "\f48c"; } +.fa-truck-container::before { content: "\f4dc"; } +.fa-truck-container-empty::before { content: "\e2b5"; } +.fa-truck-couch::before { content: "\f4dd"; } +.fa-truck-droplet::before { content: "\e58c"; } +.fa-truck-fast::before { content: "\f48b"; } +.fa-truck-field::before { content: "\e58d"; } +.fa-truck-field-un::before { content: "\e58e"; } +.fa-truck-flatbed::before { content: "\e2b6"; } +.fa-truck-front::before { content: "\e2b7"; } +.fa-truck-loading::before { content: "\f4de"; } +.fa-truck-medical::before { content: "\f0f9"; } +.fa-truck-monster::before { content: "\f63b"; } +.fa-truck-moving::before { content: "\f4df"; } +.fa-truck-pickup::before { content: "\f63c"; } +.fa-truck-plane::before { content: "\e58f"; } +.fa-truck-plow::before { content: "\f7de"; } +.fa-truck-ramp::before { content: "\f4e0"; } +.fa-truck-ramp-box::before { content: "\f4de"; } +.fa-truck-ramp-couch::before { content: "\f4dd"; } +.fa-truck-tow::before { content: "\e2b8"; } +.fa-trumpet::before { content: "\f8e3"; } +.fa-try::before { content: "\e2bb"; } +.fa-tshirt::before { content: "\f553"; } +.fa-tty::before { content: "\f1e4"; } +.fa-tty-answer::before { content: "\e2b9"; } +.fa-tugrik-sign::before { content: "\e2ba"; } +.fa-turkey::before { content: "\f725"; } +.fa-turkish-lira::before { content: "\e2bb"; } +.fa-turkish-lira-sign::before { content: "\e2bb"; } +.fa-turn-down::before { content: "\f3be"; } +.fa-turn-down-left::before { content: "\e331"; } +.fa-turn-down-right::before { content: "\e455"; } +.fa-turn-up::before { content: "\f3bf"; } +.fa-turntable::before { content: "\f8e4"; } +.fa-turtle::before { content: "\f726"; } +.fa-tv::before { content: "\f26c"; } +.fa-tv-alt::before { content: "\f26c"; } +.fa-tv-music::before { content: "\f8e6"; } +.fa-tv-retro::before { content: "\f401"; } +.fa-typewriter::before { content: "\f8e7"; } +.fa-u::before { content: "\55"; } +.fa-ufo::before { content: "\e047"; } +.fa-ufo-beam::before { content: "\e048"; } +.fa-umbrella::before { content: "\f0e9"; } +.fa-umbrella-alt::before { content: "\e2bc"; } +.fa-umbrella-beach::before { content: "\f5ca"; } +.fa-umbrella-simple::before { content: "\e2bc"; } +.fa-underline::before { content: "\f0cd"; } +.fa-undo::before { content: "\f0e2"; } +.fa-undo-alt::before { content: "\f2ea"; } +.fa-unicorn::before { content: "\f727"; } +.fa-uniform-martial-arts::before { content: "\e3d1"; } +.fa-union::before { content: "\f6a2"; } +.fa-universal-access::before { content: "\f29a"; } +.fa-university::before { content: "\f19c"; } +.fa-unlink::before { content: "\f127"; } +.fa-unlock::before { content: "\f09c"; } +.fa-unlock-alt::before { content: "\f13e"; } +.fa-unlock-keyhole::before { content: "\f13e"; } +.fa-unsorted::before { content: "\f0dc"; } +.fa-up::before { content: "\f357"; } +.fa-up-down::before { content: "\f338"; } +.fa-up-down-left-right::before { content: "\f0b2"; } +.fa-up-from-bracket::before { content: "\e590"; } +.fa-up-from-dotted-line::before { content: "\e456"; } +.fa-up-from-line::before { content: "\f346"; } +.fa-up-left::before { content: "\e2bd"; } +.fa-up-long::before { content: "\f30c"; } +.fa-up-right::before { content: "\e2be"; } +.fa-up-right-and-down-left-from-center::before { content: "\f424"; } +.fa-up-right-from-square::before { content: "\f35d"; } +.fa-up-to-dotted-line::before { content: "\e457"; } +.fa-up-to-line::before { content: "\f34d"; } +.fa-upload::before { content: "\f093"; } +.fa-usb-drive::before { content: "\f8e9"; } +.fa-usd::before { content: "\24"; } +.fa-usd-circle::before { content: "\f2e8"; } +.fa-usd-square::before { content: "\f2e9"; } +.fa-user::before { content: "\f007"; } +.fa-user-alien::before { content: "\e04a"; } +.fa-user-alt::before { content: "\f406"; } +.fa-user-alt-slash::before { content: "\f4fa"; } +.fa-user-astronaut::before { content: "\f4fb"; } +.fa-user-bounty-hunter::before { content: "\e2bf"; } +.fa-user-chart::before { content: "\f6a3"; } +.fa-user-check::before { content: "\f4fc"; } +.fa-user-chef::before { content: "\e3d2"; } +.fa-user-circle::before { content: "\f2bd"; } +.fa-user-clock::before { content: "\f4fd"; } +.fa-user-cog::before { content: "\f4fe"; } +.fa-user-construction::before { content: "\f82c"; } +.fa-user-cowboy::before { content: "\f8ea"; } +.fa-user-crown::before { content: "\f6a4"; } +.fa-user-doctor::before { content: "\f0f0"; } +.fa-user-doctor-hair::before { content: "\e458"; } +.fa-user-doctor-hair-long::before { content: "\e459"; } +.fa-user-doctor-message::before { content: "\f82e"; } +.fa-user-edit::before { content: "\f4ff"; } +.fa-user-friends::before { content: "\f500"; } +.fa-user-gear::before { content: "\f4fe"; } +.fa-user-graduate::before { content: "\f501"; } +.fa-user-group::before { content: "\f500"; } +.fa-user-group-crown::before { content: "\f6a5"; } +.fa-user-group-simple::before { content: "\e603"; } +.fa-user-hair::before { content: "\e45a"; } +.fa-user-hair-buns::before { content: "\e3d3"; } +.fa-user-hair-long::before { content: "\e45b"; } +.fa-user-hair-mullet::before { content: "\e45c"; } +.fa-user-hard-hat::before { content: "\f82c"; } +.fa-user-headset::before { content: "\f82d"; } +.fa-user-helmet-safety::before { content: "\f82c"; } +.fa-user-injured::before { content: "\f728"; } +.fa-user-large::before { content: "\f406"; } +.fa-user-large-slash::before { content: "\f4fa"; } +.fa-user-lock::before { content: "\f502"; } +.fa-user-magnifying-glass::before { content: "\e5c5"; } +.fa-user-md::before { content: "\f0f0"; } +.fa-user-md-chat::before { content: "\f82e"; } +.fa-user-minus::before { content: "\f503"; } +.fa-user-music::before { content: "\f8eb"; } +.fa-user-ninja::before { content: "\f504"; } +.fa-user-nurse::before { content: "\f82f"; } +.fa-user-nurse-hair::before { content: "\e45d"; } +.fa-user-nurse-hair-long::before { content: "\e45e"; } +.fa-user-pen::before { content: "\f4ff"; } +.fa-user-pilot::before { content: "\e2c0"; } +.fa-user-pilot-tie::before { content: "\e2c1"; } +.fa-user-plus::before { content: "\f234"; } +.fa-user-police::before { content: "\e333"; } +.fa-user-police-tie::before { content: "\e334"; } +.fa-user-robot::before { content: "\e04b"; } +.fa-user-robot-xmarks::before { content: "\e4a7"; } +.fa-user-secret::before { content: "\f21b"; } +.fa-user-shakespeare::before { content: "\e2c2"; } +.fa-user-shield::before { content: "\f505"; } +.fa-user-slash::before { content: "\f506"; } +.fa-user-tag::before { content: "\f507"; } +.fa-user-tie::before { content: "\f508"; } +.fa-user-tie-hair::before { content: "\e45f"; } +.fa-user-tie-hair-long::before { content: "\e460"; } +.fa-user-times::before { content: "\f235"; } +.fa-user-unlock::before { content: "\e058"; } +.fa-user-visor::before { content: "\e04c"; } +.fa-user-vneck::before { content: "\e461"; } +.fa-user-vneck-hair::before { content: "\e462"; } +.fa-user-vneck-hair-long::before { content: "\e463"; } +.fa-user-xmark::before { content: "\f235"; } +.fa-users::before { content: "\f0c0"; } +.fa-users-between-lines::before { content: "\e591"; } +.fa-users-class::before { content: "\f63d"; } +.fa-users-cog::before { content: "\f509"; } +.fa-users-crown::before { content: "\f6a5"; } +.fa-users-gear::before { content: "\f509"; } +.fa-users-line::before { content: "\e592"; } +.fa-users-medical::before { content: "\f830"; } +.fa-users-rays::before { content: "\e593"; } +.fa-users-rectangle::before { content: "\e594"; } +.fa-users-slash::before { content: "\e073"; } +.fa-users-viewfinder::before { content: "\e595"; } +.fa-utensil-fork::before { content: "\f2e3"; } +.fa-utensil-knife::before { content: "\f2e4"; } +.fa-utensil-spoon::before { content: "\f2e5"; } +.fa-utensils::before { content: "\f2e7"; } +.fa-utensils-alt::before { content: "\f2e6"; } +.fa-utensils-slash::before { content: "\e464"; } +.fa-utility-pole::before { content: "\e2c3"; } +.fa-utility-pole-double::before { content: "\e2c4"; } +.fa-v::before { content: "\56"; } +.fa-vacuum::before { content: "\e04d"; } +.fa-vacuum-robot::before { content: "\e04e"; } +.fa-value-absolute::before { content: "\f6a6"; } +.fa-van-shuttle::before { content: "\f5b6"; } +.fa-vault::before { content: "\e2c5"; } +.fa-vcard::before { content: "\f2bb"; } +.fa-vector-circle::before { content: "\e2c6"; } +.fa-vector-polygon::before { content: "\e2c7"; } +.fa-vector-square::before { content: "\f5cb"; } +.fa-vent-damper::before { content: "\e465"; } +.fa-venus::before { content: "\f221"; } +.fa-venus-double::before { content: "\f226"; } +.fa-venus-mars::before { content: "\f228"; } +.fa-vest::before { content: "\e085"; } +.fa-vest-patches::before { content: "\e086"; } +.fa-vhs::before { content: "\f8ec"; } +.fa-vial::before { content: "\f492"; } +.fa-vial-circle-check::before { content: "\e596"; } +.fa-vial-virus::before { content: "\e597"; } +.fa-vials::before { content: "\f493"; } +.fa-video::before { content: "\f03d"; } +.fa-video-arrow-down-left::before { content: "\e2c8"; } +.fa-video-arrow-up-right::before { content: "\e2c9"; } +.fa-video-camera::before { content: "\f03d"; } +.fa-video-circle::before { content: "\e12b"; } +.fa-video-handheld::before { content: "\f8a8"; } +.fa-video-plus::before { content: "\f4e1"; } +.fa-video-slash::before { content: "\f4e2"; } +.fa-vihara::before { content: "\f6a7"; } +.fa-violin::before { content: "\f8ed"; } +.fa-virus::before { content: "\e074"; } +.fa-virus-covid::before { content: "\e4a8"; } +.fa-virus-covid-slash::before { content: "\e4a9"; } +.fa-virus-slash::before { content: "\e075"; } +.fa-viruses::before { content: "\e076"; } +.fa-voicemail::before { content: "\f897"; } +.fa-volcano::before { content: "\f770"; } +.fa-volleyball::before { content: "\f45f"; } +.fa-volleyball-ball::before { content: "\f45f"; } +.fa-volume::before { content: "\f6a8"; } +.fa-volume-control-phone::before { content: "\f2a0"; } +.fa-volume-down::before { content: "\f027"; } +.fa-volume-high::before { content: "\f028"; } +.fa-volume-low::before { content: "\f027"; } +.fa-volume-medium::before { content: "\f6a8"; } +.fa-volume-mute::before { content: "\f6a9"; } +.fa-volume-off::before { content: "\f026"; } +.fa-volume-slash::before { content: "\f2e2"; } +.fa-volume-times::before { content: "\f6a9"; } +.fa-volume-up::before { content: "\f028"; } +.fa-volume-xmark::before { content: "\f6a9"; } +.fa-vote-nay::before { content: "\f771"; } +.fa-vote-yea::before { content: "\f772"; } +.fa-vr-cardboard::before { content: "\f729"; } +.fa-w::before { content: "\57"; } +.fa-waffle::before { content: "\e466"; } +.fa-wagon-covered::before { content: "\f8ee"; } +.fa-walker::before { content: "\f831"; } +.fa-walkie-talkie::before { content: "\f8ef"; } +.fa-walking::before { content: "\f554"; } +.fa-wall-brick::before { content: "\e3db"; } +.fa-wallet::before { content: "\f555"; } +.fa-wand::before { content: "\f72a"; } +.fa-wand-magic::before { content: "\f0d0"; } +.fa-wand-magic-sparkles::before { content: "\e2ca"; } +.fa-wand-sparkles::before { content: "\f72b"; } +.fa-warehouse::before { content: "\f494"; } +.fa-warehouse-alt::before { content: "\f495"; } +.fa-warehouse-full::before { content: "\f495"; } +.fa-warning::before { content: "\f071"; } +.fa-washer::before { content: "\f898"; } +.fa-washing-machine::before { content: "\f898"; } +.fa-watch::before { content: "\f2e1"; } +.fa-watch-apple::before { content: "\e2cb"; } +.fa-watch-calculator::before { content: "\f8f0"; } +.fa-watch-fitness::before { content: "\f63e"; } +.fa-watch-smart::before { content: "\e2cc"; } +.fa-water::before { content: "\f773"; } +.fa-water-arrow-down::before { content: "\f774"; } +.fa-water-arrow-up::before { content: "\f775"; } +.fa-water-ladder::before { content: "\f5c5"; } +.fa-water-lower::before { content: "\f774"; } +.fa-water-rise::before { content: "\f775"; } +.fa-watermelon-slice::before { content: "\e337"; } +.fa-wave-pulse::before { content: "\f5f8"; } +.fa-wave-sine::before { content: "\f899"; } +.fa-wave-square::before { content: "\f83e"; } +.fa-wave-triangle::before { content: "\f89a"; } +.fa-waveform::before { content: "\f8f1"; } +.fa-waveform-circle::before { content: "\e12d"; } +.fa-waveform-lines::before { content: "\f8f2"; } +.fa-waveform-path::before { content: "\f8f2"; } +.fa-webcam::before { content: "\f832"; } +.fa-webcam-slash::before { content: "\f833"; } +.fa-webhook::before { content: "\e5d5"; } +.fa-weight::before { content: "\f496"; } +.fa-weight-hanging::before { content: "\f5cd"; } +.fa-weight-scale::before { content: "\f496"; } +.fa-whale::before { content: "\f72c"; } +.fa-wheat::before { content: "\f72d"; } +.fa-wheat-alt::before { content: "\e2cd"; } +.fa-wheat-awn::before { content: "\e2cd"; } +.fa-wheat-awn-circle-exclamation::before { content: "\e598"; } +.fa-wheat-awn-slash::before { content: "\e338"; } +.fa-wheat-slash::before { content: "\e339"; } +.fa-wheelchair::before { content: "\f193"; } +.fa-wheelchair-alt::before { content: "\e2ce"; } +.fa-wheelchair-move::before { content: "\e2ce"; } +.fa-whiskey-glass::before { content: "\f7a0"; } +.fa-whiskey-glass-ice::before { content: "\f7a1"; } +.fa-whistle::before { content: "\f460"; } +.fa-wifi::before { content: "\f1eb"; } +.fa-wifi-1::before { content: "\f6aa"; } +.fa-wifi-2::before { content: "\f6ab"; } +.fa-wifi-3::before { content: "\f1eb"; } +.fa-wifi-exclamation::before { content: "\e2cf"; } +.fa-wifi-fair::before { content: "\f6ab"; } +.fa-wifi-slash::before { content: "\f6ac"; } +.fa-wifi-strong::before { content: "\f1eb"; } +.fa-wifi-weak::before { content: "\f6aa"; } +.fa-wind::before { content: "\f72e"; } +.fa-wind-circle-exclamation::before { content: "\f776"; } +.fa-wind-turbine::before { content: "\f89b"; } +.fa-wind-warning::before { content: "\f776"; } +.fa-window::before { content: "\f40e"; } +.fa-window-alt::before { content: "\f40f"; } +.fa-window-close::before { content: "\f410"; } +.fa-window-flip::before { content: "\f40f"; } +.fa-window-frame::before { content: "\e04f"; } +.fa-window-frame-open::before { content: "\e050"; } +.fa-window-maximize::before { content: "\f2d0"; } +.fa-window-minimize::before { content: "\f2d1"; } +.fa-window-restore::before { content: "\f2d2"; } +.fa-windsock::before { content: "\f777"; } +.fa-wine-bottle::before { content: "\f72f"; } +.fa-wine-glass::before { content: "\f4e3"; } +.fa-wine-glass-alt::before { content: "\f5ce"; } +.fa-wine-glass-crack::before { content: "\f4bb"; } +.fa-wine-glass-empty::before { content: "\f5ce"; } +.fa-won::before { content: "\f159"; } +.fa-won-sign::before { content: "\f159"; } +.fa-worm::before { content: "\e599"; } +.fa-wreath::before { content: "\f7e2"; } +.fa-wreath-laurel::before { content: "\e5d2"; } +.fa-wrench::before { content: "\f0ad"; } +.fa-wrench-simple::before { content: "\e2d1"; } +.fa-x::before { content: "\58"; } +.fa-x-ray::before { content: "\f497"; } +.fa-xmark::before { content: "\f00d"; } +.fa-xmark-circle::before { content: "\f057"; } +.fa-xmark-hexagon::before { content: "\f2ee"; } +.fa-xmark-large::before { content: "\e59b"; } +.fa-xmark-octagon::before { content: "\f2f0"; } +.fa-xmark-square::before { content: "\f2d3"; } +.fa-xmark-to-slot::before { content: "\f771"; } +.fa-xmarks-lines::before { content: "\e59a"; } +.fa-y::before { content: "\59"; } +.fa-yen::before { content: "\f157"; } +.fa-yen-sign::before { content: "\f157"; } +.fa-yin-yang::before { content: "\f6ad"; } +.fa-z::before { content: "\5a"; } +.fa-zap::before { content: "\f0e7"; } +.fa-zzz::before { content: "\f880"; } + +.sr-only, +.fa-sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } + +.sr-only-focusable:not(:focus), +.fa-sr-only-focusable:not(:focus) { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } + +/*! + * Font Awesome Pro 6.4.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license (Commercial License) + * Copyright 2023 Fonticons, Inc. + */ +:root, :host { + --fa-style-family-brands: 'Font Awesome 6 Brands'; + --fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; } + +@font-face { + font-family: 'Font Awesome 6 Brands'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +.fab, +.fa-brands { + font-weight: 400; } + +.fa-monero:before { + content: "\f3d0"; } + +.fa-hooli:before { + content: "\f427"; } + +.fa-yelp:before { + content: "\f1e9"; } + +.fa-cc-visa:before { + content: "\f1f0"; } + +.fa-lastfm:before { + content: "\f202"; } + +.fa-shopware:before { + content: "\f5b5"; } + +.fa-creative-commons-nc:before { + content: "\f4e8"; } + +.fa-aws:before { + content: "\f375"; } + +.fa-redhat:before { + content: "\f7bc"; } + +.fa-yoast:before { + content: "\f2b1"; } + +.fa-cloudflare:before { + content: "\e07d"; } + +.fa-ups:before { + content: "\f7e0"; } + +.fa-wpexplorer:before { + content: "\f2de"; } + +.fa-dyalog:before { + content: "\f399"; } + +.fa-bity:before { + content: "\f37a"; } + +.fa-stackpath:before { + content: "\f842"; } + +.fa-buysellads:before { + content: "\f20d"; } + +.fa-first-order:before { + content: "\f2b0"; } + +.fa-modx:before { + content: "\f285"; } + +.fa-guilded:before { + content: "\e07e"; } + +.fa-vnv:before { + content: "\f40b"; } + +.fa-square-js:before { + content: "\f3b9"; } + +.fa-js-square:before { + content: "\f3b9"; } + +.fa-microsoft:before { + content: "\f3ca"; } + +.fa-qq:before { + content: "\f1d6"; } + +.fa-orcid:before { + content: "\f8d2"; } + +.fa-java:before { + content: "\f4e4"; } + +.fa-invision:before { + content: "\f7b0"; } + +.fa-creative-commons-pd-alt:before { + content: "\f4ed"; } + +.fa-centercode:before { + content: "\f380"; } + +.fa-glide-g:before { + content: "\f2a6"; } + +.fa-drupal:before { + content: "\f1a9"; } + +.fa-hire-a-helper:before { + content: "\f3b0"; } + +.fa-creative-commons-by:before { + content: "\f4e7"; } + +.fa-unity:before { + content: "\e049"; } + +.fa-whmcs:before { + content: "\f40d"; } + +.fa-rocketchat:before { + content: "\f3e8"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-untappd:before { + content: "\f405"; } + +.fa-mailchimp:before { + content: "\f59e"; } + +.fa-css3-alt:before { + content: "\f38b"; } + +.fa-square-reddit:before { + content: "\f1a2"; } + +.fa-reddit-square:before { + content: "\f1a2"; } + +.fa-vimeo-v:before { + content: "\f27d"; } + +.fa-contao:before { + content: "\f26d"; } + +.fa-square-font-awesome:before { + content: "\e5ad"; } + +.fa-deskpro:before { + content: "\f38f"; } + +.fa-sistrix:before { + content: "\f3ee"; } + +.fa-square-instagram:before { + content: "\e055"; } + +.fa-instagram-square:before { + content: "\e055"; } + +.fa-battle-net:before { + content: "\f835"; } + +.fa-the-red-yeti:before { + content: "\f69d"; } + +.fa-square-hacker-news:before { + content: "\f3af"; } + +.fa-hacker-news-square:before { + content: "\f3af"; } + +.fa-edge:before { + content: "\f282"; } + +.fa-threads:before { + content: "\e618"; } + +.fa-napster:before { + content: "\f3d2"; } + +.fa-square-snapchat:before { + content: "\f2ad"; } + +.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa-google-plus-g:before { + content: "\f0d5"; } + +.fa-artstation:before { + content: "\f77a"; } + +.fa-markdown:before { + content: "\f60f"; } + +.fa-sourcetree:before { + content: "\f7d3"; } + +.fa-google-plus:before { + content: "\f2b3"; } + +.fa-diaspora:before { + content: "\f791"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-phoenix-squadron:before { + content: "\f511"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-algolia:before { + content: "\f36c"; } + +.fa-red-river:before { + content: "\f3e3"; } + +.fa-creative-commons-sa:before { + content: "\f4ef"; } + +.fa-safari:before { + content: "\f267"; } + +.fa-google:before { + content: "\f1a0"; } + +.fa-square-font-awesome-stroke:before { + content: "\f35c"; } + +.fa-font-awesome-alt:before { + content: "\f35c"; } + +.fa-atlassian:before { + content: "\f77b"; } + +.fa-linkedin-in:before { + content: "\f0e1"; } + +.fa-digital-ocean:before { + content: "\f391"; } + +.fa-nimblr:before { + content: "\f5a8"; } + +.fa-chromecast:before { + content: "\f838"; } + +.fa-evernote:before { + content: "\f839"; } + +.fa-hacker-news:before { + content: "\f1d4"; } + +.fa-creative-commons-sampling:before { + content: "\f4f0"; } + +.fa-adversal:before { + content: "\f36a"; } + +.fa-creative-commons:before { + content: "\f25e"; } + +.fa-watchman-monitoring:before { + content: "\e087"; } + +.fa-fonticons:before { + content: "\f280"; } + +.fa-weixin:before { + content: "\f1d7"; } + +.fa-shirtsinbulk:before { + content: "\f214"; } + +.fa-codepen:before { + content: "\f1cb"; } + +.fa-git-alt:before { + content: "\f841"; } + +.fa-lyft:before { + content: "\f3c3"; } + +.fa-rev:before { + content: "\f5b2"; } + +.fa-windows:before { + content: "\f17a"; } + +.fa-wizards-of-the-coast:before { + content: "\f730"; } + +.fa-square-viadeo:before { + content: "\f2aa"; } + +.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa-meetup:before { + content: "\f2e0"; } + +.fa-centos:before { + content: "\f789"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-cloudsmith:before { + content: "\f384"; } + +.fa-pied-piper-alt:before { + content: "\f1a8"; } + +.fa-square-dribbble:before { + content: "\f397"; } + +.fa-dribbble-square:before { + content: "\f397"; } + +.fa-codiepie:before { + content: "\f284"; } + +.fa-node:before { + content: "\f419"; } + +.fa-mix:before { + content: "\f3cb"; } + +.fa-steam:before { + content: "\f1b6"; } + +.fa-cc-apple-pay:before { + content: "\f416"; } + +.fa-scribd:before { + content: "\f28a"; } + +.fa-debian:before { + content: "\e60b"; } + +.fa-openid:before { + content: "\f19b"; } + +.fa-instalod:before { + content: "\e081"; } + +.fa-expeditedssl:before { + content: "\f23e"; } + +.fa-sellcast:before { + content: "\f2da"; } + +.fa-square-twitter:before { + content: "\f081"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-r-project:before { + content: "\f4f7"; } + +.fa-delicious:before { + content: "\f1a5"; } + +.fa-freebsd:before { + content: "\f3a4"; } + +.fa-vuejs:before { + content: "\f41f"; } + +.fa-accusoft:before { + content: "\f369"; } + +.fa-ioxhost:before { + content: "\f208"; } + +.fa-fonticons-fi:before { + content: "\f3a2"; } + +.fa-app-store:before { + content: "\f36f"; } + +.fa-cc-mastercard:before { + content: "\f1f1"; } + +.fa-itunes-note:before { + content: "\f3b5"; } + +.fa-golang:before { + content: "\e40f"; } + +.fa-kickstarter:before { + content: "\f3bb"; } + +.fa-grav:before { + content: "\f2d6"; } + +.fa-weibo:before { + content: "\f18a"; } + +.fa-uncharted:before { + content: "\e084"; } + +.fa-firstdraft:before { + content: "\f3a1"; } + +.fa-square-youtube:before { + content: "\f431"; } + +.fa-youtube-square:before { + content: "\f431"; } + +.fa-wikipedia-w:before { + content: "\f266"; } + +.fa-wpressr:before { + content: "\f3e4"; } + +.fa-rendact:before { + content: "\f3e4"; } + +.fa-angellist:before { + content: "\f209"; } + +.fa-galactic-republic:before { + content: "\f50c"; } + +.fa-nfc-directional:before { + content: "\e530"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-joget:before { + content: "\f3b7"; } + +.fa-fedora:before { + content: "\f798"; } + +.fa-stripe-s:before { + content: "\f42a"; } + +.fa-meta:before { + content: "\e49b"; } + +.fa-laravel:before { + content: "\f3bd"; } + +.fa-hotjar:before { + content: "\f3b1"; } + +.fa-bluetooth-b:before { + content: "\f294"; } + +.fa-sticker-mule:before { + content: "\f3f7"; } + +.fa-creative-commons-zero:before { + content: "\f4f3"; } + +.fa-hips:before { + content: "\f452"; } + +.fa-behance:before { + content: "\f1b4"; } + +.fa-reddit:before { + content: "\f1a1"; } + +.fa-discord:before { + content: "\f392"; } + +.fa-chrome:before { + content: "\f268"; } + +.fa-app-store-ios:before { + content: "\f370"; } + +.fa-cc-discover:before { + content: "\f1f2"; } + +.fa-wpbeginner:before { + content: "\f297"; } + +.fa-confluence:before { + content: "\f78d"; } + +.fa-shoelace:before { + content: "\e60c"; } + +.fa-mdb:before { + content: "\f8ca"; } + +.fa-dochub:before { + content: "\f394"; } + +.fa-accessible-icon:before { + content: "\f368"; } + +.fa-ebay:before { + content: "\f4f4"; } + +.fa-amazon:before { + content: "\f270"; } + +.fa-unsplash:before { + content: "\e07c"; } + +.fa-yarn:before { + content: "\f7e3"; } + +.fa-square-steam:before { + content: "\f1b7"; } + +.fa-steam-square:before { + content: "\f1b7"; } + +.fa-500px:before { + content: "\f26e"; } + +.fa-square-vimeo:before { + content: "\f194"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-asymmetrik:before { + content: "\f372"; } + +.fa-font-awesome:before { + content: "\f2b4"; } + +.fa-font-awesome-flag:before { + content: "\f2b4"; } + +.fa-font-awesome-logo-full:before { + content: "\f2b4"; } + +.fa-gratipay:before { + content: "\f184"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-hive:before { + content: "\e07f"; } + +.fa-gitkraken:before { + content: "\f3a6"; } + +.fa-keybase:before { + content: "\f4f5"; } + +.fa-apple-pay:before { + content: "\f415"; } + +.fa-padlet:before { + content: "\e4a0"; } + +.fa-amazon-pay:before { + content: "\f42c"; } + +.fa-square-github:before { + content: "\f092"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-stumbleupon:before { + content: "\f1a4"; } + +.fa-fedex:before { + content: "\f797"; } + +.fa-phoenix-framework:before { + content: "\f3dc"; } + +.fa-shopify:before { + content: "\e057"; } + +.fa-neos:before { + content: "\f612"; } + +.fa-square-threads:before { + content: "\e619"; } + +.fa-hackerrank:before { + content: "\f5f7"; } + +.fa-researchgate:before { + content: "\f4f8"; } + +.fa-swift:before { + content: "\f8e1"; } + +.fa-angular:before { + content: "\f420"; } + +.fa-speakap:before { + content: "\f3f3"; } + +.fa-angrycreative:before { + content: "\f36e"; } + +.fa-y-combinator:before { + content: "\f23b"; } + +.fa-empire:before { + content: "\f1d1"; } + +.fa-envira:before { + content: "\f299"; } + +.fa-square-gitlab:before { + content: "\e5ae"; } + +.fa-gitlab-square:before { + content: "\e5ae"; } + +.fa-studiovinari:before { + content: "\f3f8"; } + +.fa-pied-piper:before { + content: "\f2ae"; } + +.fa-wordpress:before { + content: "\f19a"; } + +.fa-product-hunt:before { + content: "\f288"; } + +.fa-firefox:before { + content: "\f269"; } + +.fa-linode:before { + content: "\f2b8"; } + +.fa-goodreads:before { + content: "\f3a8"; } + +.fa-square-odnoklassniki:before { + content: "\f264"; } + +.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa-jsfiddle:before { + content: "\f1cc"; } + +.fa-sith:before { + content: "\f512"; } + +.fa-themeisle:before { + content: "\f2b2"; } + +.fa-page4:before { + content: "\f3d7"; } + +.fa-hashnode:before { + content: "\e499"; } + +.fa-react:before { + content: "\f41b"; } + +.fa-cc-paypal:before { + content: "\f1f4"; } + +.fa-squarespace:before { + content: "\f5be"; } + +.fa-cc-stripe:before { + content: "\f1f5"; } + +.fa-creative-commons-share:before { + content: "\f4f2"; } + +.fa-bitcoin:before { + content: "\f379"; } + +.fa-keycdn:before { + content: "\f3ba"; } + +.fa-opera:before { + content: "\f26a"; } + +.fa-itch-io:before { + content: "\f83a"; } + +.fa-umbraco:before { + content: "\f8e8"; } + +.fa-galactic-senate:before { + content: "\f50d"; } + +.fa-ubuntu:before { + content: "\f7df"; } + +.fa-draft2digital:before { + content: "\f396"; } + +.fa-stripe:before { + content: "\f429"; } + +.fa-houzz:before { + content: "\f27c"; } + +.fa-gg:before { + content: "\f260"; } + +.fa-dhl:before { + content: "\f790"; } + +.fa-square-pinterest:before { + content: "\f0d3"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-xing:before { + content: "\f168"; } + +.fa-blackberry:before { + content: "\f37b"; } + +.fa-creative-commons-pd:before { + content: "\f4ec"; } + +.fa-playstation:before { + content: "\f3df"; } + +.fa-quinscape:before { + content: "\f459"; } + +.fa-less:before { + content: "\f41d"; } + +.fa-blogger-b:before { + content: "\f37d"; } + +.fa-opencart:before { + content: "\f23d"; } + +.fa-vine:before { + content: "\f1ca"; } + +.fa-paypal:before { + content: "\f1ed"; } + +.fa-gitlab:before { + content: "\f296"; } + +.fa-typo3:before { + content: "\f42b"; } + +.fa-reddit-alien:before { + content: "\f281"; } + +.fa-yahoo:before { + content: "\f19e"; } + +.fa-dailymotion:before { + content: "\e052"; } + +.fa-affiliatetheme:before { + content: "\f36b"; } + +.fa-pied-piper-pp:before { + content: "\f1a7"; } + +.fa-bootstrap:before { + content: "\f836"; } + +.fa-odnoklassniki:before { + content: "\f263"; } + +.fa-nfc-symbol:before { + content: "\e531"; } + +.fa-ethereum:before { + content: "\f42e"; } + +.fa-speaker-deck:before { + content: "\f83c"; } + +.fa-creative-commons-nc-eu:before { + content: "\f4e9"; } + +.fa-patreon:before { + content: "\f3d9"; } + +.fa-avianex:before { + content: "\f374"; } + +.fa-ello:before { + content: "\f5f1"; } + +.fa-gofore:before { + content: "\f3a7"; } + +.fa-bimobject:before { + content: "\f378"; } + +.fa-facebook-f:before { + content: "\f39e"; } + +.fa-square-google-plus:before { + content: "\f0d4"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-mandalorian:before { + content: "\f50f"; } + +.fa-first-order-alt:before { + content: "\f50a"; } + +.fa-osi:before { + content: "\f41a"; } + +.fa-google-wallet:before { + content: "\f1ee"; } + +.fa-d-and-d-beyond:before { + content: "\f6ca"; } + +.fa-periscope:before { + content: "\f3da"; } + +.fa-fulcrum:before { + content: "\f50b"; } + +.fa-cloudscale:before { + content: "\f383"; } + +.fa-forumbee:before { + content: "\f211"; } + +.fa-mizuni:before { + content: "\f3cc"; } + +.fa-schlix:before { + content: "\f3ea"; } + +.fa-square-xing:before { + content: "\f169"; } + +.fa-xing-square:before { + content: "\f169"; } + +.fa-bandcamp:before { + content: "\f2d5"; } + +.fa-wpforms:before { + content: "\f298"; } + +.fa-cloudversify:before { + content: "\f385"; } + +.fa-usps:before { + content: "\f7e1"; } + +.fa-megaport:before { + content: "\f5a3"; } + +.fa-magento:before { + content: "\f3c4"; } + +.fa-spotify:before { + content: "\f1bc"; } + +.fa-optin-monster:before { + content: "\f23c"; } + +.fa-fly:before { + content: "\f417"; } + +.fa-aviato:before { + content: "\f421"; } + +.fa-itunes:before { + content: "\f3b4"; } + +.fa-cuttlefish:before { + content: "\f38c"; } + +.fa-blogger:before { + content: "\f37c"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-viber:before { + content: "\f409"; } + +.fa-soundcloud:before { + content: "\f1be"; } + +.fa-digg:before { + content: "\f1a6"; } + +.fa-tencent-weibo:before { + content: "\f1d5"; } + +.fa-symfony:before { + content: "\f83d"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-etsy:before { + content: "\f2d7"; } + +.fa-facebook-messenger:before { + content: "\f39f"; } + +.fa-audible:before { + content: "\f373"; } + +.fa-think-peaks:before { + content: "\f731"; } + +.fa-bilibili:before { + content: "\e3d9"; } + +.fa-erlang:before { + content: "\f39d"; } + +.fa-x-twitter:before { + content: "\e61b"; } + +.fa-cotton-bureau:before { + content: "\f89e"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-42-group:before { + content: "\e080"; } + +.fa-innosoft:before { + content: "\e080"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-elementor:before { + content: "\f430"; } + +.fa-square-pied-piper:before { + content: "\e01e"; } + +.fa-pied-piper-square:before { + content: "\e01e"; } + +.fa-creative-commons-nd:before { + content: "\f4eb"; } + +.fa-palfed:before { + content: "\f3d8"; } + +.fa-superpowers:before { + content: "\f2dd"; } + +.fa-resolving:before { + content: "\f3e7"; } + +.fa-xbox:before { + content: "\f412"; } + +.fa-searchengin:before { + content: "\f3eb"; } + +.fa-tiktok:before { + content: "\e07b"; } + +.fa-square-facebook:before { + content: "\f082"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-glide:before { + content: "\f2a5"; } + +.fa-linkedin:before { + content: "\f08c"; } + +.fa-hubspot:before { + content: "\f3b2"; } + +.fa-deploydog:before { + content: "\f38e"; } + +.fa-twitch:before { + content: "\f1e8"; } + +.fa-ravelry:before { + content: "\f2d9"; } + +.fa-mixer:before { + content: "\e056"; } + +.fa-square-lastfm:before { + content: "\f203"; } + +.fa-lastfm-square:before { + content: "\f203"; } + +.fa-vimeo:before { + content: "\f40a"; } + +.fa-mendeley:before { + content: "\f7b3"; } + +.fa-uniregistry:before { + content: "\f404"; } + +.fa-figma:before { + content: "\f799"; } + +.fa-creative-commons-remix:before { + content: "\f4ee"; } + +.fa-cc-amazon-pay:before { + content: "\f42d"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-cmplid:before { + content: "\e360"; } + +.fa-facebook:before { + content: "\f09a"; } + +.fa-gripfire:before { + content: "\f3ac"; } + +.fa-jedi-order:before { + content: "\f50e"; } + +.fa-uikit:before { + content: "\f403"; } + +.fa-fort-awesome-alt:before { + content: "\f3a3"; } + +.fa-phabricator:before { + content: "\f3db"; } + +.fa-ussunnah:before { + content: "\f407"; } + +.fa-earlybirds:before { + content: "\f39a"; } + +.fa-trade-federation:before { + content: "\f513"; } + +.fa-autoprefixer:before { + content: "\f41c"; } + +.fa-whatsapp:before { + content: "\f232"; } + +.fa-slideshare:before { + content: "\f1e7"; } + +.fa-google-play:before { + content: "\f3ab"; } + +.fa-viadeo:before { + content: "\f2a9"; } + +.fa-line:before { + content: "\f3c0"; } + +.fa-google-drive:before { + content: "\f3aa"; } + +.fa-servicestack:before { + content: "\f3ec"; } + +.fa-simplybuilt:before { + content: "\f215"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-imdb:before { + content: "\f2d8"; } + +.fa-deezer:before { + content: "\e077"; } + +.fa-raspberry-pi:before { + content: "\f7bb"; } + +.fa-jira:before { + content: "\f7b1"; } + +.fa-docker:before { + content: "\f395"; } + +.fa-screenpal:before { + content: "\e570"; } + +.fa-bluetooth:before { + content: "\f293"; } + +.fa-gitter:before { + content: "\f426"; } + +.fa-d-and-d:before { + content: "\f38d"; } + +.fa-microblog:before { + content: "\e01a"; } + +.fa-cc-diners-club:before { + content: "\f24c"; } + +.fa-gg-circle:before { + content: "\f261"; } + +.fa-pied-piper-hat:before { + content: "\f4e5"; } + +.fa-kickstarter-k:before { + content: "\f3bc"; } + +.fa-yandex:before { + content: "\f413"; } + +.fa-readme:before { + content: "\f4d5"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-sellsy:before { + content: "\f213"; } + +.fa-sass:before { + content: "\f41e"; } + +.fa-wirsindhandwerk:before { + content: "\e2d0"; } + +.fa-wsh:before { + content: "\e2d0"; } + +.fa-buromobelexperte:before { + content: "\f37f"; } + +.fa-salesforce:before { + content: "\f83b"; } + +.fa-octopus-deploy:before { + content: "\e082"; } + +.fa-medapps:before { + content: "\f3c6"; } + +.fa-ns8:before { + content: "\f3d5"; } + +.fa-pinterest-p:before { + content: "\f231"; } + +.fa-apper:before { + content: "\f371"; } + +.fa-fort-awesome:before { + content: "\f286"; } + +.fa-waze:before { + content: "\f83f"; } + +.fa-cc-jcb:before { + content: "\f24b"; } + +.fa-snapchat:before { + content: "\f2ab"; } + +.fa-snapchat-ghost:before { + content: "\f2ab"; } + +.fa-fantasy-flight-games:before { + content: "\f6dc"; } + +.fa-rust:before { + content: "\e07a"; } + +.fa-wix:before { + content: "\f5cf"; } + +.fa-square-behance:before { + content: "\f1b5"; } + +.fa-behance-square:before { + content: "\f1b5"; } + +.fa-supple:before { + content: "\f3f9"; } + +.fa-rebel:before { + content: "\f1d0"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-staylinked:before { + content: "\f3f5"; } + +.fa-kaggle:before { + content: "\f5fa"; } + +.fa-space-awesome:before { + content: "\e5ac"; } + +.fa-deviantart:before { + content: "\f1bd"; } + +.fa-cpanel:before { + content: "\f388"; } + +.fa-goodreads-g:before { + content: "\f3a9"; } + +.fa-square-git:before { + content: "\f1d2"; } + +.fa-git-square:before { + content: "\f1d2"; } + +.fa-square-tumblr:before { + content: "\f174"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-creative-commons-nc-jp:before { + content: "\f4ea"; } + +.fa-get-pocket:before { + content: "\f265"; } + +.fa-perbyte:before { + content: "\e083"; } + +.fa-grunt:before { + content: "\f3ad"; } + +.fa-weebly:before { + content: "\f5cc"; } + +.fa-connectdevelop:before { + content: "\f20e"; } + +.fa-leanpub:before { + content: "\f212"; } + +.fa-black-tie:before { + content: "\f27e"; } + +.fa-themeco:before { + content: "\f5c6"; } + +.fa-python:before { + content: "\f3e2"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-bots:before { + content: "\e340"; } + +.fa-free-code-camp:before { + content: "\f2c5"; } + +.fa-hornbill:before { + content: "\f592"; } + +.fa-js:before { + content: "\f3b8"; } + +.fa-ideal:before { + content: "\e013"; } + +.fa-git:before { + content: "\f1d3"; } + +.fa-dev:before { + content: "\f6cc"; } + +.fa-sketch:before { + content: "\f7c6"; } + +.fa-yandex-international:before { + content: "\f414"; } + +.fa-cc-amex:before { + content: "\f1f3"; } + +.fa-uber:before { + content: "\f402"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-php:before { + content: "\f457"; } + +.fa-alipay:before { + content: "\f642"; } + +.fa-youtube:before { + content: "\f167"; } + +.fa-skyatlas:before { + content: "\f216"; } + +.fa-firefox-browser:before { + content: "\e007"; } + +.fa-replyd:before { + content: "\f3e6"; } + +.fa-suse:before { + content: "\f7d6"; } + +.fa-jenkins:before { + content: "\f3b6"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-rockrms:before { + content: "\f3e9"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-buffer:before { + content: "\f837"; } + +.fa-npm:before { + content: "\f3d4"; } + +.fa-yammer:before { + content: "\f840"; } + +.fa-btc:before { + content: "\f15a"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-stumbleupon-circle:before { + content: "\f1a3"; } + +.fa-internet-explorer:before { + content: "\f26b"; } + +.fa-stubber:before { + content: "\e5c7"; } + +.fa-telegram:before { + content: "\f2c6"; } + +.fa-telegram-plane:before { + content: "\f2c6"; } + +.fa-old-republic:before { + content: "\f510"; } + +.fa-odysee:before { + content: "\e5c6"; } + +.fa-square-whatsapp:before { + content: "\f40c"; } + +.fa-whatsapp-square:before { + content: "\f40c"; } + +.fa-node-js:before { + content: "\f3d3"; } + +.fa-edge-legacy:before { + content: "\e078"; } + +.fa-slack:before { + content: "\f198"; } + +.fa-slack-hash:before { + content: "\f198"; } + +.fa-medrt:before { + content: "\f3c8"; } + +.fa-usb:before { + content: "\f287"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-vaadin:before { + content: "\f408"; } + +.fa-quora:before { + content: "\f2c4"; } + +.fa-square-x-twitter:before { + content: "\e61a"; } + +.fa-reacteurope:before { + content: "\f75d"; } + +.fa-medium:before { + content: "\f23a"; } + +.fa-medium-m:before { + content: "\f23a"; } + +.fa-amilia:before { + content: "\f36d"; } + +.fa-mixcloud:before { + content: "\f289"; } + +.fa-flipboard:before { + content: "\f44d"; } + +.fa-viacoin:before { + content: "\f237"; } + +.fa-critical-role:before { + content: "\f6c9"; } + +.fa-sitrox:before { + content: "\e44a"; } + +.fa-discourse:before { + content: "\f393"; } + +.fa-joomla:before { + content: "\f1aa"; } + +.fa-mastodon:before { + content: "\f4f6"; } + +.fa-airbnb:before { + content: "\f834"; } + +.fa-wolf-pack-battalion:before { + content: "\f514"; } + +.fa-buy-n-large:before { + content: "\f8a6"; } + +.fa-gulp:before { + content: "\f3ae"; } + +.fa-creative-commons-sampling-plus:before { + content: "\f4f1"; } + +.fa-strava:before { + content: "\f428"; } + +.fa-ember:before { + content: "\f423"; } + +.fa-canadian-maple-leaf:before { + content: "\f785"; } + +.fa-teamspeak:before { + content: "\f4f9"; } + +.fa-pushed:before { + content: "\f3e1"; } + +.fa-wordpress-simple:before { + content: "\f411"; } + +.fa-nutritionix:before { + content: "\f3d6"; } + +.fa-wodu:before { + content: "\e088"; } + +.fa-google-pay:before { + content: "\e079"; } + +.fa-intercom:before { + content: "\f7af"; } + +.fa-zhihu:before { + content: "\f63f"; } + +.fa-korvue:before { + content: "\f42f"; } + +.fa-pix:before { + content: "\e43a"; } + +.fa-steam-symbol:before { + content: "\f3f6"; } + +/*! + * Font Awesome Pro 6.4.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license (Commercial License) + * Copyright 2023 Fonticons, Inc. + */ +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Pro'; + --fa-font-light: normal 300 1em/1 'Font Awesome 6 Pro'; } + +@font-face { + font-family: 'Font Awesome 6 Pro'; + font-style: normal; + font-weight: 300; + font-display: block; + src: url("../webfonts/fa-light-300.woff2") format("woff2"), url("../webfonts/fa-light-300.ttf") format("truetype"); } + +.fal, +.fa-light { + font-weight: 300; } + +/*! + * Font Awesome Pro 6.4.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license (Commercial License) + * Copyright 2023 Fonticons, Inc. + */ +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Pro'; + --fa-font-regular: normal 400 1em/1 'Font Awesome 6 Pro'; } + +@font-face { + font-family: 'Font Awesome 6 Pro'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } + +.far, +.fa-regular { + font-weight: 400; } + +/*! + * Font Awesome Pro 6.4.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license (Commercial License) + * Copyright 2023 Fonticons, Inc. + */ +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Pro'; + --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Pro'; } + +@font-face { + font-family: 'Font Awesome 6 Pro'; + font-style: normal; + font-weight: 900; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +.fas, +.fa-solid { + font-weight: 900; } + +/*! + * Font Awesome Pro 6.4.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license (Commercial License) + * Copyright 2023 Fonticons, Inc. + */ +:root, :host { + --fa-style-family-duotone: 'Font Awesome 6 Duotone'; + --fa-font-duotone: normal 900 1em/1 'Font Awesome 6 Duotone'; } + +@font-face { + font-family: 'Font Awesome 6 Duotone'; + font-style: normal; + font-weight: 900; + font-display: block; + src: url("../webfonts/fa-duotone-900.woff2") format("woff2"), url("../webfonts/fa-duotone-900.ttf") format("truetype"); } + +.fad, +.fa-duotone { + position: relative; + font-weight: 900; + letter-spacing: normal; } + +.fad::before, +.fa-duotone::before { + position: absolute; + color: var(--fa-primary-color, inherit); + opacity: var(--fa-primary-opacity, 1); } + +.fad::after, +.fa-duotone::after { + color: var(--fa-secondary-color, inherit); + opacity: var(--fa-secondary-opacity, 0.4); } + +.fa-swap-opacity .fad::before, +.fa-swap-opacity .fa-duotone::before, +.fad.fa-swap-opacity::before, +.fa-duotone.fa-swap-opacity::before { + opacity: var(--fa-secondary-opacity, 0.4); } + +.fa-swap-opacity .fad::after, +.fa-swap-opacity .fa-duotone::after, +.fad.fa-swap-opacity::after, +.fa-duotone.fa-swap-opacity::after { + opacity: var(--fa-primary-opacity, 1); } + +.fad.fa-inverse, +.fa-duotone.fa-inverse { + color: var(--fa-inverse, #fff); } + +.fad.fa-stack-1x, .fad.fa-stack-2x, +.fa-duotone.fa-stack-1x, .fa-duotone.fa-stack-2x { + position: absolute; } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen readers do not read off random characters that represent icons */ + +.fad.fa-0::after, .fa-duotone.fa-0::after { + content: "\30\30"; } + +.fad.fa-1::after, .fa-duotone.fa-1::after { + content: "\31\31"; } + +.fad.fa-2::after, .fa-duotone.fa-2::after { + content: "\32\32"; } + +.fad.fa-3::after, .fa-duotone.fa-3::after { + content: "\33\33"; } + +.fad.fa-4::after, .fa-duotone.fa-4::after { + content: "\34\34"; } + +.fad.fa-5::after, .fa-duotone.fa-5::after { + content: "\35\35"; } + +.fad.fa-6::after, .fa-duotone.fa-6::after { + content: "\36\36"; } + +.fad.fa-7::after, .fa-duotone.fa-7::after { + content: "\37\37"; } + +.fad.fa-8::after, .fa-duotone.fa-8::after { + content: "\38\38"; } + +.fad.fa-9::after, .fa-duotone.fa-9::after { + content: "\39\39"; } + +.fad.fa-fill-drip::after, .fa-duotone.fa-fill-drip::after { + content: "\f576\f576"; } + +.fad.fa-arrows-to-circle::after, .fa-duotone.fa-arrows-to-circle::after { + content: "\e4bd\e4bd"; } + +.fad.fa-circle-chevron-right::after, .fa-duotone.fa-circle-chevron-right::after { + content: "\f138\f138"; } + +.fad.fa-chevron-circle-right::after, .fa-duotone.fa-chevron-circle-right::after { + content: "\f138\f138"; } + +.fad.fa-wagon-covered::after, .fa-duotone.fa-wagon-covered::after { + content: "\f8ee\f8ee"; } + +.fad.fa-line-height::after, .fa-duotone.fa-line-height::after { + content: "\f871\f871"; } + +.fad.fa-bagel::after, .fa-duotone.fa-bagel::after { + content: "\e3d7\e3d7"; } + +.fad.fa-transporter-7::after, .fa-duotone.fa-transporter-7::after { + content: "\e2a8\e2a8"; } + +.fad.fa-at::after, .fa-duotone.fa-at::after { + content: "\40\40"; } + +.fad.fa-rectangles-mixed::after, .fa-duotone.fa-rectangles-mixed::after { + content: "\e323\e323"; } + +.fad.fa-phone-arrow-up-right::after, .fa-duotone.fa-phone-arrow-up-right::after { + content: "\e224\e224"; } + +.fad.fa-phone-arrow-up::after, .fa-duotone.fa-phone-arrow-up::after { + content: "\e224\e224"; } + +.fad.fa-phone-outgoing::after, .fa-duotone.fa-phone-outgoing::after { + content: "\e224\e224"; } + +.fad.fa-trash-can::after, .fa-duotone.fa-trash-can::after { + content: "\f2ed\f2ed"; } + +.fad.fa-trash-alt::after, .fa-duotone.fa-trash-alt::after { + content: "\f2ed\f2ed"; } + +.fad.fa-circle-l::after, .fa-duotone.fa-circle-l::after { + content: "\e114\e114"; } + +.fad.fa-head-side-goggles::after, .fa-duotone.fa-head-side-goggles::after { + content: "\f6ea\f6ea"; } + +.fad.fa-head-vr::after, .fa-duotone.fa-head-vr::after { + content: "\f6ea\f6ea"; } + +.fad.fa-text-height::after, .fa-duotone.fa-text-height::after { + content: "\f034\f034"; } + +.fad.fa-user-xmark::after, .fa-duotone.fa-user-xmark::after { + content: "\f235\f235"; } + +.fad.fa-user-times::after, .fa-duotone.fa-user-times::after { + content: "\f235\f235"; } + +.fad.fa-face-hand-yawn::after, .fa-duotone.fa-face-hand-yawn::after { + content: "\e379\e379"; } + +.fad.fa-gauge-simple-min::after, .fa-duotone.fa-gauge-simple-min::after { + content: "\f62d\f62d"; } + +.fad.fa-tachometer-slowest::after, .fa-duotone.fa-tachometer-slowest::after { + content: "\f62d\f62d"; } + +.fad.fa-stethoscope::after, .fa-duotone.fa-stethoscope::after { + content: "\f0f1\f0f1"; } + +.fad.fa-coffin::after, .fa-duotone.fa-coffin::after { + content: "\f6c6\f6c6"; } + +.fad.fa-message::after, .fa-duotone.fa-message::after { + content: "\f27a\f27a"; } + +.fad.fa-comment-alt::after, .fa-duotone.fa-comment-alt::after { + content: "\f27a\f27a"; } + +.fad.fa-salad::after, .fa-duotone.fa-salad::after { + content: "\f81e\f81e"; } + +.fad.fa-bowl-salad::after, .fa-duotone.fa-bowl-salad::after { + content: "\f81e\f81e"; } + +.fad.fa-info::after, .fa-duotone.fa-info::after { + content: "\f129\f129"; } + +.fad.fa-robot-astromech::after, .fa-duotone.fa-robot-astromech::after { + content: "\e2d2\e2d2"; } + +.fad.fa-ring-diamond::after, .fa-duotone.fa-ring-diamond::after { + content: "\e5ab\e5ab"; } + +.fad.fa-fondue-pot::after, .fa-duotone.fa-fondue-pot::after { + content: "\e40d\e40d"; } + +.fad.fa-theta::after, .fa-duotone.fa-theta::after { + content: "\f69e\f69e"; } + +.fad.fa-face-hand-peeking::after, .fa-duotone.fa-face-hand-peeking::after { + content: "\e481\e481"; } + +.fad.fa-square-user::after, .fa-duotone.fa-square-user::after { + content: "\e283\e283"; } + +.fad.fa-down-left-and-up-right-to-center::after, .fa-duotone.fa-down-left-and-up-right-to-center::after { + content: "\f422\f422"; } + +.fad.fa-compress-alt::after, .fa-duotone.fa-compress-alt::after { + content: "\f422\f422"; } + +.fad.fa-explosion::after, .fa-duotone.fa-explosion::after { + content: "\e4e9\e4e9"; } + +.fad.fa-file-lines::after, .fa-duotone.fa-file-lines::after { + content: "\f15c\f15c"; } + +.fad.fa-file-alt::after, .fa-duotone.fa-file-alt::after { + content: "\f15c\f15c"; } + +.fad.fa-file-text::after, .fa-duotone.fa-file-text::after { + content: "\f15c\f15c"; } + +.fad.fa-wave-square::after, .fa-duotone.fa-wave-square::after { + content: "\f83e\f83e"; } + +.fad.fa-ring::after, .fa-duotone.fa-ring::after { + content: "\f70b\f70b"; } + +.fad.fa-building-un::after, .fa-duotone.fa-building-un::after { + content: "\e4d9\e4d9"; } + +.fad.fa-dice-three::after, .fa-duotone.fa-dice-three::after { + content: "\f527\f527"; } + +.fad.fa-tire-pressure-warning::after, .fa-duotone.fa-tire-pressure-warning::after { + content: "\f633\f633"; } + +.fad.fa-wifi-fair::after, .fa-duotone.fa-wifi-fair::after { + content: "\f6ab\f6ab"; } + +.fad.fa-wifi-2::after, .fa-duotone.fa-wifi-2::after { + content: "\f6ab\f6ab"; } + +.fad.fa-calendar-days::after, .fa-duotone.fa-calendar-days::after { + content: "\f073\f073"; } + +.fad.fa-calendar-alt::after, .fa-duotone.fa-calendar-alt::after { + content: "\f073\f073"; } + +.fad.fa-mp3-player::after, .fa-duotone.fa-mp3-player::after { + content: "\f8ce\f8ce"; } + +.fad.fa-anchor-circle-check::after, .fa-duotone.fa-anchor-circle-check::after { + content: "\e4aa\e4aa"; } + +.fad.fa-tally-4::after, .fa-duotone.fa-tally-4::after { + content: "\e297\e297"; } + +.fad.fa-rectangle-history::after, .fa-duotone.fa-rectangle-history::after { + content: "\e4a2\e4a2"; } + +.fad.fa-building-circle-arrow-right::after, .fa-duotone.fa-building-circle-arrow-right::after { + content: "\e4d1\e4d1"; } + +.fad.fa-volleyball::after, .fa-duotone.fa-volleyball::after { + content: "\f45f\f45f"; } + +.fad.fa-volleyball-ball::after, .fa-duotone.fa-volleyball-ball::after { + content: "\f45f\f45f"; } + +.fad.fa-sun-haze::after, .fa-duotone.fa-sun-haze::after { + content: "\f765\f765"; } + +.fad.fa-text-size::after, .fa-duotone.fa-text-size::after { + content: "\f894\f894"; } + +.fad.fa-ufo::after, .fa-duotone.fa-ufo::after { + content: "\e047\e047"; } + +.fad.fa-fork::after, .fa-duotone.fa-fork::after { + content: "\f2e3\f2e3"; } + +.fad.fa-utensil-fork::after, .fa-duotone.fa-utensil-fork::after { + content: "\f2e3\f2e3"; } + +.fad.fa-arrows-up-to-line::after, .fa-duotone.fa-arrows-up-to-line::after { + content: "\e4c2\e4c2"; } + +.fad.fa-mobile-signal::after, .fa-duotone.fa-mobile-signal::after { + content: "\e1ef\e1ef"; } + +.fad.fa-barcode-scan::after, .fa-duotone.fa-barcode-scan::after { + content: "\f465\f465"; } + +.fad.fa-sort-down::after, .fa-duotone.fa-sort-down::after { + content: "\f0dd\f0dd"; } + +.fad.fa-sort-desc::after, .fa-duotone.fa-sort-desc::after { + content: "\f0dd\f0dd"; } + +.fad.fa-folder-arrow-down::after, .fa-duotone.fa-folder-arrow-down::after { + content: "\e053\e053"; } + +.fad.fa-folder-download::after, .fa-duotone.fa-folder-download::after { + content: "\e053\e053"; } + +.fad.fa-circle-minus::after, .fa-duotone.fa-circle-minus::after { + content: "\f056\f056"; } + +.fad.fa-minus-circle::after, .fa-duotone.fa-minus-circle::after { + content: "\f056\f056"; } + +.fad.fa-face-icicles::after, .fa-duotone.fa-face-icicles::after { + content: "\e37c\e37c"; } + +.fad.fa-shovel::after, .fa-duotone.fa-shovel::after { + content: "\f713\f713"; } + +.fad.fa-door-open::after, .fa-duotone.fa-door-open::after { + content: "\f52b\f52b"; } + +.fad.fa-films::after, .fa-duotone.fa-films::after { + content: "\e17a\e17a"; } + +.fad.fa-right-from-bracket::after, .fa-duotone.fa-right-from-bracket::after { + content: "\f2f5\f2f5"; } + +.fad.fa-sign-out-alt::after, .fa-duotone.fa-sign-out-alt::after { + content: "\f2f5\f2f5"; } + +.fad.fa-face-glasses::after, .fa-duotone.fa-face-glasses::after { + content: "\e377\e377"; } + +.fad.fa-nfc::after, .fa-duotone.fa-nfc::after { + content: "\e1f7\e1f7"; } + +.fad.fa-atom::after, .fa-duotone.fa-atom::after { + content: "\f5d2\f5d2"; } + +.fad.fa-soap::after, .fa-duotone.fa-soap::after { + content: "\e06e\e06e"; } + +.fad.fa-icons::after, .fa-duotone.fa-icons::after { + content: "\f86d\f86d"; } + +.fad.fa-heart-music-camera-bolt::after, .fa-duotone.fa-heart-music-camera-bolt::after { + content: "\f86d\f86d"; } + +.fad.fa-microphone-lines-slash::after, .fa-duotone.fa-microphone-lines-slash::after { + content: "\f539\f539"; } + +.fad.fa-microphone-alt-slash::after, .fa-duotone.fa-microphone-alt-slash::after { + content: "\f539\f539"; } + +.fad.fa-closed-captioning-slash::after, .fa-duotone.fa-closed-captioning-slash::after { + content: "\e135\e135"; } + +.fad.fa-calculator-simple::after, .fa-duotone.fa-calculator-simple::after { + content: "\f64c\f64c"; } + +.fad.fa-calculator-alt::after, .fa-duotone.fa-calculator-alt::after { + content: "\f64c\f64c"; } + +.fad.fa-bridge-circle-check::after, .fa-duotone.fa-bridge-circle-check::after { + content: "\e4c9\e4c9"; } + +.fad.fa-sliders-up::after, .fa-duotone.fa-sliders-up::after { + content: "\f3f1\f3f1"; } + +.fad.fa-sliders-v::after, .fa-duotone.fa-sliders-v::after { + content: "\f3f1\f3f1"; } + +.fad.fa-location-minus::after, .fa-duotone.fa-location-minus::after { + content: "\f609\f609"; } + +.fad.fa-map-marker-minus::after, .fa-duotone.fa-map-marker-minus::after { + content: "\f609\f609"; } + +.fad.fa-pump-medical::after, .fa-duotone.fa-pump-medical::after { + content: "\e06a\e06a"; } + +.fad.fa-fingerprint::after, .fa-duotone.fa-fingerprint::after { + content: "\f577\f577"; } + +.fad.fa-ski-boot::after, .fa-duotone.fa-ski-boot::after { + content: "\e3cc\e3cc"; } + +.fad.fa-standard-definition::after, .fa-duotone.fa-standard-definition::after { + content: "\e28a\e28a"; } + +.fad.fa-rectangle-sd::after, .fa-duotone.fa-rectangle-sd::after { + content: "\e28a\e28a"; } + +.fad.fa-h1::after, .fa-duotone.fa-h1::after { + content: "\f313\f313"; } + +.fad.fa-hand-point-right::after, .fa-duotone.fa-hand-point-right::after { + content: "\f0a4\f0a4"; } + +.fad.fa-magnifying-glass-location::after, .fa-duotone.fa-magnifying-glass-location::after { + content: "\f689\f689"; } + +.fad.fa-search-location::after, .fa-duotone.fa-search-location::after { + content: "\f689\f689"; } + +.fad.fa-message-bot::after, .fa-duotone.fa-message-bot::after { + content: "\e3b8\e3b8"; } + +.fad.fa-forward-step::after, .fa-duotone.fa-forward-step::after { + content: "\f051\f051"; } + +.fad.fa-step-forward::after, .fa-duotone.fa-step-forward::after { + content: "\f051\f051"; } + +.fad.fa-face-smile-beam::after, .fa-duotone.fa-face-smile-beam::after { + content: "\f5b8\f5b8"; } + +.fad.fa-smile-beam::after, .fa-duotone.fa-smile-beam::after { + content: "\f5b8\f5b8"; } + +.fad.fa-light-ceiling::after, .fa-duotone.fa-light-ceiling::after { + content: "\e016\e016"; } + +.fad.fa-message-exclamation::after, .fa-duotone.fa-message-exclamation::after { + content: "\f4a5\f4a5"; } + +.fad.fa-comment-alt-exclamation::after, .fa-duotone.fa-comment-alt-exclamation::after { + content: "\f4a5\f4a5"; } + +.fad.fa-bowl-scoop::after, .fa-duotone.fa-bowl-scoop::after { + content: "\e3de\e3de"; } + +.fad.fa-bowl-shaved-ice::after, .fa-duotone.fa-bowl-shaved-ice::after { + content: "\e3de\e3de"; } + +.fad.fa-square-x::after, .fa-duotone.fa-square-x::after { + content: "\e286\e286"; } + +.fad.fa-utility-pole-double::after, .fa-duotone.fa-utility-pole-double::after { + content: "\e2c4\e2c4"; } + +.fad.fa-flag-checkered::after, .fa-duotone.fa-flag-checkered::after { + content: "\f11e\f11e"; } + +.fad.fa-chevrons-up::after, .fa-duotone.fa-chevrons-up::after { + content: "\f325\f325"; } + +.fad.fa-chevron-double-up::after, .fa-duotone.fa-chevron-double-up::after { + content: "\f325\f325"; } + +.fad.fa-football::after, .fa-duotone.fa-football::after { + content: "\f44e\f44e"; } + +.fad.fa-football-ball::after, .fa-duotone.fa-football-ball::after { + content: "\f44e\f44e"; } + +.fad.fa-user-vneck::after, .fa-duotone.fa-user-vneck::after { + content: "\e461\e461"; } + +.fad.fa-school-circle-exclamation::after, .fa-duotone.fa-school-circle-exclamation::after { + content: "\e56c\e56c"; } + +.fad.fa-crop::after, .fa-duotone.fa-crop::after { + content: "\f125\f125"; } + +.fad.fa-angles-down::after, .fa-duotone.fa-angles-down::after { + content: "\f103\f103"; } + +.fad.fa-angle-double-down::after, .fa-duotone.fa-angle-double-down::after { + content: "\f103\f103"; } + +.fad.fa-users-rectangle::after, .fa-duotone.fa-users-rectangle::after { + content: "\e594\e594"; } + +.fad.fa-people-roof::after, .fa-duotone.fa-people-roof::after { + content: "\e537\e537"; } + +.fad.fa-square-arrow-right::after, .fa-duotone.fa-square-arrow-right::after { + content: "\f33b\f33b"; } + +.fad.fa-arrow-square-right::after, .fa-duotone.fa-arrow-square-right::after { + content: "\f33b\f33b"; } + +.fad.fa-location-plus::after, .fa-duotone.fa-location-plus::after { + content: "\f60a\f60a"; } + +.fad.fa-map-marker-plus::after, .fa-duotone.fa-map-marker-plus::after { + content: "\f60a\f60a"; } + +.fad.fa-lightbulb-exclamation-on::after, .fa-duotone.fa-lightbulb-exclamation-on::after { + content: "\e1ca\e1ca"; } + +.fad.fa-people-line::after, .fa-duotone.fa-people-line::after { + content: "\e534\e534"; } + +.fad.fa-beer-mug-empty::after, .fa-duotone.fa-beer-mug-empty::after { + content: "\f0fc\f0fc"; } + +.fad.fa-beer::after, .fa-duotone.fa-beer::after { + content: "\f0fc\f0fc"; } + +.fad.fa-crate-empty::after, .fa-duotone.fa-crate-empty::after { + content: "\e151\e151"; } + +.fad.fa-diagram-predecessor::after, .fa-duotone.fa-diagram-predecessor::after { + content: "\e477\e477"; } + +.fad.fa-transporter::after, .fa-duotone.fa-transporter::after { + content: "\e042\e042"; } + +.fad.fa-calendar-circle-user::after, .fa-duotone.fa-calendar-circle-user::after { + content: "\e471\e471"; } + +.fad.fa-arrow-up-long::after, .fa-duotone.fa-arrow-up-long::after { + content: "\f176\f176"; } + +.fad.fa-long-arrow-up::after, .fa-duotone.fa-long-arrow-up::after { + content: "\f176\f176"; } + +.fad.fa-person-carry-box::after, .fa-duotone.fa-person-carry-box::after { + content: "\f4cf\f4cf"; } + +.fad.fa-person-carry::after, .fa-duotone.fa-person-carry::after { + content: "\f4cf\f4cf"; } + +.fad.fa-fire-flame-simple::after, .fa-duotone.fa-fire-flame-simple::after { + content: "\f46a\f46a"; } + +.fad.fa-burn::after, .fa-duotone.fa-burn::after { + content: "\f46a\f46a"; } + +.fad.fa-person::after, .fa-duotone.fa-person::after { + content: "\f183\f183"; } + +.fad.fa-male::after, .fa-duotone.fa-male::after { + content: "\f183\f183"; } + +.fad.fa-laptop::after, .fa-duotone.fa-laptop::after { + content: "\f109\f109"; } + +.fad.fa-file-csv::after, .fa-duotone.fa-file-csv::after { + content: "\f6dd\f6dd"; } + +.fad.fa-menorah::after, .fa-duotone.fa-menorah::after { + content: "\f676\f676"; } + +.fad.fa-union::after, .fa-duotone.fa-union::after { + content: "\f6a2\f6a2"; } + +.fad.fa-chevrons-left::after, .fa-duotone.fa-chevrons-left::after { + content: "\f323\f323"; } + +.fad.fa-chevron-double-left::after, .fa-duotone.fa-chevron-double-left::after { + content: "\f323\f323"; } + +.fad.fa-circle-heart::after, .fa-duotone.fa-circle-heart::after { + content: "\f4c7\f4c7"; } + +.fad.fa-heart-circle::after, .fa-duotone.fa-heart-circle::after { + content: "\f4c7\f4c7"; } + +.fad.fa-truck-plane::after, .fa-duotone.fa-truck-plane::after { + content: "\e58f\e58f"; } + +.fad.fa-record-vinyl::after, .fa-duotone.fa-record-vinyl::after { + content: "\f8d9\f8d9"; } + +.fad.fa-bring-forward::after, .fa-duotone.fa-bring-forward::after { + content: "\f856\f856"; } + +.fad.fa-square-p::after, .fa-duotone.fa-square-p::after { + content: "\e279\e279"; } + +.fad.fa-face-grin-stars::after, .fa-duotone.fa-face-grin-stars::after { + content: "\f587\f587"; } + +.fad.fa-grin-stars::after, .fa-duotone.fa-grin-stars::after { + content: "\f587\f587"; } + +.fad.fa-sigma::after, .fa-duotone.fa-sigma::after { + content: "\f68b\f68b"; } + +.fad.fa-camera-movie::after, .fa-duotone.fa-camera-movie::after { + content: "\f8a9\f8a9"; } + +.fad.fa-bong::after, .fa-duotone.fa-bong::after { + content: "\f55c\f55c"; } + +.fad.fa-clarinet::after, .fa-duotone.fa-clarinet::after { + content: "\f8ad\f8ad"; } + +.fad.fa-truck-flatbed::after, .fa-duotone.fa-truck-flatbed::after { + content: "\e2b6\e2b6"; } + +.fad.fa-spaghetti-monster-flying::after, .fa-duotone.fa-spaghetti-monster-flying::after { + content: "\f67b\f67b"; } + +.fad.fa-pastafarianism::after, .fa-duotone.fa-pastafarianism::after { + content: "\f67b\f67b"; } + +.fad.fa-arrow-down-up-across-line::after, .fa-duotone.fa-arrow-down-up-across-line::after { + content: "\e4af\e4af"; } + +.fad.fa-leaf-heart::after, .fa-duotone.fa-leaf-heart::after { + content: "\f4cb\f4cb"; } + +.fad.fa-house-building::after, .fa-duotone.fa-house-building::after { + content: "\e1b1\e1b1"; } + +.fad.fa-cheese-swiss::after, .fa-duotone.fa-cheese-swiss::after { + content: "\f7f0\f7f0"; } + +.fad.fa-spoon::after, .fa-duotone.fa-spoon::after { + content: "\f2e5\f2e5"; } + +.fad.fa-utensil-spoon::after, .fa-duotone.fa-utensil-spoon::after { + content: "\f2e5\f2e5"; } + +.fad.fa-jar-wheat::after, .fa-duotone.fa-jar-wheat::after { + content: "\e517\e517"; } + +.fad.fa-envelopes-bulk::after, .fa-duotone.fa-envelopes-bulk::after { + content: "\f674\f674"; } + +.fad.fa-mail-bulk::after, .fa-duotone.fa-mail-bulk::after { + content: "\f674\f674"; } + +.fad.fa-file-circle-exclamation::after, .fa-duotone.fa-file-circle-exclamation::after { + content: "\e4eb\e4eb"; } + +.fad.fa-bow-arrow::after, .fa-duotone.fa-bow-arrow::after { + content: "\f6b9\f6b9"; } + +.fad.fa-cart-xmark::after, .fa-duotone.fa-cart-xmark::after { + content: "\e0dd\e0dd"; } + +.fad.fa-hexagon-xmark::after, .fa-duotone.fa-hexagon-xmark::after { + content: "\f2ee\f2ee"; } + +.fad.fa-times-hexagon::after, .fa-duotone.fa-times-hexagon::after { + content: "\f2ee\f2ee"; } + +.fad.fa-xmark-hexagon::after, .fa-duotone.fa-xmark-hexagon::after { + content: "\f2ee\f2ee"; } + +.fad.fa-circle-h::after, .fa-duotone.fa-circle-h::after { + content: "\f47e\f47e"; } + +.fad.fa-hospital-symbol::after, .fa-duotone.fa-hospital-symbol::after { + content: "\f47e\f47e"; } + +.fad.fa-merge::after, .fa-duotone.fa-merge::after { + content: "\e526\e526"; } + +.fad.fa-pager::after, .fa-duotone.fa-pager::after { + content: "\f815\f815"; } + +.fad.fa-cart-minus::after, .fa-duotone.fa-cart-minus::after { + content: "\e0db\e0db"; } + +.fad.fa-address-book::after, .fa-duotone.fa-address-book::after { + content: "\f2b9\f2b9"; } + +.fad.fa-contact-book::after, .fa-duotone.fa-contact-book::after { + content: "\f2b9\f2b9"; } + +.fad.fa-pan-frying::after, .fa-duotone.fa-pan-frying::after { + content: "\e42c\e42c"; } + +.fad.fa-grid::after, .fa-duotone.fa-grid::after { + content: "\e195\e195"; } + +.fad.fa-grid-3::after, .fa-duotone.fa-grid-3::after { + content: "\e195\e195"; } + +.fad.fa-football-helmet::after, .fa-duotone.fa-football-helmet::after { + content: "\f44f\f44f"; } + +.fad.fa-hand-love::after, .fa-duotone.fa-hand-love::after { + content: "\e1a5\e1a5"; } + +.fad.fa-trees::after, .fa-duotone.fa-trees::after { + content: "\f724\f724"; } + +.fad.fa-strikethrough::after, .fa-duotone.fa-strikethrough::after { + content: "\f0cc\f0cc"; } + +.fad.fa-page::after, .fa-duotone.fa-page::after { + content: "\e428\e428"; } + +.fad.fa-k::after, .fa-duotone.fa-k::after { + content: "\4b\4b"; } + +.fad.fa-diagram-previous::after, .fa-duotone.fa-diagram-previous::after { + content: "\e478\e478"; } + +.fad.fa-gauge-min::after, .fa-duotone.fa-gauge-min::after { + content: "\f628\f628"; } + +.fad.fa-tachometer-alt-slowest::after, .fa-duotone.fa-tachometer-alt-slowest::after { + content: "\f628\f628"; } + +.fad.fa-folder-grid::after, .fa-duotone.fa-folder-grid::after { + content: "\e188\e188"; } + +.fad.fa-eggplant::after, .fa-duotone.fa-eggplant::after { + content: "\e16c\e16c"; } + +.fad.fa-ram::after, .fa-duotone.fa-ram::after { + content: "\f70a\f70a"; } + +.fad.fa-landmark-flag::after, .fa-duotone.fa-landmark-flag::after { + content: "\e51c\e51c"; } + +.fad.fa-lips::after, .fa-duotone.fa-lips::after { + content: "\f600\f600"; } + +.fad.fa-pencil::after, .fa-duotone.fa-pencil::after { + content: "\f303\f303"; } + +.fad.fa-pencil-alt::after, .fa-duotone.fa-pencil-alt::after { + content: "\f303\f303"; } + +.fad.fa-backward::after, .fa-duotone.fa-backward::after { + content: "\f04a\f04a"; } + +.fad.fa-caret-right::after, .fa-duotone.fa-caret-right::after { + content: "\f0da\f0da"; } + +.fad.fa-comments::after, .fa-duotone.fa-comments::after { + content: "\f086\f086"; } + +.fad.fa-paste::after, .fa-duotone.fa-paste::after { + content: "\f0ea\f0ea"; } + +.fad.fa-file-clipboard::after, .fa-duotone.fa-file-clipboard::after { + content: "\f0ea\f0ea"; } + +.fad.fa-desktop-arrow-down::after, .fa-duotone.fa-desktop-arrow-down::after { + content: "\e155\e155"; } + +.fad.fa-code-pull-request::after, .fa-duotone.fa-code-pull-request::after { + content: "\e13c\e13c"; } + +.fad.fa-pumpkin::after, .fa-duotone.fa-pumpkin::after { + content: "\f707\f707"; } + +.fad.fa-clipboard-list::after, .fa-duotone.fa-clipboard-list::after { + content: "\f46d\f46d"; } + +.fad.fa-pen-field::after, .fa-duotone.fa-pen-field::after { + content: "\e211\e211"; } + +.fad.fa-blueberries::after, .fa-duotone.fa-blueberries::after { + content: "\e2e8\e2e8"; } + +.fad.fa-truck-ramp-box::after, .fa-duotone.fa-truck-ramp-box::after { + content: "\f4de\f4de"; } + +.fad.fa-truck-loading::after, .fa-duotone.fa-truck-loading::after { + content: "\f4de\f4de"; } + +.fad.fa-note::after, .fa-duotone.fa-note::after { + content: "\e1ff\e1ff"; } + +.fad.fa-arrow-down-to-square::after, .fa-duotone.fa-arrow-down-to-square::after { + content: "\e096\e096"; } + +.fad.fa-user-check::after, .fa-duotone.fa-user-check::after { + content: "\f4fc\f4fc"; } + +.fad.fa-cloud-xmark::after, .fa-duotone.fa-cloud-xmark::after { + content: "\e35f\e35f"; } + +.fad.fa-vial-virus::after, .fa-duotone.fa-vial-virus::after { + content: "\e597\e597"; } + +.fad.fa-book-blank::after, .fa-duotone.fa-book-blank::after { + content: "\f5d9\f5d9"; } + +.fad.fa-book-alt::after, .fa-duotone.fa-book-alt::after { + content: "\f5d9\f5d9"; } + +.fad.fa-golf-flag-hole::after, .fa-duotone.fa-golf-flag-hole::after { + content: "\e3ac\e3ac"; } + +.fad.fa-message-arrow-down::after, .fa-duotone.fa-message-arrow-down::after { + content: "\e1db\e1db"; } + +.fad.fa-comment-alt-arrow-down::after, .fa-duotone.fa-comment-alt-arrow-down::after { + content: "\e1db\e1db"; } + +.fad.fa-face-unamused::after, .fa-duotone.fa-face-unamused::after { + content: "\e39f\e39f"; } + +.fad.fa-sheet-plastic::after, .fa-duotone.fa-sheet-plastic::after { + content: "\e571\e571"; } + +.fad.fa-circle-9::after, .fa-duotone.fa-circle-9::after { + content: "\e0f6\e0f6"; } + +.fad.fa-blog::after, .fa-duotone.fa-blog::after { + content: "\f781\f781"; } + +.fad.fa-user-ninja::after, .fa-duotone.fa-user-ninja::after { + content: "\f504\f504"; } + +.fad.fa-pencil-slash::after, .fa-duotone.fa-pencil-slash::after { + content: "\e215\e215"; } + +.fad.fa-bowling-pins::after, .fa-duotone.fa-bowling-pins::after { + content: "\f437\f437"; } + +.fad.fa-person-arrow-up-from-line::after, .fa-duotone.fa-person-arrow-up-from-line::after { + content: "\e539\e539"; } + +.fad.fa-down-right::after, .fa-duotone.fa-down-right::after { + content: "\e16b\e16b"; } + +.fad.fa-scroll-torah::after, .fa-duotone.fa-scroll-torah::after { + content: "\f6a0\f6a0"; } + +.fad.fa-torah::after, .fa-duotone.fa-torah::after { + content: "\f6a0\f6a0"; } + +.fad.fa-webhook::after, .fa-duotone.fa-webhook::after { + content: "\e5d5\e5d5"; } + +.fad.fa-blinds-open::after, .fa-duotone.fa-blinds-open::after { + content: "\f8fc\f8fc"; } + +.fad.fa-fence::after, .fa-duotone.fa-fence::after { + content: "\e303\e303"; } + +.fad.fa-up::after, .fa-duotone.fa-up::after { + content: "\f357\f357"; } + +.fad.fa-arrow-alt-up::after, .fa-duotone.fa-arrow-alt-up::after { + content: "\f357\f357"; } + +.fad.fa-broom-ball::after, .fa-duotone.fa-broom-ball::after { + content: "\f458\f458"; } + +.fad.fa-quidditch::after, .fa-duotone.fa-quidditch::after { + content: "\f458\f458"; } + +.fad.fa-quidditch-broom-ball::after, .fa-duotone.fa-quidditch-broom-ball::after { + content: "\f458\f458"; } + +.fad.fa-drumstick::after, .fa-duotone.fa-drumstick::after { + content: "\f6d6\f6d6"; } + +.fad.fa-square-v::after, .fa-duotone.fa-square-v::after { + content: "\e284\e284"; } + +.fad.fa-face-awesome::after, .fa-duotone.fa-face-awesome::after { + content: "\e409\e409"; } + +.fad.fa-gave-dandy::after, .fa-duotone.fa-gave-dandy::after { + content: "\e409\e409"; } + +.fad.fa-dial-off::after, .fa-duotone.fa-dial-off::after { + content: "\e162\e162"; } + +.fad.fa-toggle-off::after, .fa-duotone.fa-toggle-off::after { + content: "\f204\f204"; } + +.fad.fa-face-smile-horns::after, .fa-duotone.fa-face-smile-horns::after { + content: "\e391\e391"; } + +.fad.fa-box-archive::after, .fa-duotone.fa-box-archive::after { + content: "\f187\f187"; } + +.fad.fa-archive::after, .fa-duotone.fa-archive::after { + content: "\f187\f187"; } + +.fad.fa-grapes::after, .fa-duotone.fa-grapes::after { + content: "\e306\e306"; } + +.fad.fa-person-drowning::after, .fa-duotone.fa-person-drowning::after { + content: "\e545\e545"; } + +.fad.fa-dial-max::after, .fa-duotone.fa-dial-max::after { + content: "\e15e\e15e"; } + +.fad.fa-circle-m::after, .fa-duotone.fa-circle-m::after { + content: "\e115\e115"; } + +.fad.fa-calendar-image::after, .fa-duotone.fa-calendar-image::after { + content: "\e0d4\e0d4"; } + +.fad.fa-circle-caret-down::after, .fa-duotone.fa-circle-caret-down::after { + content: "\f32d\f32d"; } + +.fad.fa-caret-circle-down::after, .fa-duotone.fa-caret-circle-down::after { + content: "\f32d\f32d"; } + +.fad.fa-arrow-down-9-1::after, .fa-duotone.fa-arrow-down-9-1::after { + content: "\f886\f886"; } + +.fad.fa-sort-numeric-desc::after, .fa-duotone.fa-sort-numeric-desc::after { + content: "\f886\f886"; } + +.fad.fa-sort-numeric-down-alt::after, .fa-duotone.fa-sort-numeric-down-alt::after { + content: "\f886\f886"; } + +.fad.fa-face-grin-tongue-squint::after, .fa-duotone.fa-face-grin-tongue-squint::after { + content: "\f58a\f58a"; } + +.fad.fa-grin-tongue-squint::after, .fa-duotone.fa-grin-tongue-squint::after { + content: "\f58a\f58a"; } + +.fad.fa-shish-kebab::after, .fa-duotone.fa-shish-kebab::after { + content: "\f821\f821"; } + +.fad.fa-spray-can::after, .fa-duotone.fa-spray-can::after { + content: "\f5bd\f5bd"; } + +.fad.fa-alarm-snooze::after, .fa-duotone.fa-alarm-snooze::after { + content: "\f845\f845"; } + +.fad.fa-scarecrow::after, .fa-duotone.fa-scarecrow::after { + content: "\f70d\f70d"; } + +.fad.fa-truck-monster::after, .fa-duotone.fa-truck-monster::after { + content: "\f63b\f63b"; } + +.fad.fa-gift-card::after, .fa-duotone.fa-gift-card::after { + content: "\f663\f663"; } + +.fad.fa-w::after, .fa-duotone.fa-w::after { + content: "\57\57"; } + +.fad.fa-code-pull-request-draft::after, .fa-duotone.fa-code-pull-request-draft::after { + content: "\e3fa\e3fa"; } + +.fad.fa-square-b::after, .fa-duotone.fa-square-b::after { + content: "\e264\e264"; } + +.fad.fa-elephant::after, .fa-duotone.fa-elephant::after { + content: "\f6da\f6da"; } + +.fad.fa-earth-africa::after, .fa-duotone.fa-earth-africa::after { + content: "\f57c\f57c"; } + +.fad.fa-globe-africa::after, .fa-duotone.fa-globe-africa::after { + content: "\f57c\f57c"; } + +.fad.fa-rainbow::after, .fa-duotone.fa-rainbow::after { + content: "\f75b\f75b"; } + +.fad.fa-circle-notch::after, .fa-duotone.fa-circle-notch::after { + content: "\f1ce\f1ce"; } + +.fad.fa-tablet-screen-button::after, .fa-duotone.fa-tablet-screen-button::after { + content: "\f3fa\f3fa"; } + +.fad.fa-tablet-alt::after, .fa-duotone.fa-tablet-alt::after { + content: "\f3fa\f3fa"; } + +.fad.fa-paw::after, .fa-duotone.fa-paw::after { + content: "\f1b0\f1b0"; } + +.fad.fa-message-question::after, .fa-duotone.fa-message-question::after { + content: "\e1e3\e1e3"; } + +.fad.fa-cloud::after, .fa-duotone.fa-cloud::after { + content: "\f0c2\f0c2"; } + +.fad.fa-trowel-bricks::after, .fa-duotone.fa-trowel-bricks::after { + content: "\e58a\e58a"; } + +.fad.fa-square-3::after, .fa-duotone.fa-square-3::after { + content: "\e258\e258"; } + +.fad.fa-face-flushed::after, .fa-duotone.fa-face-flushed::after { + content: "\f579\f579"; } + +.fad.fa-flushed::after, .fa-duotone.fa-flushed::after { + content: "\f579\f579"; } + +.fad.fa-hospital-user::after, .fa-duotone.fa-hospital-user::after { + content: "\f80d\f80d"; } + +.fad.fa-microwave::after, .fa-duotone.fa-microwave::after { + content: "\e01b\e01b"; } + +.fad.fa-chf-sign::after, .fa-duotone.fa-chf-sign::after { + content: "\e602\e602"; } + +.fad.fa-tent-arrow-left-right::after, .fa-duotone.fa-tent-arrow-left-right::after { + content: "\e57f\e57f"; } + +.fad.fa-cart-circle-arrow-up::after, .fa-duotone.fa-cart-circle-arrow-up::after { + content: "\e3f0\e3f0"; } + +.fad.fa-trash-clock::after, .fa-duotone.fa-trash-clock::after { + content: "\e2b0\e2b0"; } + +.fad.fa-gavel::after, .fa-duotone.fa-gavel::after { + content: "\f0e3\f0e3"; } + +.fad.fa-legal::after, .fa-duotone.fa-legal::after { + content: "\f0e3\f0e3"; } + +.fad.fa-sprinkler-ceiling::after, .fa-duotone.fa-sprinkler-ceiling::after { + content: "\e44c\e44c"; } + +.fad.fa-browsers::after, .fa-duotone.fa-browsers::after { + content: "\e0cb\e0cb"; } + +.fad.fa-trillium::after, .fa-duotone.fa-trillium::after { + content: "\e588\e588"; } + +.fad.fa-music-slash::after, .fa-duotone.fa-music-slash::after { + content: "\f8d1\f8d1"; } + +.fad.fa-truck-ramp::after, .fa-duotone.fa-truck-ramp::after { + content: "\f4e0\f4e0"; } + +.fad.fa-binoculars::after, .fa-duotone.fa-binoculars::after { + content: "\f1e5\f1e5"; } + +.fad.fa-microphone-slash::after, .fa-duotone.fa-microphone-slash::after { + content: "\f131\f131"; } + +.fad.fa-box-tissue::after, .fa-duotone.fa-box-tissue::after { + content: "\e05b\e05b"; } + +.fad.fa-circle-c::after, .fa-duotone.fa-circle-c::after { + content: "\e101\e101"; } + +.fad.fa-star-christmas::after, .fa-duotone.fa-star-christmas::after { + content: "\f7d4\f7d4"; } + +.fad.fa-chart-bullet::after, .fa-duotone.fa-chart-bullet::after { + content: "\e0e1\e0e1"; } + +.fad.fa-motorcycle::after, .fa-duotone.fa-motorcycle::after { + content: "\f21c\f21c"; } + +.fad.fa-tree-christmas::after, .fa-duotone.fa-tree-christmas::after { + content: "\f7db\f7db"; } + +.fad.fa-tire-flat::after, .fa-duotone.fa-tire-flat::after { + content: "\f632\f632"; } + +.fad.fa-sunglasses::after, .fa-duotone.fa-sunglasses::after { + content: "\f892\f892"; } + +.fad.fa-badge::after, .fa-duotone.fa-badge::after { + content: "\f335\f335"; } + +.fad.fa-message-pen::after, .fa-duotone.fa-message-pen::after { + content: "\f4a4\f4a4"; } + +.fad.fa-comment-alt-edit::after, .fa-duotone.fa-comment-alt-edit::after { + content: "\f4a4\f4a4"; } + +.fad.fa-message-edit::after, .fa-duotone.fa-message-edit::after { + content: "\f4a4\f4a4"; } + +.fad.fa-bell-concierge::after, .fa-duotone.fa-bell-concierge::after { + content: "\f562\f562"; } + +.fad.fa-concierge-bell::after, .fa-duotone.fa-concierge-bell::after { + content: "\f562\f562"; } + +.fad.fa-pen-ruler::after, .fa-duotone.fa-pen-ruler::after { + content: "\f5ae\f5ae"; } + +.fad.fa-pencil-ruler::after, .fa-duotone.fa-pencil-ruler::after { + content: "\f5ae\f5ae"; } + +.fad.fa-arrow-progress::after, .fa-duotone.fa-arrow-progress::after { + content: "\e5df\e5df"; } + +.fad.fa-chess-rook-piece::after, .fa-duotone.fa-chess-rook-piece::after { + content: "\f448\f448"; } + +.fad.fa-chess-rook-alt::after, .fa-duotone.fa-chess-rook-alt::after { + content: "\f448\f448"; } + +.fad.fa-square-root::after, .fa-duotone.fa-square-root::after { + content: "\f697\f697"; } + +.fad.fa-album-collection-circle-plus::after, .fa-duotone.fa-album-collection-circle-plus::after { + content: "\e48e\e48e"; } + +.fad.fa-people-arrows::after, .fa-duotone.fa-people-arrows::after { + content: "\e068\e068"; } + +.fad.fa-people-arrows-left-right::after, .fa-duotone.fa-people-arrows-left-right::after { + content: "\e068\e068"; } + +.fad.fa-face-angry-horns::after, .fa-duotone.fa-face-angry-horns::after { + content: "\e368\e368"; } + +.fad.fa-mars-and-venus-burst::after, .fa-duotone.fa-mars-and-venus-burst::after { + content: "\e523\e523"; } + +.fad.fa-tombstone::after, .fa-duotone.fa-tombstone::after { + content: "\f720\f720"; } + +.fad.fa-square-caret-right::after, .fa-duotone.fa-square-caret-right::after { + content: "\f152\f152"; } + +.fad.fa-caret-square-right::after, .fa-duotone.fa-caret-square-right::after { + content: "\f152\f152"; } + +.fad.fa-scissors::after, .fa-duotone.fa-scissors::after { + content: "\f0c4\f0c4"; } + +.fad.fa-cut::after, .fa-duotone.fa-cut::after { + content: "\f0c4\f0c4"; } + +.fad.fa-list-music::after, .fa-duotone.fa-list-music::after { + content: "\f8c9\f8c9"; } + +.fad.fa-sun-plant-wilt::after, .fa-duotone.fa-sun-plant-wilt::after { + content: "\e57a\e57a"; } + +.fad.fa-toilets-portable::after, .fa-duotone.fa-toilets-portable::after { + content: "\e584\e584"; } + +.fad.fa-hockey-puck::after, .fa-duotone.fa-hockey-puck::after { + content: "\f453\f453"; } + +.fad.fa-mustache::after, .fa-duotone.fa-mustache::after { + content: "\e5bc\e5bc"; } + +.fad.fa-hyphen::after, .fa-duotone.fa-hyphen::after { + content: "\2d\2d"; } + +.fad.fa-table::after, .fa-duotone.fa-table::after { + content: "\f0ce\f0ce"; } + +.fad.fa-user-chef::after, .fa-duotone.fa-user-chef::after { + content: "\e3d2\e3d2"; } + +.fad.fa-message-image::after, .fa-duotone.fa-message-image::after { + content: "\e1e0\e1e0"; } + +.fad.fa-comment-alt-image::after, .fa-duotone.fa-comment-alt-image::after { + content: "\e1e0\e1e0"; } + +.fad.fa-users-medical::after, .fa-duotone.fa-users-medical::after { + content: "\f830\f830"; } + +.fad.fa-sensor-triangle-exclamation::after, .fa-duotone.fa-sensor-triangle-exclamation::after { + content: "\e029\e029"; } + +.fad.fa-sensor-alert::after, .fa-duotone.fa-sensor-alert::after { + content: "\e029\e029"; } + +.fad.fa-magnifying-glass-arrow-right::after, .fa-duotone.fa-magnifying-glass-arrow-right::after { + content: "\e521\e521"; } + +.fad.fa-tachograph-digital::after, .fa-duotone.fa-tachograph-digital::after { + content: "\f566\f566"; } + +.fad.fa-digital-tachograph::after, .fa-duotone.fa-digital-tachograph::after { + content: "\f566\f566"; } + +.fad.fa-face-mask::after, .fa-duotone.fa-face-mask::after { + content: "\e37f\e37f"; } + +.fad.fa-pickleball::after, .fa-duotone.fa-pickleball::after { + content: "\e435\e435"; } + +.fad.fa-star-sharp-half::after, .fa-duotone.fa-star-sharp-half::after { + content: "\e28c\e28c"; } + +.fad.fa-users-slash::after, .fa-duotone.fa-users-slash::after { + content: "\e073\e073"; } + +.fad.fa-clover::after, .fa-duotone.fa-clover::after { + content: "\e139\e139"; } + +.fad.fa-meat::after, .fa-duotone.fa-meat::after { + content: "\f814\f814"; } + +.fad.fa-reply::after, .fa-duotone.fa-reply::after { + content: "\f3e5\f3e5"; } + +.fad.fa-mail-reply::after, .fa-duotone.fa-mail-reply::after { + content: "\f3e5\f3e5"; } + +.fad.fa-star-and-crescent::after, .fa-duotone.fa-star-and-crescent::after { + content: "\f699\f699"; } + +.fad.fa-empty-set::after, .fa-duotone.fa-empty-set::after { + content: "\f656\f656"; } + +.fad.fa-house-fire::after, .fa-duotone.fa-house-fire::after { + content: "\e50c\e50c"; } + +.fad.fa-square-minus::after, .fa-duotone.fa-square-minus::after { + content: "\f146\f146"; } + +.fad.fa-minus-square::after, .fa-duotone.fa-minus-square::after { + content: "\f146\f146"; } + +.fad.fa-helicopter::after, .fa-duotone.fa-helicopter::after { + content: "\f533\f533"; } + +.fad.fa-bird::after, .fa-duotone.fa-bird::after { + content: "\e469\e469"; } + +.fad.fa-compass::after, .fa-duotone.fa-compass::after { + content: "\f14e\f14e"; } + +.fad.fa-square-caret-down::after, .fa-duotone.fa-square-caret-down::after { + content: "\f150\f150"; } + +.fad.fa-caret-square-down::after, .fa-duotone.fa-caret-square-down::after { + content: "\f150\f150"; } + +.fad.fa-heart-half-stroke::after, .fa-duotone.fa-heart-half-stroke::after { + content: "\e1ac\e1ac"; } + +.fad.fa-heart-half-alt::after, .fa-duotone.fa-heart-half-alt::after { + content: "\e1ac\e1ac"; } + +.fad.fa-file-circle-question::after, .fa-duotone.fa-file-circle-question::after { + content: "\e4ef\e4ef"; } + +.fad.fa-laptop-code::after, .fa-duotone.fa-laptop-code::after { + content: "\f5fc\f5fc"; } + +.fad.fa-joystick::after, .fa-duotone.fa-joystick::after { + content: "\f8c5\f8c5"; } + +.fad.fa-grill-fire::after, .fa-duotone.fa-grill-fire::after { + content: "\e5a4\e5a4"; } + +.fad.fa-rectangle-vertical-history::after, .fa-duotone.fa-rectangle-vertical-history::after { + content: "\e237\e237"; } + +.fad.fa-swatchbook::after, .fa-duotone.fa-swatchbook::after { + content: "\f5c3\f5c3"; } + +.fad.fa-prescription-bottle::after, .fa-duotone.fa-prescription-bottle::after { + content: "\f485\f485"; } + +.fad.fa-bars::after, .fa-duotone.fa-bars::after { + content: "\f0c9\f0c9"; } + +.fad.fa-navicon::after, .fa-duotone.fa-navicon::after { + content: "\f0c9\f0c9"; } + +.fad.fa-keyboard-left::after, .fa-duotone.fa-keyboard-left::after { + content: "\e1c3\e1c3"; } + +.fad.fa-people-group::after, .fa-duotone.fa-people-group::after { + content: "\e533\e533"; } + +.fad.fa-hourglass-end::after, .fa-duotone.fa-hourglass-end::after { + content: "\f253\f253"; } + +.fad.fa-hourglass-3::after, .fa-duotone.fa-hourglass-3::after { + content: "\f253\f253"; } + +.fad.fa-heart-crack::after, .fa-duotone.fa-heart-crack::after { + content: "\f7a9\f7a9"; } + +.fad.fa-heart-broken::after, .fa-duotone.fa-heart-broken::after { + content: "\f7a9\f7a9"; } + +.fad.fa-face-beam-hand-over-mouth::after, .fa-duotone.fa-face-beam-hand-over-mouth::after { + content: "\e47c\e47c"; } + +.fad.fa-droplet-percent::after, .fa-duotone.fa-droplet-percent::after { + content: "\f750\f750"; } + +.fad.fa-humidity::after, .fa-duotone.fa-humidity::after { + content: "\f750\f750"; } + +.fad.fa-square-up-right::after, .fa-duotone.fa-square-up-right::after { + content: "\f360\f360"; } + +.fad.fa-external-link-square-alt::after, .fa-duotone.fa-external-link-square-alt::after { + content: "\f360\f360"; } + +.fad.fa-face-kiss-beam::after, .fa-duotone.fa-face-kiss-beam::after { + content: "\f597\f597"; } + +.fad.fa-kiss-beam::after, .fa-duotone.fa-kiss-beam::after { + content: "\f597\f597"; } + +.fad.fa-corn::after, .fa-duotone.fa-corn::after { + content: "\f6c7\f6c7"; } + +.fad.fa-roller-coaster::after, .fa-duotone.fa-roller-coaster::after { + content: "\e324\e324"; } + +.fad.fa-photo-film-music::after, .fa-duotone.fa-photo-film-music::after { + content: "\e228\e228"; } + +.fad.fa-radar::after, .fa-duotone.fa-radar::after { + content: "\e024\e024"; } + +.fad.fa-sickle::after, .fa-duotone.fa-sickle::after { + content: "\f822\f822"; } + +.fad.fa-film::after, .fa-duotone.fa-film::after { + content: "\f008\f008"; } + +.fad.fa-coconut::after, .fa-duotone.fa-coconut::after { + content: "\e2f6\e2f6"; } + +.fad.fa-ruler-horizontal::after, .fa-duotone.fa-ruler-horizontal::after { + content: "\f547\f547"; } + +.fad.fa-shield-cross::after, .fa-duotone.fa-shield-cross::after { + content: "\f712\f712"; } + +.fad.fa-cassette-tape::after, .fa-duotone.fa-cassette-tape::after { + content: "\f8ab\f8ab"; } + +.fad.fa-square-terminal::after, .fa-duotone.fa-square-terminal::after { + content: "\e32a\e32a"; } + +.fad.fa-people-robbery::after, .fa-duotone.fa-people-robbery::after { + content: "\e536\e536"; } + +.fad.fa-lightbulb::after, .fa-duotone.fa-lightbulb::after { + content: "\f0eb\f0eb"; } + +.fad.fa-caret-left::after, .fa-duotone.fa-caret-left::after { + content: "\f0d9\f0d9"; } + +.fad.fa-comment-middle::after, .fa-duotone.fa-comment-middle::after { + content: "\e149\e149"; } + +.fad.fa-trash-can-list::after, .fa-duotone.fa-trash-can-list::after { + content: "\e2ab\e2ab"; } + +.fad.fa-block::after, .fa-duotone.fa-block::after { + content: "\e46a\e46a"; } + +.fad.fa-circle-exclamation::after, .fa-duotone.fa-circle-exclamation::after { + content: "\f06a\f06a"; } + +.fad.fa-exclamation-circle::after, .fa-duotone.fa-exclamation-circle::after { + content: "\f06a\f06a"; } + +.fad.fa-school-circle-xmark::after, .fa-duotone.fa-school-circle-xmark::after { + content: "\e56d\e56d"; } + +.fad.fa-arrow-right-from-bracket::after, .fa-duotone.fa-arrow-right-from-bracket::after { + content: "\f08b\f08b"; } + +.fad.fa-sign-out::after, .fa-duotone.fa-sign-out::after { + content: "\f08b\f08b"; } + +.fad.fa-face-frown-slight::after, .fa-duotone.fa-face-frown-slight::after { + content: "\e376\e376"; } + +.fad.fa-circle-chevron-down::after, .fa-duotone.fa-circle-chevron-down::after { + content: "\f13a\f13a"; } + +.fad.fa-chevron-circle-down::after, .fa-duotone.fa-chevron-circle-down::after { + content: "\f13a\f13a"; } + +.fad.fa-sidebar-flip::after, .fa-duotone.fa-sidebar-flip::after { + content: "\e24f\e24f"; } + +.fad.fa-unlock-keyhole::after, .fa-duotone.fa-unlock-keyhole::after { + content: "\f13e\f13e"; } + +.fad.fa-unlock-alt::after, .fa-duotone.fa-unlock-alt::after { + content: "\f13e\f13e"; } + +.fad.fa-temperature-list::after, .fa-duotone.fa-temperature-list::after { + content: "\e299\e299"; } + +.fad.fa-cloud-showers-heavy::after, .fa-duotone.fa-cloud-showers-heavy::after { + content: "\f740\f740"; } + +.fad.fa-headphones-simple::after, .fa-duotone.fa-headphones-simple::after { + content: "\f58f\f58f"; } + +.fad.fa-headphones-alt::after, .fa-duotone.fa-headphones-alt::after { + content: "\f58f\f58f"; } + +.fad.fa-sitemap::after, .fa-duotone.fa-sitemap::after { + content: "\f0e8\f0e8"; } + +.fad.fa-pipe-section::after, .fa-duotone.fa-pipe-section::after { + content: "\e438\e438"; } + +.fad.fa-space-station-moon-construction::after, .fa-duotone.fa-space-station-moon-construction::after { + content: "\e034\e034"; } + +.fad.fa-space-station-moon-alt::after, .fa-duotone.fa-space-station-moon-alt::after { + content: "\e034\e034"; } + +.fad.fa-circle-dollar-to-slot::after, .fa-duotone.fa-circle-dollar-to-slot::after { + content: "\f4b9\f4b9"; } + +.fad.fa-donate::after, .fa-duotone.fa-donate::after { + content: "\f4b9\f4b9"; } + +.fad.fa-memory::after, .fa-duotone.fa-memory::after { + content: "\f538\f538"; } + +.fad.fa-face-sleeping::after, .fa-duotone.fa-face-sleeping::after { + content: "\e38d\e38d"; } + +.fad.fa-road-spikes::after, .fa-duotone.fa-road-spikes::after { + content: "\e568\e568"; } + +.fad.fa-fire-burner::after, .fa-duotone.fa-fire-burner::after { + content: "\e4f1\e4f1"; } + +.fad.fa-squirrel::after, .fa-duotone.fa-squirrel::after { + content: "\f71a\f71a"; } + +.fad.fa-arrow-up-to-line::after, .fa-duotone.fa-arrow-up-to-line::after { + content: "\f341\f341"; } + +.fad.fa-arrow-to-top::after, .fa-duotone.fa-arrow-to-top::after { + content: "\f341\f341"; } + +.fad.fa-flag::after, .fa-duotone.fa-flag::after { + content: "\f024\f024"; } + +.fad.fa-face-cowboy-hat::after, .fa-duotone.fa-face-cowboy-hat::after { + content: "\e36e\e36e"; } + +.fad.fa-hanukiah::after, .fa-duotone.fa-hanukiah::after { + content: "\f6e6\f6e6"; } + +.fad.fa-chart-scatter-3d::after, .fa-duotone.fa-chart-scatter-3d::after { + content: "\e0e8\e0e8"; } + +.fad.fa-display-chart-up::after, .fa-duotone.fa-display-chart-up::after { + content: "\e5e3\e5e3"; } + +.fad.fa-square-code::after, .fa-duotone.fa-square-code::after { + content: "\e267\e267"; } + +.fad.fa-feather::after, .fa-duotone.fa-feather::after { + content: "\f52d\f52d"; } + +.fad.fa-volume-low::after, .fa-duotone.fa-volume-low::after { + content: "\f027\f027"; } + +.fad.fa-volume-down::after, .fa-duotone.fa-volume-down::after { + content: "\f027\f027"; } + +.fad.fa-xmark-to-slot::after, .fa-duotone.fa-xmark-to-slot::after { + content: "\f771\f771"; } + +.fad.fa-times-to-slot::after, .fa-duotone.fa-times-to-slot::after { + content: "\f771\f771"; } + +.fad.fa-vote-nay::after, .fa-duotone.fa-vote-nay::after { + content: "\f771\f771"; } + +.fad.fa-box-taped::after, .fa-duotone.fa-box-taped::after { + content: "\f49a\f49a"; } + +.fad.fa-box-alt::after, .fa-duotone.fa-box-alt::after { + content: "\f49a\f49a"; } + +.fad.fa-comment-slash::after, .fa-duotone.fa-comment-slash::after { + content: "\f4b3\f4b3"; } + +.fad.fa-swords::after, .fa-duotone.fa-swords::after { + content: "\f71d\f71d"; } + +.fad.fa-cloud-sun-rain::after, .fa-duotone.fa-cloud-sun-rain::after { + content: "\f743\f743"; } + +.fad.fa-album::after, .fa-duotone.fa-album::after { + content: "\f89f\f89f"; } + +.fad.fa-circle-n::after, .fa-duotone.fa-circle-n::after { + content: "\e118\e118"; } + +.fad.fa-compress::after, .fa-duotone.fa-compress::after { + content: "\f066\f066"; } + +.fad.fa-wheat-awn::after, .fa-duotone.fa-wheat-awn::after { + content: "\e2cd\e2cd"; } + +.fad.fa-wheat-alt::after, .fa-duotone.fa-wheat-alt::after { + content: "\e2cd\e2cd"; } + +.fad.fa-ankh::after, .fa-duotone.fa-ankh::after { + content: "\f644\f644"; } + +.fad.fa-hands-holding-child::after, .fa-duotone.fa-hands-holding-child::after { + content: "\e4fa\e4fa"; } + +.fad.fa-asterisk::after, .fa-duotone.fa-asterisk::after { + content: "\2a\2a"; } + +.fad.fa-key-skeleton-left-right::after, .fa-duotone.fa-key-skeleton-left-right::after { + content: "\e3b4\e3b4"; } + +.fad.fa-comment-lines::after, .fa-duotone.fa-comment-lines::after { + content: "\f4b0\f4b0"; } + +.fad.fa-luchador-mask::after, .fa-duotone.fa-luchador-mask::after { + content: "\f455\f455"; } + +.fad.fa-luchador::after, .fa-duotone.fa-luchador::after { + content: "\f455\f455"; } + +.fad.fa-mask-luchador::after, .fa-duotone.fa-mask-luchador::after { + content: "\f455\f455"; } + +.fad.fa-square-check::after, .fa-duotone.fa-square-check::after { + content: "\f14a\f14a"; } + +.fad.fa-check-square::after, .fa-duotone.fa-check-square::after { + content: "\f14a\f14a"; } + +.fad.fa-shredder::after, .fa-duotone.fa-shredder::after { + content: "\f68a\f68a"; } + +.fad.fa-book-open-cover::after, .fa-duotone.fa-book-open-cover::after { + content: "\e0c0\e0c0"; } + +.fad.fa-book-open-alt::after, .fa-duotone.fa-book-open-alt::after { + content: "\e0c0\e0c0"; } + +.fad.fa-sandwich::after, .fa-duotone.fa-sandwich::after { + content: "\f81f\f81f"; } + +.fad.fa-peseta-sign::after, .fa-duotone.fa-peseta-sign::after { + content: "\e221\e221"; } + +.fad.fa-square-parking-slash::after, .fa-duotone.fa-square-parking-slash::after { + content: "\f617\f617"; } + +.fad.fa-parking-slash::after, .fa-duotone.fa-parking-slash::after { + content: "\f617\f617"; } + +.fad.fa-train-tunnel::after, .fa-duotone.fa-train-tunnel::after { + content: "\e454\e454"; } + +.fad.fa-heading::after, .fa-duotone.fa-heading::after { + content: "\f1dc\f1dc"; } + +.fad.fa-header::after, .fa-duotone.fa-header::after { + content: "\f1dc\f1dc"; } + +.fad.fa-ghost::after, .fa-duotone.fa-ghost::after { + content: "\f6e2\f6e2"; } + +.fad.fa-face-anguished::after, .fa-duotone.fa-face-anguished::after { + content: "\e369\e369"; } + +.fad.fa-hockey-sticks::after, .fa-duotone.fa-hockey-sticks::after { + content: "\f454\f454"; } + +.fad.fa-abacus::after, .fa-duotone.fa-abacus::after { + content: "\f640\f640"; } + +.fad.fa-film-simple::after, .fa-duotone.fa-film-simple::after { + content: "\f3a0\f3a0"; } + +.fad.fa-film-alt::after, .fa-duotone.fa-film-alt::after { + content: "\f3a0\f3a0"; } + +.fad.fa-list::after, .fa-duotone.fa-list::after { + content: "\f03a\f03a"; } + +.fad.fa-list-squares::after, .fa-duotone.fa-list-squares::after { + content: "\f03a\f03a"; } + +.fad.fa-tree-palm::after, .fa-duotone.fa-tree-palm::after { + content: "\f82b\f82b"; } + +.fad.fa-square-phone-flip::after, .fa-duotone.fa-square-phone-flip::after { + content: "\f87b\f87b"; } + +.fad.fa-phone-square-alt::after, .fa-duotone.fa-phone-square-alt::after { + content: "\f87b\f87b"; } + +.fad.fa-cart-plus::after, .fa-duotone.fa-cart-plus::after { + content: "\f217\f217"; } + +.fad.fa-gamepad::after, .fa-duotone.fa-gamepad::after { + content: "\f11b\f11b"; } + +.fad.fa-border-center-v::after, .fa-duotone.fa-border-center-v::after { + content: "\f89d\f89d"; } + +.fad.fa-circle-dot::after, .fa-duotone.fa-circle-dot::after { + content: "\f192\f192"; } + +.fad.fa-dot-circle::after, .fa-duotone.fa-dot-circle::after { + content: "\f192\f192"; } + +.fad.fa-clipboard-medical::after, .fa-duotone.fa-clipboard-medical::after { + content: "\e133\e133"; } + +.fad.fa-face-dizzy::after, .fa-duotone.fa-face-dizzy::after { + content: "\f567\f567"; } + +.fad.fa-dizzy::after, .fa-duotone.fa-dizzy::after { + content: "\f567\f567"; } + +.fad.fa-egg::after, .fa-duotone.fa-egg::after { + content: "\f7fb\f7fb"; } + +.fad.fa-up-to-line::after, .fa-duotone.fa-up-to-line::after { + content: "\f34d\f34d"; } + +.fad.fa-arrow-alt-to-top::after, .fa-duotone.fa-arrow-alt-to-top::after { + content: "\f34d\f34d"; } + +.fad.fa-house-medical-circle-xmark::after, .fa-duotone.fa-house-medical-circle-xmark::after { + content: "\e513\e513"; } + +.fad.fa-watch-fitness::after, .fa-duotone.fa-watch-fitness::after { + content: "\f63e\f63e"; } + +.fad.fa-clock-nine-thirty::after, .fa-duotone.fa-clock-nine-thirty::after { + content: "\e34d\e34d"; } + +.fad.fa-campground::after, .fa-duotone.fa-campground::after { + content: "\f6bb\f6bb"; } + +.fad.fa-folder-plus::after, .fa-duotone.fa-folder-plus::after { + content: "\f65e\f65e"; } + +.fad.fa-jug::after, .fa-duotone.fa-jug::after { + content: "\f8c6\f8c6"; } + +.fad.fa-futbol::after, .fa-duotone.fa-futbol::after { + content: "\f1e3\f1e3"; } + +.fad.fa-futbol-ball::after, .fa-duotone.fa-futbol-ball::after { + content: "\f1e3\f1e3"; } + +.fad.fa-soccer-ball::after, .fa-duotone.fa-soccer-ball::after { + content: "\f1e3\f1e3"; } + +.fad.fa-snow-blowing::after, .fa-duotone.fa-snow-blowing::after { + content: "\f761\f761"; } + +.fad.fa-paintbrush::after, .fa-duotone.fa-paintbrush::after { + content: "\f1fc\f1fc"; } + +.fad.fa-paint-brush::after, .fa-duotone.fa-paint-brush::after { + content: "\f1fc\f1fc"; } + +.fad.fa-lock::after, .fa-duotone.fa-lock::after { + content: "\f023\f023"; } + +.fad.fa-arrow-down-from-line::after, .fa-duotone.fa-arrow-down-from-line::after { + content: "\f345\f345"; } + +.fad.fa-arrow-from-top::after, .fa-duotone.fa-arrow-from-top::after { + content: "\f345\f345"; } + +.fad.fa-gas-pump::after, .fa-duotone.fa-gas-pump::after { + content: "\f52f\f52f"; } + +.fad.fa-signal-bars-slash::after, .fa-duotone.fa-signal-bars-slash::after { + content: "\f694\f694"; } + +.fad.fa-signal-alt-slash::after, .fa-duotone.fa-signal-alt-slash::after { + content: "\f694\f694"; } + +.fad.fa-monkey::after, .fa-duotone.fa-monkey::after { + content: "\f6fb\f6fb"; } + +.fad.fa-rectangle-pro::after, .fa-duotone.fa-rectangle-pro::after { + content: "\e235\e235"; } + +.fad.fa-pro::after, .fa-duotone.fa-pro::after { + content: "\e235\e235"; } + +.fad.fa-house-night::after, .fa-duotone.fa-house-night::after { + content: "\e010\e010"; } + +.fad.fa-hot-tub-person::after, .fa-duotone.fa-hot-tub-person::after { + content: "\f593\f593"; } + +.fad.fa-hot-tub::after, .fa-duotone.fa-hot-tub::after { + content: "\f593\f593"; } + +.fad.fa-globe-pointer::after, .fa-duotone.fa-globe-pointer::after { + content: "\e60e\e60e"; } + +.fad.fa-blanket::after, .fa-duotone.fa-blanket::after { + content: "\f498\f498"; } + +.fad.fa-map-location::after, .fa-duotone.fa-map-location::after { + content: "\f59f\f59f"; } + +.fad.fa-map-marked::after, .fa-duotone.fa-map-marked::after { + content: "\f59f\f59f"; } + +.fad.fa-house-flood-water::after, .fa-duotone.fa-house-flood-water::after { + content: "\e50e\e50e"; } + +.fad.fa-comments-question-check::after, .fa-duotone.fa-comments-question-check::after { + content: "\e14f\e14f"; } + +.fad.fa-tree::after, .fa-duotone.fa-tree::after { + content: "\f1bb\f1bb"; } + +.fad.fa-arrows-cross::after, .fa-duotone.fa-arrows-cross::after { + content: "\e0a2\e0a2"; } + +.fad.fa-backpack::after, .fa-duotone.fa-backpack::after { + content: "\f5d4\f5d4"; } + +.fad.fa-square-small::after, .fa-duotone.fa-square-small::after { + content: "\e27e\e27e"; } + +.fad.fa-folder-arrow-up::after, .fa-duotone.fa-folder-arrow-up::after { + content: "\e054\e054"; } + +.fad.fa-folder-upload::after, .fa-duotone.fa-folder-upload::after { + content: "\e054\e054"; } + +.fad.fa-bridge-lock::after, .fa-duotone.fa-bridge-lock::after { + content: "\e4cc\e4cc"; } + +.fad.fa-crosshairs-simple::after, .fa-duotone.fa-crosshairs-simple::after { + content: "\e59f\e59f"; } + +.fad.fa-sack-dollar::after, .fa-duotone.fa-sack-dollar::after { + content: "\f81d\f81d"; } + +.fad.fa-pen-to-square::after, .fa-duotone.fa-pen-to-square::after { + content: "\f044\f044"; } + +.fad.fa-edit::after, .fa-duotone.fa-edit::after { + content: "\f044\f044"; } + +.fad.fa-square-sliders::after, .fa-duotone.fa-square-sliders::after { + content: "\f3f0\f3f0"; } + +.fad.fa-sliders-h-square::after, .fa-duotone.fa-sliders-h-square::after { + content: "\f3f0\f3f0"; } + +.fad.fa-car-side::after, .fa-duotone.fa-car-side::after { + content: "\f5e4\f5e4"; } + +.fad.fa-message-middle-top::after, .fa-duotone.fa-message-middle-top::after { + content: "\e1e2\e1e2"; } + +.fad.fa-comment-middle-top-alt::after, .fa-duotone.fa-comment-middle-top-alt::after { + content: "\e1e2\e1e2"; } + +.fad.fa-lightbulb-on::after, .fa-duotone.fa-lightbulb-on::after { + content: "\f672\f672"; } + +.fad.fa-knife::after, .fa-duotone.fa-knife::after { + content: "\f2e4\f2e4"; } + +.fad.fa-utensil-knife::after, .fa-duotone.fa-utensil-knife::after { + content: "\f2e4\f2e4"; } + +.fad.fa-share-nodes::after, .fa-duotone.fa-share-nodes::after { + content: "\f1e0\f1e0"; } + +.fad.fa-share-alt::after, .fa-duotone.fa-share-alt::after { + content: "\f1e0\f1e0"; } + +.fad.fa-display-chart-up-circle-dollar::after, .fa-duotone.fa-display-chart-up-circle-dollar::after { + content: "\e5e6\e5e6"; } + +.fad.fa-wave-sine::after, .fa-duotone.fa-wave-sine::after { + content: "\f899\f899"; } + +.fad.fa-heart-circle-minus::after, .fa-duotone.fa-heart-circle-minus::after { + content: "\e4ff\e4ff"; } + +.fad.fa-circle-w::after, .fa-duotone.fa-circle-w::after { + content: "\e12c\e12c"; } + +.fad.fa-circle-calendar::after, .fa-duotone.fa-circle-calendar::after { + content: "\e102\e102"; } + +.fad.fa-calendar-circle::after, .fa-duotone.fa-calendar-circle::after { + content: "\e102\e102"; } + +.fad.fa-hourglass-half::after, .fa-duotone.fa-hourglass-half::after { + content: "\f252\f252"; } + +.fad.fa-hourglass-2::after, .fa-duotone.fa-hourglass-2::after { + content: "\f252\f252"; } + +.fad.fa-microscope::after, .fa-duotone.fa-microscope::after { + content: "\f610\f610"; } + +.fad.fa-sunset::after, .fa-duotone.fa-sunset::after { + content: "\f767\f767"; } + +.fad.fa-sink::after, .fa-duotone.fa-sink::after { + content: "\e06d\e06d"; } + +.fad.fa-calendar-exclamation::after, .fa-duotone.fa-calendar-exclamation::after { + content: "\f334\f334"; } + +.fad.fa-truck-container-empty::after, .fa-duotone.fa-truck-container-empty::after { + content: "\e2b5\e2b5"; } + +.fad.fa-hand-heart::after, .fa-duotone.fa-hand-heart::after { + content: "\f4bc\f4bc"; } + +.fad.fa-bag-shopping::after, .fa-duotone.fa-bag-shopping::after { + content: "\f290\f290"; } + +.fad.fa-shopping-bag::after, .fa-duotone.fa-shopping-bag::after { + content: "\f290\f290"; } + +.fad.fa-arrow-down-z-a::after, .fa-duotone.fa-arrow-down-z-a::after { + content: "\f881\f881"; } + +.fad.fa-sort-alpha-desc::after, .fa-duotone.fa-sort-alpha-desc::after { + content: "\f881\f881"; } + +.fad.fa-sort-alpha-down-alt::after, .fa-duotone.fa-sort-alpha-down-alt::after { + content: "\f881\f881"; } + +.fad.fa-mitten::after, .fa-duotone.fa-mitten::after { + content: "\f7b5\f7b5"; } + +.fad.fa-reply-clock::after, .fa-duotone.fa-reply-clock::after { + content: "\e239\e239"; } + +.fad.fa-reply-time::after, .fa-duotone.fa-reply-time::after { + content: "\e239\e239"; } + +.fad.fa-person-rays::after, .fa-duotone.fa-person-rays::after { + content: "\e54d\e54d"; } + +.fad.fa-right::after, .fa-duotone.fa-right::after { + content: "\f356\f356"; } + +.fad.fa-arrow-alt-right::after, .fa-duotone.fa-arrow-alt-right::after { + content: "\f356\f356"; } + +.fad.fa-circle-f::after, .fa-duotone.fa-circle-f::after { + content: "\e10e\e10e"; } + +.fad.fa-users::after, .fa-duotone.fa-users::after { + content: "\f0c0\f0c0"; } + +.fad.fa-face-pleading::after, .fa-duotone.fa-face-pleading::after { + content: "\e386\e386"; } + +.fad.fa-eye-slash::after, .fa-duotone.fa-eye-slash::after { + content: "\f070\f070"; } + +.fad.fa-flask-vial::after, .fa-duotone.fa-flask-vial::after { + content: "\e4f3\e4f3"; } + +.fad.fa-police-box::after, .fa-duotone.fa-police-box::after { + content: "\e021\e021"; } + +.fad.fa-cucumber::after, .fa-duotone.fa-cucumber::after { + content: "\e401\e401"; } + +.fad.fa-head-side-brain::after, .fa-duotone.fa-head-side-brain::after { + content: "\f808\f808"; } + +.fad.fa-hand::after, .fa-duotone.fa-hand::after { + content: "\f256\f256"; } + +.fad.fa-hand-paper::after, .fa-duotone.fa-hand-paper::after { + content: "\f256\f256"; } + +.fad.fa-person-biking-mountain::after, .fa-duotone.fa-person-biking-mountain::after { + content: "\f84b\f84b"; } + +.fad.fa-biking-mountain::after, .fa-duotone.fa-biking-mountain::after { + content: "\f84b\f84b"; } + +.fad.fa-utensils-slash::after, .fa-duotone.fa-utensils-slash::after { + content: "\e464\e464"; } + +.fad.fa-print-magnifying-glass::after, .fa-duotone.fa-print-magnifying-glass::after { + content: "\f81a\f81a"; } + +.fad.fa-print-search::after, .fa-duotone.fa-print-search::after { + content: "\f81a\f81a"; } + +.fad.fa-folder-bookmark::after, .fa-duotone.fa-folder-bookmark::after { + content: "\e186\e186"; } + +.fad.fa-om::after, .fa-duotone.fa-om::after { + content: "\f679\f679"; } + +.fad.fa-pi::after, .fa-duotone.fa-pi::after { + content: "\f67e\f67e"; } + +.fad.fa-flask-round-potion::after, .fa-duotone.fa-flask-round-potion::after { + content: "\f6e1\f6e1"; } + +.fad.fa-flask-potion::after, .fa-duotone.fa-flask-potion::after { + content: "\f6e1\f6e1"; } + +.fad.fa-face-shush::after, .fa-duotone.fa-face-shush::after { + content: "\e38c\e38c"; } + +.fad.fa-worm::after, .fa-duotone.fa-worm::after { + content: "\e599\e599"; } + +.fad.fa-house-circle-xmark::after, .fa-duotone.fa-house-circle-xmark::after { + content: "\e50b\e50b"; } + +.fad.fa-plug::after, .fa-duotone.fa-plug::after { + content: "\f1e6\f1e6"; } + +.fad.fa-calendar-circle-exclamation::after, .fa-duotone.fa-calendar-circle-exclamation::after { + content: "\e46e\e46e"; } + +.fad.fa-square-i::after, .fa-duotone.fa-square-i::after { + content: "\e272\e272"; } + +.fad.fa-chevron-up::after, .fa-duotone.fa-chevron-up::after { + content: "\f077\f077"; } + +.fad.fa-face-saluting::after, .fa-duotone.fa-face-saluting::after { + content: "\e484\e484"; } + +.fad.fa-gauge-simple-low::after, .fa-duotone.fa-gauge-simple-low::after { + content: "\f62c\f62c"; } + +.fad.fa-tachometer-slow::after, .fa-duotone.fa-tachometer-slow::after { + content: "\f62c\f62c"; } + +.fad.fa-face-persevering::after, .fa-duotone.fa-face-persevering::after { + content: "\e385\e385"; } + +.fad.fa-circle-camera::after, .fa-duotone.fa-circle-camera::after { + content: "\e103\e103"; } + +.fad.fa-camera-circle::after, .fa-duotone.fa-camera-circle::after { + content: "\e103\e103"; } + +.fad.fa-hand-spock::after, .fa-duotone.fa-hand-spock::after { + content: "\f259\f259"; } + +.fad.fa-spider-web::after, .fa-duotone.fa-spider-web::after { + content: "\f719\f719"; } + +.fad.fa-circle-microphone::after, .fa-duotone.fa-circle-microphone::after { + content: "\e116\e116"; } + +.fad.fa-microphone-circle::after, .fa-duotone.fa-microphone-circle::after { + content: "\e116\e116"; } + +.fad.fa-book-arrow-up::after, .fa-duotone.fa-book-arrow-up::after { + content: "\e0ba\e0ba"; } + +.fad.fa-popsicle::after, .fa-duotone.fa-popsicle::after { + content: "\e43e\e43e"; } + +.fad.fa-command::after, .fa-duotone.fa-command::after { + content: "\e142\e142"; } + +.fad.fa-blinds::after, .fa-duotone.fa-blinds::after { + content: "\f8fb\f8fb"; } + +.fad.fa-stopwatch::after, .fa-duotone.fa-stopwatch::after { + content: "\f2f2\f2f2"; } + +.fad.fa-saxophone::after, .fa-duotone.fa-saxophone::after { + content: "\f8dc\f8dc"; } + +.fad.fa-square-2::after, .fa-duotone.fa-square-2::after { + content: "\e257\e257"; } + +.fad.fa-field-hockey-stick-ball::after, .fa-duotone.fa-field-hockey-stick-ball::after { + content: "\f44c\f44c"; } + +.fad.fa-field-hockey::after, .fa-duotone.fa-field-hockey::after { + content: "\f44c\f44c"; } + +.fad.fa-arrow-up-square-triangle::after, .fa-duotone.fa-arrow-up-square-triangle::after { + content: "\f88b\f88b"; } + +.fad.fa-sort-shapes-up-alt::after, .fa-duotone.fa-sort-shapes-up-alt::after { + content: "\f88b\f88b"; } + +.fad.fa-face-scream::after, .fa-duotone.fa-face-scream::after { + content: "\e38b\e38b"; } + +.fad.fa-square-m::after, .fa-duotone.fa-square-m::after { + content: "\e276\e276"; } + +.fad.fa-camera-web::after, .fa-duotone.fa-camera-web::after { + content: "\f832\f832"; } + +.fad.fa-webcam::after, .fa-duotone.fa-webcam::after { + content: "\f832\f832"; } + +.fad.fa-comment-arrow-down::after, .fa-duotone.fa-comment-arrow-down::after { + content: "\e143\e143"; } + +.fad.fa-lightbulb-cfl::after, .fa-duotone.fa-lightbulb-cfl::after { + content: "\e5a6\e5a6"; } + +.fad.fa-window-frame-open::after, .fa-duotone.fa-window-frame-open::after { + content: "\e050\e050"; } + +.fad.fa-face-kiss::after, .fa-duotone.fa-face-kiss::after { + content: "\f596\f596"; } + +.fad.fa-kiss::after, .fa-duotone.fa-kiss::after { + content: "\f596\f596"; } + +.fad.fa-bridge-circle-xmark::after, .fa-duotone.fa-bridge-circle-xmark::after { + content: "\e4cb\e4cb"; } + +.fad.fa-period::after, .fa-duotone.fa-period::after { + content: "\2e\2e"; } + +.fad.fa-face-grin-tongue::after, .fa-duotone.fa-face-grin-tongue::after { + content: "\f589\f589"; } + +.fad.fa-grin-tongue::after, .fa-duotone.fa-grin-tongue::after { + content: "\f589\f589"; } + +.fad.fa-up-to-dotted-line::after, .fa-duotone.fa-up-to-dotted-line::after { + content: "\e457\e457"; } + +.fad.fa-thought-bubble::after, .fa-duotone.fa-thought-bubble::after { + content: "\e32e\e32e"; } + +.fad.fa-skeleton-ribs::after, .fa-duotone.fa-skeleton-ribs::after { + content: "\e5cb\e5cb"; } + +.fad.fa-raygun::after, .fa-duotone.fa-raygun::after { + content: "\e025\e025"; } + +.fad.fa-flute::after, .fa-duotone.fa-flute::after { + content: "\f8b9\f8b9"; } + +.fad.fa-acorn::after, .fa-duotone.fa-acorn::after { + content: "\f6ae\f6ae"; } + +.fad.fa-video-arrow-up-right::after, .fa-duotone.fa-video-arrow-up-right::after { + content: "\e2c9\e2c9"; } + +.fad.fa-grate-droplet::after, .fa-duotone.fa-grate-droplet::after { + content: "\e194\e194"; } + +.fad.fa-seal-exclamation::after, .fa-duotone.fa-seal-exclamation::after { + content: "\e242\e242"; } + +.fad.fa-chess-bishop::after, .fa-duotone.fa-chess-bishop::after { + content: "\f43a\f43a"; } + +.fad.fa-message-sms::after, .fa-duotone.fa-message-sms::after { + content: "\e1e5\e1e5"; } + +.fad.fa-coffee-beans::after, .fa-duotone.fa-coffee-beans::after { + content: "\e13f\e13f"; } + +.fad.fa-hat-witch::after, .fa-duotone.fa-hat-witch::after { + content: "\f6e7\f6e7"; } + +.fad.fa-face-grin-wink::after, .fa-duotone.fa-face-grin-wink::after { + content: "\f58c\f58c"; } + +.fad.fa-grin-wink::after, .fa-duotone.fa-grin-wink::after { + content: "\f58c\f58c"; } + +.fad.fa-clock-three-thirty::after, .fa-duotone.fa-clock-three-thirty::after { + content: "\e357\e357"; } + +.fad.fa-ear-deaf::after, .fa-duotone.fa-ear-deaf::after { + content: "\f2a4\f2a4"; } + +.fad.fa-deaf::after, .fa-duotone.fa-deaf::after { + content: "\f2a4\f2a4"; } + +.fad.fa-deafness::after, .fa-duotone.fa-deafness::after { + content: "\f2a4\f2a4"; } + +.fad.fa-hard-of-hearing::after, .fa-duotone.fa-hard-of-hearing::after { + content: "\f2a4\f2a4"; } + +.fad.fa-alarm-clock::after, .fa-duotone.fa-alarm-clock::after { + content: "\f34e\f34e"; } + +.fad.fa-eclipse::after, .fa-duotone.fa-eclipse::after { + content: "\f749\f749"; } + +.fad.fa-face-relieved::after, .fa-duotone.fa-face-relieved::after { + content: "\e389\e389"; } + +.fad.fa-road-circle-check::after, .fa-duotone.fa-road-circle-check::after { + content: "\e564\e564"; } + +.fad.fa-dice-five::after, .fa-duotone.fa-dice-five::after { + content: "\f523\f523"; } + +.fad.fa-octagon-minus::after, .fa-duotone.fa-octagon-minus::after { + content: "\f308\f308"; } + +.fad.fa-minus-octagon::after, .fa-duotone.fa-minus-octagon::after { + content: "\f308\f308"; } + +.fad.fa-square-rss::after, .fa-duotone.fa-square-rss::after { + content: "\f143\f143"; } + +.fad.fa-rss-square::after, .fa-duotone.fa-rss-square::after { + content: "\f143\f143"; } + +.fad.fa-face-zany::after, .fa-duotone.fa-face-zany::after { + content: "\e3a4\e3a4"; } + +.fad.fa-tricycle::after, .fa-duotone.fa-tricycle::after { + content: "\e5c3\e5c3"; } + +.fad.fa-land-mine-on::after, .fa-duotone.fa-land-mine-on::after { + content: "\e51b\e51b"; } + +.fad.fa-square-arrow-up-left::after, .fa-duotone.fa-square-arrow-up-left::after { + content: "\e263\e263"; } + +.fad.fa-i-cursor::after, .fa-duotone.fa-i-cursor::after { + content: "\f246\f246"; } + +.fad.fa-chart-mixed-up-circle-dollar::after, .fa-duotone.fa-chart-mixed-up-circle-dollar::after { + content: "\e5d9\e5d9"; } + +.fad.fa-salt-shaker::after, .fa-duotone.fa-salt-shaker::after { + content: "\e446\e446"; } + +.fad.fa-stamp::after, .fa-duotone.fa-stamp::after { + content: "\f5bf\f5bf"; } + +.fad.fa-file-plus::after, .fa-duotone.fa-file-plus::after { + content: "\f319\f319"; } + +.fad.fa-draw-square::after, .fa-duotone.fa-draw-square::after { + content: "\f5ef\f5ef"; } + +.fad.fa-toilet-paper-under-slash::after, .fa-duotone.fa-toilet-paper-under-slash::after { + content: "\e2a1\e2a1"; } + +.fad.fa-toilet-paper-reverse-slash::after, .fa-duotone.fa-toilet-paper-reverse-slash::after { + content: "\e2a1\e2a1"; } + +.fad.fa-stairs::after, .fa-duotone.fa-stairs::after { + content: "\e289\e289"; } + +.fad.fa-drone-front::after, .fa-duotone.fa-drone-front::after { + content: "\f860\f860"; } + +.fad.fa-drone-alt::after, .fa-duotone.fa-drone-alt::after { + content: "\f860\f860"; } + +.fad.fa-glass-empty::after, .fa-duotone.fa-glass-empty::after { + content: "\e191\e191"; } + +.fad.fa-dial-high::after, .fa-duotone.fa-dial-high::after { + content: "\e15c\e15c"; } + +.fad.fa-user-helmet-safety::after, .fa-duotone.fa-user-helmet-safety::after { + content: "\f82c\f82c"; } + +.fad.fa-user-construction::after, .fa-duotone.fa-user-construction::after { + content: "\f82c\f82c"; } + +.fad.fa-user-hard-hat::after, .fa-duotone.fa-user-hard-hat::after { + content: "\f82c\f82c"; } + +.fad.fa-i::after, .fa-duotone.fa-i::after { + content: "\49\49"; } + +.fad.fa-hryvnia-sign::after, .fa-duotone.fa-hryvnia-sign::after { + content: "\f6f2\f6f2"; } + +.fad.fa-hryvnia::after, .fa-duotone.fa-hryvnia::after { + content: "\f6f2\f6f2"; } + +.fad.fa-arrow-down-left-and-arrow-up-right-to-center::after, .fa-duotone.fa-arrow-down-left-and-arrow-up-right-to-center::after { + content: "\e092\e092"; } + +.fad.fa-pills::after, .fa-duotone.fa-pills::after { + content: "\f484\f484"; } + +.fad.fa-face-grin-wide::after, .fa-duotone.fa-face-grin-wide::after { + content: "\f581\f581"; } + +.fad.fa-grin-alt::after, .fa-duotone.fa-grin-alt::after { + content: "\f581\f581"; } + +.fad.fa-tooth::after, .fa-duotone.fa-tooth::after { + content: "\f5c9\f5c9"; } + +.fad.fa-basketball-hoop::after, .fa-duotone.fa-basketball-hoop::after { + content: "\f435\f435"; } + +.fad.fa-objects-align-bottom::after, .fa-duotone.fa-objects-align-bottom::after { + content: "\e3bb\e3bb"; } + +.fad.fa-v::after, .fa-duotone.fa-v::after { + content: "\56\56"; } + +.fad.fa-sparkles::after, .fa-duotone.fa-sparkles::after { + content: "\f890\f890"; } + +.fad.fa-squid::after, .fa-duotone.fa-squid::after { + content: "\e450\e450"; } + +.fad.fa-leafy-green::after, .fa-duotone.fa-leafy-green::after { + content: "\e41d\e41d"; } + +.fad.fa-circle-arrow-up-right::after, .fa-duotone.fa-circle-arrow-up-right::after { + content: "\e0fc\e0fc"; } + +.fad.fa-calendars::after, .fa-duotone.fa-calendars::after { + content: "\e0d7\e0d7"; } + +.fad.fa-bangladeshi-taka-sign::after, .fa-duotone.fa-bangladeshi-taka-sign::after { + content: "\e2e6\e2e6"; } + +.fad.fa-bicycle::after, .fa-duotone.fa-bicycle::after { + content: "\f206\f206"; } + +.fad.fa-hammer-war::after, .fa-duotone.fa-hammer-war::after { + content: "\f6e4\f6e4"; } + +.fad.fa-circle-d::after, .fa-duotone.fa-circle-d::after { + content: "\e104\e104"; } + +.fad.fa-spider-black-widow::after, .fa-duotone.fa-spider-black-widow::after { + content: "\f718\f718"; } + +.fad.fa-staff-snake::after, .fa-duotone.fa-staff-snake::after { + content: "\e579\e579"; } + +.fad.fa-rod-asclepius::after, .fa-duotone.fa-rod-asclepius::after { + content: "\e579\e579"; } + +.fad.fa-rod-snake::after, .fa-duotone.fa-rod-snake::after { + content: "\e579\e579"; } + +.fad.fa-staff-aesculapius::after, .fa-duotone.fa-staff-aesculapius::after { + content: "\e579\e579"; } + +.fad.fa-pear::after, .fa-duotone.fa-pear::after { + content: "\e20c\e20c"; } + +.fad.fa-head-side-cough-slash::after, .fa-duotone.fa-head-side-cough-slash::after { + content: "\e062\e062"; } + +.fad.fa-triangle::after, .fa-duotone.fa-triangle::after { + content: "\f2ec\f2ec"; } + +.fad.fa-apartment::after, .fa-duotone.fa-apartment::after { + content: "\e468\e468"; } + +.fad.fa-truck-medical::after, .fa-duotone.fa-truck-medical::after { + content: "\f0f9\f0f9"; } + +.fad.fa-ambulance::after, .fa-duotone.fa-ambulance::after { + content: "\f0f9\f0f9"; } + +.fad.fa-pepper::after, .fa-duotone.fa-pepper::after { + content: "\e432\e432"; } + +.fad.fa-piano::after, .fa-duotone.fa-piano::after { + content: "\f8d4\f8d4"; } + +.fad.fa-gun-squirt::after, .fa-duotone.fa-gun-squirt::after { + content: "\e19d\e19d"; } + +.fad.fa-wheat-awn-circle-exclamation::after, .fa-duotone.fa-wheat-awn-circle-exclamation::after { + content: "\e598\e598"; } + +.fad.fa-snowman::after, .fa-duotone.fa-snowman::after { + content: "\f7d0\f7d0"; } + +.fad.fa-user-alien::after, .fa-duotone.fa-user-alien::after { + content: "\e04a\e04a"; } + +.fad.fa-shield-check::after, .fa-duotone.fa-shield-check::after { + content: "\f2f7\f2f7"; } + +.fad.fa-mortar-pestle::after, .fa-duotone.fa-mortar-pestle::after { + content: "\f5a7\f5a7"; } + +.fad.fa-road-barrier::after, .fa-duotone.fa-road-barrier::after { + content: "\e562\e562"; } + +.fad.fa-chart-candlestick::after, .fa-duotone.fa-chart-candlestick::after { + content: "\e0e2\e0e2"; } + +.fad.fa-briefcase-blank::after, .fa-duotone.fa-briefcase-blank::after { + content: "\e0c8\e0c8"; } + +.fad.fa-school::after, .fa-duotone.fa-school::after { + content: "\f549\f549"; } + +.fad.fa-igloo::after, .fa-duotone.fa-igloo::after { + content: "\f7ae\f7ae"; } + +.fad.fa-bracket-round::after, .fa-duotone.fa-bracket-round::after { + content: "\28\28"; } + +.fad.fa-parenthesis::after, .fa-duotone.fa-parenthesis::after { + content: "\28\28"; } + +.fad.fa-joint::after, .fa-duotone.fa-joint::after { + content: "\f595\f595"; } + +.fad.fa-horse-saddle::after, .fa-duotone.fa-horse-saddle::after { + content: "\f8c3\f8c3"; } + +.fad.fa-mug-marshmallows::after, .fa-duotone.fa-mug-marshmallows::after { + content: "\f7b7\f7b7"; } + +.fad.fa-filters::after, .fa-duotone.fa-filters::after { + content: "\e17e\e17e"; } + +.fad.fa-bell-on::after, .fa-duotone.fa-bell-on::after { + content: "\f8fa\f8fa"; } + +.fad.fa-angle-right::after, .fa-duotone.fa-angle-right::after { + content: "\f105\f105"; } + +.fad.fa-dial-med::after, .fa-duotone.fa-dial-med::after { + content: "\e15f\e15f"; } + +.fad.fa-horse::after, .fa-duotone.fa-horse::after { + content: "\f6f0\f6f0"; } + +.fad.fa-q::after, .fa-duotone.fa-q::after { + content: "\51\51"; } + +.fad.fa-monitor-waveform::after, .fa-duotone.fa-monitor-waveform::after { + content: "\f611\f611"; } + +.fad.fa-monitor-heart-rate::after, .fa-duotone.fa-monitor-heart-rate::after { + content: "\f611\f611"; } + +.fad.fa-link-simple::after, .fa-duotone.fa-link-simple::after { + content: "\e1cd\e1cd"; } + +.fad.fa-whistle::after, .fa-duotone.fa-whistle::after { + content: "\f460\f460"; } + +.fad.fa-g::after, .fa-duotone.fa-g::after { + content: "\47\47"; } + +.fad.fa-wine-glass-crack::after, .fa-duotone.fa-wine-glass-crack::after { + content: "\f4bb\f4bb"; } + +.fad.fa-fragile::after, .fa-duotone.fa-fragile::after { + content: "\f4bb\f4bb"; } + +.fad.fa-slot-machine::after, .fa-duotone.fa-slot-machine::after { + content: "\e3ce\e3ce"; } + +.fad.fa-notes-medical::after, .fa-duotone.fa-notes-medical::after { + content: "\f481\f481"; } + +.fad.fa-car-wash::after, .fa-duotone.fa-car-wash::after { + content: "\f5e6\f5e6"; } + +.fad.fa-escalator::after, .fa-duotone.fa-escalator::after { + content: "\e171\e171"; } + +.fad.fa-comment-image::after, .fa-duotone.fa-comment-image::after { + content: "\e148\e148"; } + +.fad.fa-temperature-half::after, .fa-duotone.fa-temperature-half::after { + content: "\f2c9\f2c9"; } + +.fad.fa-temperature-2::after, .fa-duotone.fa-temperature-2::after { + content: "\f2c9\f2c9"; } + +.fad.fa-thermometer-2::after, .fa-duotone.fa-thermometer-2::after { + content: "\f2c9\f2c9"; } + +.fad.fa-thermometer-half::after, .fa-duotone.fa-thermometer-half::after { + content: "\f2c9\f2c9"; } + +.fad.fa-dong-sign::after, .fa-duotone.fa-dong-sign::after { + content: "\e169\e169"; } + +.fad.fa-donut::after, .fa-duotone.fa-donut::after { + content: "\e406\e406"; } + +.fad.fa-doughnut::after, .fa-duotone.fa-doughnut::after { + content: "\e406\e406"; } + +.fad.fa-capsules::after, .fa-duotone.fa-capsules::after { + content: "\f46b\f46b"; } + +.fad.fa-poo-storm::after, .fa-duotone.fa-poo-storm::after { + content: "\f75a\f75a"; } + +.fad.fa-poo-bolt::after, .fa-duotone.fa-poo-bolt::after { + content: "\f75a\f75a"; } + +.fad.fa-tally-1::after, .fa-duotone.fa-tally-1::after { + content: "\e294\e294"; } + +.fad.fa-face-frown-open::after, .fa-duotone.fa-face-frown-open::after { + content: "\f57a\f57a"; } + +.fad.fa-frown-open::after, .fa-duotone.fa-frown-open::after { + content: "\f57a\f57a"; } + +.fad.fa-square-dashed::after, .fa-duotone.fa-square-dashed::after { + content: "\e269\e269"; } + +.fad.fa-square-j::after, .fa-duotone.fa-square-j::after { + content: "\e273\e273"; } + +.fad.fa-hand-point-up::after, .fa-duotone.fa-hand-point-up::after { + content: "\f0a6\f0a6"; } + +.fad.fa-money-bill::after, .fa-duotone.fa-money-bill::after { + content: "\f0d6\f0d6"; } + +.fad.fa-arrow-up-big-small::after, .fa-duotone.fa-arrow-up-big-small::after { + content: "\f88e\f88e"; } + +.fad.fa-sort-size-up::after, .fa-duotone.fa-sort-size-up::after { + content: "\f88e\f88e"; } + +.fad.fa-barcode-read::after, .fa-duotone.fa-barcode-read::after { + content: "\f464\f464"; } + +.fad.fa-baguette::after, .fa-duotone.fa-baguette::after { + content: "\e3d8\e3d8"; } + +.fad.fa-bowl-soft-serve::after, .fa-duotone.fa-bowl-soft-serve::after { + content: "\e46b\e46b"; } + +.fad.fa-face-holding-back-tears::after, .fa-duotone.fa-face-holding-back-tears::after { + content: "\e482\e482"; } + +.fad.fa-square-up::after, .fa-duotone.fa-square-up::after { + content: "\f353\f353"; } + +.fad.fa-arrow-alt-square-up::after, .fa-duotone.fa-arrow-alt-square-up::after { + content: "\f353\f353"; } + +.fad.fa-train-subway-tunnel::after, .fa-duotone.fa-train-subway-tunnel::after { + content: "\e2a3\e2a3"; } + +.fad.fa-subway-tunnel::after, .fa-duotone.fa-subway-tunnel::after { + content: "\e2a3\e2a3"; } + +.fad.fa-square-exclamation::after, .fa-duotone.fa-square-exclamation::after { + content: "\f321\f321"; } + +.fad.fa-exclamation-square::after, .fa-duotone.fa-exclamation-square::after { + content: "\f321\f321"; } + +.fad.fa-semicolon::after, .fa-duotone.fa-semicolon::after { + content: "\3b\3b"; } + +.fad.fa-bookmark::after, .fa-duotone.fa-bookmark::after { + content: "\f02e\f02e"; } + +.fad.fa-fan-table::after, .fa-duotone.fa-fan-table::after { + content: "\e004\e004"; } + +.fad.fa-align-justify::after, .fa-duotone.fa-align-justify::after { + content: "\f039\f039"; } + +.fad.fa-battery-low::after, .fa-duotone.fa-battery-low::after { + content: "\e0b1\e0b1"; } + +.fad.fa-battery-1::after, .fa-duotone.fa-battery-1::after { + content: "\e0b1\e0b1"; } + +.fad.fa-credit-card-front::after, .fa-duotone.fa-credit-card-front::after { + content: "\f38a\f38a"; } + +.fad.fa-brain-arrow-curved-right::after, .fa-duotone.fa-brain-arrow-curved-right::after { + content: "\f677\f677"; } + +.fad.fa-mind-share::after, .fa-duotone.fa-mind-share::after { + content: "\f677\f677"; } + +.fad.fa-umbrella-beach::after, .fa-duotone.fa-umbrella-beach::after { + content: "\f5ca\f5ca"; } + +.fad.fa-helmet-un::after, .fa-duotone.fa-helmet-un::after { + content: "\e503\e503"; } + +.fad.fa-location-smile::after, .fa-duotone.fa-location-smile::after { + content: "\f60d\f60d"; } + +.fad.fa-map-marker-smile::after, .fa-duotone.fa-map-marker-smile::after { + content: "\f60d\f60d"; } + +.fad.fa-arrow-left-to-line::after, .fa-duotone.fa-arrow-left-to-line::after { + content: "\f33e\f33e"; } + +.fad.fa-arrow-to-left::after, .fa-duotone.fa-arrow-to-left::after { + content: "\f33e\f33e"; } + +.fad.fa-bullseye::after, .fa-duotone.fa-bullseye::after { + content: "\f140\f140"; } + +.fad.fa-sushi::after, .fa-duotone.fa-sushi::after { + content: "\e48a\e48a"; } + +.fad.fa-nigiri::after, .fa-duotone.fa-nigiri::after { + content: "\e48a\e48a"; } + +.fad.fa-message-captions::after, .fa-duotone.fa-message-captions::after { + content: "\e1de\e1de"; } + +.fad.fa-comment-alt-captions::after, .fa-duotone.fa-comment-alt-captions::after { + content: "\e1de\e1de"; } + +.fad.fa-trash-list::after, .fa-duotone.fa-trash-list::after { + content: "\e2b1\e2b1"; } + +.fad.fa-bacon::after, .fa-duotone.fa-bacon::after { + content: "\f7e5\f7e5"; } + +.fad.fa-option::after, .fa-duotone.fa-option::after { + content: "\e318\e318"; } + +.fad.fa-raccoon::after, .fa-duotone.fa-raccoon::after { + content: "\e613\e613"; } + +.fad.fa-hand-point-down::after, .fa-duotone.fa-hand-point-down::after { + content: "\f0a7\f0a7"; } + +.fad.fa-arrow-up-from-bracket::after, .fa-duotone.fa-arrow-up-from-bracket::after { + content: "\e09a\e09a"; } + +.fad.fa-head-side-gear::after, .fa-duotone.fa-head-side-gear::after { + content: "\e611\e611"; } + +.fad.fa-trash-plus::after, .fa-duotone.fa-trash-plus::after { + content: "\e2b2\e2b2"; } + +.fad.fa-objects-align-top::after, .fa-duotone.fa-objects-align-top::after { + content: "\e3c0\e3c0"; } + +.fad.fa-folder::after, .fa-duotone.fa-folder::after { + content: "\f07b\f07b"; } + +.fad.fa-folder-blank::after, .fa-duotone.fa-folder-blank::after { + content: "\f07b\f07b"; } + +.fad.fa-face-anxious-sweat::after, .fa-duotone.fa-face-anxious-sweat::after { + content: "\e36a\e36a"; } + +.fad.fa-credit-card-blank::after, .fa-duotone.fa-credit-card-blank::after { + content: "\f389\f389"; } + +.fad.fa-file-waveform::after, .fa-duotone.fa-file-waveform::after { + content: "\f478\f478"; } + +.fad.fa-file-medical-alt::after, .fa-duotone.fa-file-medical-alt::after { + content: "\f478\f478"; } + +.fad.fa-microchip-ai::after, .fa-duotone.fa-microchip-ai::after { + content: "\e1ec\e1ec"; } + +.fad.fa-mug::after, .fa-duotone.fa-mug::after { + content: "\f874\f874"; } + +.fad.fa-plane-up-slash::after, .fa-duotone.fa-plane-up-slash::after { + content: "\e22e\e22e"; } + +.fad.fa-radiation::after, .fa-duotone.fa-radiation::after { + content: "\f7b9\f7b9"; } + +.fad.fa-pen-circle::after, .fa-duotone.fa-pen-circle::after { + content: "\e20e\e20e"; } + +.fad.fa-bag-seedling::after, .fa-duotone.fa-bag-seedling::after { + content: "\e5f2\e5f2"; } + +.fad.fa-chart-simple::after, .fa-duotone.fa-chart-simple::after { + content: "\e473\e473"; } + +.fad.fa-crutches::after, .fa-duotone.fa-crutches::after { + content: "\f7f8\f7f8"; } + +.fad.fa-circle-parking::after, .fa-duotone.fa-circle-parking::after { + content: "\f615\f615"; } + +.fad.fa-parking-circle::after, .fa-duotone.fa-parking-circle::after { + content: "\f615\f615"; } + +.fad.fa-mars-stroke::after, .fa-duotone.fa-mars-stroke::after { + content: "\f229\f229"; } + +.fad.fa-leaf-oak::after, .fa-duotone.fa-leaf-oak::after { + content: "\f6f7\f6f7"; } + +.fad.fa-square-bolt::after, .fa-duotone.fa-square-bolt::after { + content: "\e265\e265"; } + +.fad.fa-vial::after, .fa-duotone.fa-vial::after { + content: "\f492\f492"; } + +.fad.fa-gauge::after, .fa-duotone.fa-gauge::after { + content: "\f624\f624"; } + +.fad.fa-dashboard::after, .fa-duotone.fa-dashboard::after { + content: "\f624\f624"; } + +.fad.fa-gauge-med::after, .fa-duotone.fa-gauge-med::after { + content: "\f624\f624"; } + +.fad.fa-tachometer-alt-average::after, .fa-duotone.fa-tachometer-alt-average::after { + content: "\f624\f624"; } + +.fad.fa-wand-magic-sparkles::after, .fa-duotone.fa-wand-magic-sparkles::after { + content: "\e2ca\e2ca"; } + +.fad.fa-magic-wand-sparkles::after, .fa-duotone.fa-magic-wand-sparkles::after { + content: "\e2ca\e2ca"; } + +.fad.fa-lambda::after, .fa-duotone.fa-lambda::after { + content: "\f66e\f66e"; } + +.fad.fa-e::after, .fa-duotone.fa-e::after { + content: "\45\45"; } + +.fad.fa-pizza::after, .fa-duotone.fa-pizza::after { + content: "\f817\f817"; } + +.fad.fa-bowl-chopsticks-noodles::after, .fa-duotone.fa-bowl-chopsticks-noodles::after { + content: "\e2ea\e2ea"; } + +.fad.fa-h3::after, .fa-duotone.fa-h3::after { + content: "\f315\f315"; } + +.fad.fa-pen-clip::after, .fa-duotone.fa-pen-clip::after { + content: "\f305\f305"; } + +.fad.fa-pen-alt::after, .fa-duotone.fa-pen-alt::after { + content: "\f305\f305"; } + +.fad.fa-bridge-circle-exclamation::after, .fa-duotone.fa-bridge-circle-exclamation::after { + content: "\e4ca\e4ca"; } + +.fad.fa-badge-percent::after, .fa-duotone.fa-badge-percent::after { + content: "\f646\f646"; } + +.fad.fa-user::after, .fa-duotone.fa-user::after { + content: "\f007\f007"; } + +.fad.fa-sensor::after, .fa-duotone.fa-sensor::after { + content: "\e028\e028"; } + +.fad.fa-comma::after, .fa-duotone.fa-comma::after { + content: "\2c\2c"; } + +.fad.fa-school-circle-check::after, .fa-duotone.fa-school-circle-check::after { + content: "\e56b\e56b"; } + +.fad.fa-toilet-paper-under::after, .fa-duotone.fa-toilet-paper-under::after { + content: "\e2a0\e2a0"; } + +.fad.fa-toilet-paper-reverse::after, .fa-duotone.fa-toilet-paper-reverse::after { + content: "\e2a0\e2a0"; } + +.fad.fa-light-emergency::after, .fa-duotone.fa-light-emergency::after { + content: "\e41f\e41f"; } + +.fad.fa-arrow-down-to-arc::after, .fa-duotone.fa-arrow-down-to-arc::after { + content: "\e4ae\e4ae"; } + +.fad.fa-dumpster::after, .fa-duotone.fa-dumpster::after { + content: "\f793\f793"; } + +.fad.fa-van-shuttle::after, .fa-duotone.fa-van-shuttle::after { + content: "\f5b6\f5b6"; } + +.fad.fa-shuttle-van::after, .fa-duotone.fa-shuttle-van::after { + content: "\f5b6\f5b6"; } + +.fad.fa-building-user::after, .fa-duotone.fa-building-user::after { + content: "\e4da\e4da"; } + +.fad.fa-light-switch::after, .fa-duotone.fa-light-switch::after { + content: "\e017\e017"; } + +.fad.fa-square-caret-left::after, .fa-duotone.fa-square-caret-left::after { + content: "\f191\f191"; } + +.fad.fa-caret-square-left::after, .fa-duotone.fa-caret-square-left::after { + content: "\f191\f191"; } + +.fad.fa-highlighter::after, .fa-duotone.fa-highlighter::after { + content: "\f591\f591"; } + +.fad.fa-wave-pulse::after, .fa-duotone.fa-wave-pulse::after { + content: "\f5f8\f5f8"; } + +.fad.fa-heart-rate::after, .fa-duotone.fa-heart-rate::after { + content: "\f5f8\f5f8"; } + +.fad.fa-key::after, .fa-duotone.fa-key::after { + content: "\f084\f084"; } + +.fad.fa-hat-santa::after, .fa-duotone.fa-hat-santa::after { + content: "\f7a7\f7a7"; } + +.fad.fa-tamale::after, .fa-duotone.fa-tamale::after { + content: "\e451\e451"; } + +.fad.fa-box-check::after, .fa-duotone.fa-box-check::after { + content: "\f467\f467"; } + +.fad.fa-bullhorn::after, .fa-duotone.fa-bullhorn::after { + content: "\f0a1\f0a1"; } + +.fad.fa-steak::after, .fa-duotone.fa-steak::after { + content: "\f824\f824"; } + +.fad.fa-location-crosshairs-slash::after, .fa-duotone.fa-location-crosshairs-slash::after { + content: "\f603\f603"; } + +.fad.fa-location-slash::after, .fa-duotone.fa-location-slash::after { + content: "\f603\f603"; } + +.fad.fa-person-dolly::after, .fa-duotone.fa-person-dolly::after { + content: "\f4d0\f4d0"; } + +.fad.fa-globe::after, .fa-duotone.fa-globe::after { + content: "\f0ac\f0ac"; } + +.fad.fa-synagogue::after, .fa-duotone.fa-synagogue::after { + content: "\f69b\f69b"; } + +.fad.fa-file-chart-column::after, .fa-duotone.fa-file-chart-column::after { + content: "\f659\f659"; } + +.fad.fa-file-chart-line::after, .fa-duotone.fa-file-chart-line::after { + content: "\f659\f659"; } + +.fad.fa-person-half-dress::after, .fa-duotone.fa-person-half-dress::after { + content: "\e548\e548"; } + +.fad.fa-folder-image::after, .fa-duotone.fa-folder-image::after { + content: "\e18a\e18a"; } + +.fad.fa-calendar-pen::after, .fa-duotone.fa-calendar-pen::after { + content: "\f333\f333"; } + +.fad.fa-calendar-edit::after, .fa-duotone.fa-calendar-edit::after { + content: "\f333\f333"; } + +.fad.fa-road-bridge::after, .fa-duotone.fa-road-bridge::after { + content: "\e563\e563"; } + +.fad.fa-face-smile-tear::after, .fa-duotone.fa-face-smile-tear::after { + content: "\e393\e393"; } + +.fad.fa-message-plus::after, .fa-duotone.fa-message-plus::after { + content: "\f4a8\f4a8"; } + +.fad.fa-comment-alt-plus::after, .fa-duotone.fa-comment-alt-plus::after { + content: "\f4a8\f4a8"; } + +.fad.fa-location-arrow::after, .fa-duotone.fa-location-arrow::after { + content: "\f124\f124"; } + +.fad.fa-c::after, .fa-duotone.fa-c::after { + content: "\43\43"; } + +.fad.fa-tablet-button::after, .fa-duotone.fa-tablet-button::after { + content: "\f10a\f10a"; } + +.fad.fa-person-dress-fairy::after, .fa-duotone.fa-person-dress-fairy::after { + content: "\e607\e607"; } + +.fad.fa-rectangle-history-circle-user::after, .fa-duotone.fa-rectangle-history-circle-user::after { + content: "\e4a4\e4a4"; } + +.fad.fa-building-lock::after, .fa-duotone.fa-building-lock::after { + content: "\e4d6\e4d6"; } + +.fad.fa-chart-line-up::after, .fa-duotone.fa-chart-line-up::after { + content: "\e0e5\e0e5"; } + +.fad.fa-mailbox::after, .fa-duotone.fa-mailbox::after { + content: "\f813\f813"; } + +.fad.fa-truck-bolt::after, .fa-duotone.fa-truck-bolt::after { + content: "\e3d0\e3d0"; } + +.fad.fa-pizza-slice::after, .fa-duotone.fa-pizza-slice::after { + content: "\f818\f818"; } + +.fad.fa-money-bill-wave::after, .fa-duotone.fa-money-bill-wave::after { + content: "\f53a\f53a"; } + +.fad.fa-chart-area::after, .fa-duotone.fa-chart-area::after { + content: "\f1fe\f1fe"; } + +.fad.fa-area-chart::after, .fa-duotone.fa-area-chart::after { + content: "\f1fe\f1fe"; } + +.fad.fa-house-flag::after, .fa-duotone.fa-house-flag::after { + content: "\e50d\e50d"; } + +.fad.fa-circle-three-quarters-stroke::after, .fa-duotone.fa-circle-three-quarters-stroke::after { + content: "\e5d4\e5d4"; } + +.fad.fa-person-circle-minus::after, .fa-duotone.fa-person-circle-minus::after { + content: "\e540\e540"; } + +.fad.fa-scalpel::after, .fa-duotone.fa-scalpel::after { + content: "\f61d\f61d"; } + +.fad.fa-ban::after, .fa-duotone.fa-ban::after { + content: "\f05e\f05e"; } + +.fad.fa-cancel::after, .fa-duotone.fa-cancel::after { + content: "\f05e\f05e"; } + +.fad.fa-bell-exclamation::after, .fa-duotone.fa-bell-exclamation::after { + content: "\f848\f848"; } + +.fad.fa-circle-bookmark::after, .fa-duotone.fa-circle-bookmark::after { + content: "\e100\e100"; } + +.fad.fa-bookmark-circle::after, .fa-duotone.fa-bookmark-circle::after { + content: "\e100\e100"; } + +.fad.fa-egg-fried::after, .fa-duotone.fa-egg-fried::after { + content: "\f7fc\f7fc"; } + +.fad.fa-face-weary::after, .fa-duotone.fa-face-weary::after { + content: "\e3a1\e3a1"; } + +.fad.fa-uniform-martial-arts::after, .fa-duotone.fa-uniform-martial-arts::after { + content: "\e3d1\e3d1"; } + +.fad.fa-camera-rotate::after, .fa-duotone.fa-camera-rotate::after { + content: "\e0d8\e0d8"; } + +.fad.fa-sun-dust::after, .fa-duotone.fa-sun-dust::after { + content: "\f764\f764"; } + +.fad.fa-comment-text::after, .fa-duotone.fa-comment-text::after { + content: "\e14d\e14d"; } + +.fad.fa-spray-can-sparkles::after, .fa-duotone.fa-spray-can-sparkles::after { + content: "\f5d0\f5d0"; } + +.fad.fa-air-freshener::after, .fa-duotone.fa-air-freshener::after { + content: "\f5d0\f5d0"; } + +.fad.fa-signal-bars::after, .fa-duotone.fa-signal-bars::after { + content: "\f690\f690"; } + +.fad.fa-signal-alt::after, .fa-duotone.fa-signal-alt::after { + content: "\f690\f690"; } + +.fad.fa-signal-alt-4::after, .fa-duotone.fa-signal-alt-4::after { + content: "\f690\f690"; } + +.fad.fa-signal-bars-strong::after, .fa-duotone.fa-signal-bars-strong::after { + content: "\f690\f690"; } + +.fad.fa-diamond-exclamation::after, .fa-duotone.fa-diamond-exclamation::after { + content: "\e405\e405"; } + +.fad.fa-star::after, .fa-duotone.fa-star::after { + content: "\f005\f005"; } + +.fad.fa-dial-min::after, .fa-duotone.fa-dial-min::after { + content: "\e161\e161"; } + +.fad.fa-repeat::after, .fa-duotone.fa-repeat::after { + content: "\f363\f363"; } + +.fad.fa-cross::after, .fa-duotone.fa-cross::after { + content: "\f654\f654"; } + +.fad.fa-page-caret-down::after, .fa-duotone.fa-page-caret-down::after { + content: "\e429\e429"; } + +.fad.fa-file-caret-down::after, .fa-duotone.fa-file-caret-down::after { + content: "\e429\e429"; } + +.fad.fa-box::after, .fa-duotone.fa-box::after { + content: "\f466\f466"; } + +.fad.fa-venus-mars::after, .fa-duotone.fa-venus-mars::after { + content: "\f228\f228"; } + +.fad.fa-clock-seven-thirty::after, .fa-duotone.fa-clock-seven-thirty::after { + content: "\e351\e351"; } + +.fad.fa-arrow-pointer::after, .fa-duotone.fa-arrow-pointer::after { + content: "\f245\f245"; } + +.fad.fa-mouse-pointer::after, .fa-duotone.fa-mouse-pointer::after { + content: "\f245\f245"; } + +.fad.fa-clock-four-thirty::after, .fa-duotone.fa-clock-four-thirty::after { + content: "\e34b\e34b"; } + +.fad.fa-signal-bars-good::after, .fa-duotone.fa-signal-bars-good::after { + content: "\f693\f693"; } + +.fad.fa-signal-alt-3::after, .fa-duotone.fa-signal-alt-3::after { + content: "\f693\f693"; } + +.fad.fa-cactus::after, .fa-duotone.fa-cactus::after { + content: "\f8a7\f8a7"; } + +.fad.fa-lightbulb-gear::after, .fa-duotone.fa-lightbulb-gear::after { + content: "\e5fd\e5fd"; } + +.fad.fa-maximize::after, .fa-duotone.fa-maximize::after { + content: "\f31e\f31e"; } + +.fad.fa-expand-arrows-alt::after, .fa-duotone.fa-expand-arrows-alt::after { + content: "\f31e\f31e"; } + +.fad.fa-charging-station::after, .fa-duotone.fa-charging-station::after { + content: "\f5e7\f5e7"; } + +.fad.fa-shapes::after, .fa-duotone.fa-shapes::after { + content: "\f61f\f61f"; } + +.fad.fa-triangle-circle-square::after, .fa-duotone.fa-triangle-circle-square::after { + content: "\f61f\f61f"; } + +.fad.fa-plane-tail::after, .fa-duotone.fa-plane-tail::after { + content: "\e22c\e22c"; } + +.fad.fa-gauge-simple-max::after, .fa-duotone.fa-gauge-simple-max::after { + content: "\f62b\f62b"; } + +.fad.fa-tachometer-fastest::after, .fa-duotone.fa-tachometer-fastest::after { + content: "\f62b\f62b"; } + +.fad.fa-circle-u::after, .fa-duotone.fa-circle-u::after { + content: "\e127\e127"; } + +.fad.fa-shield-slash::after, .fa-duotone.fa-shield-slash::after { + content: "\e24b\e24b"; } + +.fad.fa-square-phone-hangup::after, .fa-duotone.fa-square-phone-hangup::after { + content: "\e27a\e27a"; } + +.fad.fa-phone-square-down::after, .fa-duotone.fa-phone-square-down::after { + content: "\e27a\e27a"; } + +.fad.fa-arrow-up-left::after, .fa-duotone.fa-arrow-up-left::after { + content: "\e09d\e09d"; } + +.fad.fa-transporter-1::after, .fa-duotone.fa-transporter-1::after { + content: "\e043\e043"; } + +.fad.fa-peanuts::after, .fa-duotone.fa-peanuts::after { + content: "\e431\e431"; } + +.fad.fa-shuffle::after, .fa-duotone.fa-shuffle::after { + content: "\f074\f074"; } + +.fad.fa-random::after, .fa-duotone.fa-random::after { + content: "\f074\f074"; } + +.fad.fa-person-running::after, .fa-duotone.fa-person-running::after { + content: "\f70c\f70c"; } + +.fad.fa-running::after, .fa-duotone.fa-running::after { + content: "\f70c\f70c"; } + +.fad.fa-mobile-retro::after, .fa-duotone.fa-mobile-retro::after { + content: "\e527\e527"; } + +.fad.fa-grip-lines-vertical::after, .fa-duotone.fa-grip-lines-vertical::after { + content: "\f7a5\f7a5"; } + +.fad.fa-bin-bottles-recycle::after, .fa-duotone.fa-bin-bottles-recycle::after { + content: "\e5f6\e5f6"; } + +.fad.fa-arrow-up-from-square::after, .fa-duotone.fa-arrow-up-from-square::after { + content: "\e09c\e09c"; } + +.fad.fa-file-dashed-line::after, .fa-duotone.fa-file-dashed-line::after { + content: "\f877\f877"; } + +.fad.fa-page-break::after, .fa-duotone.fa-page-break::after { + content: "\f877\f877"; } + +.fad.fa-bracket-curly-right::after, .fa-duotone.fa-bracket-curly-right::after { + content: "\7d\7d"; } + +.fad.fa-spider::after, .fa-duotone.fa-spider::after { + content: "\f717\f717"; } + +.fad.fa-clock-three::after, .fa-duotone.fa-clock-three::after { + content: "\e356\e356"; } + +.fad.fa-hands-bound::after, .fa-duotone.fa-hands-bound::after { + content: "\e4f9\e4f9"; } + +.fad.fa-scalpel-line-dashed::after, .fa-duotone.fa-scalpel-line-dashed::after { + content: "\f61e\f61e"; } + +.fad.fa-scalpel-path::after, .fa-duotone.fa-scalpel-path::after { + content: "\f61e\f61e"; } + +.fad.fa-file-invoice-dollar::after, .fa-duotone.fa-file-invoice-dollar::after { + content: "\f571\f571"; } + +.fad.fa-pipe-smoking::after, .fa-duotone.fa-pipe-smoking::after { + content: "\e3c4\e3c4"; } + +.fad.fa-face-astonished::after, .fa-duotone.fa-face-astonished::after { + content: "\e36b\e36b"; } + +.fad.fa-window::after, .fa-duotone.fa-window::after { + content: "\f40e\f40e"; } + +.fad.fa-plane-circle-exclamation::after, .fa-duotone.fa-plane-circle-exclamation::after { + content: "\e556\e556"; } + +.fad.fa-ear::after, .fa-duotone.fa-ear::after { + content: "\f5f0\f5f0"; } + +.fad.fa-file-lock::after, .fa-duotone.fa-file-lock::after { + content: "\e3a6\e3a6"; } + +.fad.fa-diagram-venn::after, .fa-duotone.fa-diagram-venn::after { + content: "\e15a\e15a"; } + +.fad.fa-x-ray::after, .fa-duotone.fa-x-ray::after { + content: "\f497\f497"; } + +.fad.fa-goal-net::after, .fa-duotone.fa-goal-net::after { + content: "\e3ab\e3ab"; } + +.fad.fa-coffin-cross::after, .fa-duotone.fa-coffin-cross::after { + content: "\e051\e051"; } + +.fad.fa-spell-check::after, .fa-duotone.fa-spell-check::after { + content: "\f891\f891"; } + +.fad.fa-location-xmark::after, .fa-duotone.fa-location-xmark::after { + content: "\f60e\f60e"; } + +.fad.fa-map-marker-times::after, .fa-duotone.fa-map-marker-times::after { + content: "\f60e\f60e"; } + +.fad.fa-map-marker-xmark::after, .fa-duotone.fa-map-marker-xmark::after { + content: "\f60e\f60e"; } + +.fad.fa-circle-quarter-stroke::after, .fa-duotone.fa-circle-quarter-stroke::after { + content: "\e5d3\e5d3"; } + +.fad.fa-lasso::after, .fa-duotone.fa-lasso::after { + content: "\f8c8\f8c8"; } + +.fad.fa-slash::after, .fa-duotone.fa-slash::after { + content: "\f715\f715"; } + +.fad.fa-person-to-portal::after, .fa-duotone.fa-person-to-portal::after { + content: "\e022\e022"; } + +.fad.fa-portal-enter::after, .fa-duotone.fa-portal-enter::after { + content: "\e022\e022"; } + +.fad.fa-calendar-star::after, .fa-duotone.fa-calendar-star::after { + content: "\f736\f736"; } + +.fad.fa-computer-mouse::after, .fa-duotone.fa-computer-mouse::after { + content: "\f8cc\f8cc"; } + +.fad.fa-mouse::after, .fa-duotone.fa-mouse::after { + content: "\f8cc\f8cc"; } + +.fad.fa-arrow-right-to-bracket::after, .fa-duotone.fa-arrow-right-to-bracket::after { + content: "\f090\f090"; } + +.fad.fa-sign-in::after, .fa-duotone.fa-sign-in::after { + content: "\f090\f090"; } + +.fad.fa-pegasus::after, .fa-duotone.fa-pegasus::after { + content: "\f703\f703"; } + +.fad.fa-files-medical::after, .fa-duotone.fa-files-medical::after { + content: "\f7fd\f7fd"; } + +.fad.fa-nfc-lock::after, .fa-duotone.fa-nfc-lock::after { + content: "\e1f8\e1f8"; } + +.fad.fa-person-ski-lift::after, .fa-duotone.fa-person-ski-lift::after { + content: "\f7c8\f7c8"; } + +.fad.fa-ski-lift::after, .fa-duotone.fa-ski-lift::after { + content: "\f7c8\f7c8"; } + +.fad.fa-square-6::after, .fa-duotone.fa-square-6::after { + content: "\e25b\e25b"; } + +.fad.fa-shop-slash::after, .fa-duotone.fa-shop-slash::after { + content: "\e070\e070"; } + +.fad.fa-store-alt-slash::after, .fa-duotone.fa-store-alt-slash::after { + content: "\e070\e070"; } + +.fad.fa-wind-turbine::after, .fa-duotone.fa-wind-turbine::after { + content: "\f89b\f89b"; } + +.fad.fa-sliders-simple::after, .fa-duotone.fa-sliders-simple::after { + content: "\e253\e253"; } + +.fad.fa-grid-round::after, .fa-duotone.fa-grid-round::after { + content: "\e5da\e5da"; } + +.fad.fa-badge-sheriff::after, .fa-duotone.fa-badge-sheriff::after { + content: "\f8a2\f8a2"; } + +.fad.fa-server::after, .fa-duotone.fa-server::after { + content: "\f233\f233"; } + +.fad.fa-virus-covid-slash::after, .fa-duotone.fa-virus-covid-slash::after { + content: "\e4a9\e4a9"; } + +.fad.fa-intersection::after, .fa-duotone.fa-intersection::after { + content: "\f668\f668"; } + +.fad.fa-shop-lock::after, .fa-duotone.fa-shop-lock::after { + content: "\e4a5\e4a5"; } + +.fad.fa-family::after, .fa-duotone.fa-family::after { + content: "\e300\e300"; } + +.fad.fa-hourglass-start::after, .fa-duotone.fa-hourglass-start::after { + content: "\f251\f251"; } + +.fad.fa-hourglass-1::after, .fa-duotone.fa-hourglass-1::after { + content: "\f251\f251"; } + +.fad.fa-user-hair-buns::after, .fa-duotone.fa-user-hair-buns::after { + content: "\e3d3\e3d3"; } + +.fad.fa-blender-phone::after, .fa-duotone.fa-blender-phone::after { + content: "\f6b6\f6b6"; } + +.fad.fa-hourglass-clock::after, .fa-duotone.fa-hourglass-clock::after { + content: "\e41b\e41b"; } + +.fad.fa-person-seat-reclined::after, .fa-duotone.fa-person-seat-reclined::after { + content: "\e21f\e21f"; } + +.fad.fa-paper-plane-top::after, .fa-duotone.fa-paper-plane-top::after { + content: "\e20a\e20a"; } + +.fad.fa-paper-plane-alt::after, .fa-duotone.fa-paper-plane-alt::after { + content: "\e20a\e20a"; } + +.fad.fa-send::after, .fa-duotone.fa-send::after { + content: "\e20a\e20a"; } + +.fad.fa-message-arrow-up::after, .fa-duotone.fa-message-arrow-up::after { + content: "\e1dc\e1dc"; } + +.fad.fa-comment-alt-arrow-up::after, .fa-duotone.fa-comment-alt-arrow-up::after { + content: "\e1dc\e1dc"; } + +.fad.fa-lightbulb-exclamation::after, .fa-duotone.fa-lightbulb-exclamation::after { + content: "\f671\f671"; } + +.fad.fa-layer-minus::after, .fa-duotone.fa-layer-minus::after { + content: "\f5fe\f5fe"; } + +.fad.fa-layer-group-minus::after, .fa-duotone.fa-layer-group-minus::after { + content: "\f5fe\f5fe"; } + +.fad.fa-chart-pie-simple-circle-currency::after, .fa-duotone.fa-chart-pie-simple-circle-currency::after { + content: "\e604\e604"; } + +.fad.fa-circle-e::after, .fa-duotone.fa-circle-e::after { + content: "\e109\e109"; } + +.fad.fa-building-wheat::after, .fa-duotone.fa-building-wheat::after { + content: "\e4db\e4db"; } + +.fad.fa-gauge-max::after, .fa-duotone.fa-gauge-max::after { + content: "\f626\f626"; } + +.fad.fa-tachometer-alt-fastest::after, .fa-duotone.fa-tachometer-alt-fastest::after { + content: "\f626\f626"; } + +.fad.fa-person-breastfeeding::after, .fa-duotone.fa-person-breastfeeding::after { + content: "\e53a\e53a"; } + +.fad.fa-apostrophe::after, .fa-duotone.fa-apostrophe::after { + content: "\27\27"; } + +.fad.fa-fire-hydrant::after, .fa-duotone.fa-fire-hydrant::after { + content: "\e17f\e17f"; } + +.fad.fa-right-to-bracket::after, .fa-duotone.fa-right-to-bracket::after { + content: "\f2f6\f2f6"; } + +.fad.fa-sign-in-alt::after, .fa-duotone.fa-sign-in-alt::after { + content: "\f2f6\f2f6"; } + +.fad.fa-video-plus::after, .fa-duotone.fa-video-plus::after { + content: "\f4e1\f4e1"; } + +.fad.fa-square-right::after, .fa-duotone.fa-square-right::after { + content: "\f352\f352"; } + +.fad.fa-arrow-alt-square-right::after, .fa-duotone.fa-arrow-alt-square-right::after { + content: "\f352\f352"; } + +.fad.fa-comment-smile::after, .fa-duotone.fa-comment-smile::after { + content: "\f4b4\f4b4"; } + +.fad.fa-venus::after, .fa-duotone.fa-venus::after { + content: "\f221\f221"; } + +.fad.fa-passport::after, .fa-duotone.fa-passport::after { + content: "\f5ab\f5ab"; } + +.fad.fa-inbox-in::after, .fa-duotone.fa-inbox-in::after { + content: "\f310\f310"; } + +.fad.fa-inbox-arrow-down::after, .fa-duotone.fa-inbox-arrow-down::after { + content: "\f310\f310"; } + +.fad.fa-heart-pulse::after, .fa-duotone.fa-heart-pulse::after { + content: "\f21e\f21e"; } + +.fad.fa-heartbeat::after, .fa-duotone.fa-heartbeat::after { + content: "\f21e\f21e"; } + +.fad.fa-circle-8::after, .fa-duotone.fa-circle-8::after { + content: "\e0f5\e0f5"; } + +.fad.fa-clouds-moon::after, .fa-duotone.fa-clouds-moon::after { + content: "\f745\f745"; } + +.fad.fa-clock-ten-thirty::after, .fa-duotone.fa-clock-ten-thirty::after { + content: "\e355\e355"; } + +.fad.fa-people-carry-box::after, .fa-duotone.fa-people-carry-box::after { + content: "\f4ce\f4ce"; } + +.fad.fa-people-carry::after, .fa-duotone.fa-people-carry::after { + content: "\f4ce\f4ce"; } + +.fad.fa-folder-user::after, .fa-duotone.fa-folder-user::after { + content: "\e18e\e18e"; } + +.fad.fa-trash-can-xmark::after, .fa-duotone.fa-trash-can-xmark::after { + content: "\e2ae\e2ae"; } + +.fad.fa-temperature-high::after, .fa-duotone.fa-temperature-high::after { + content: "\f769\f769"; } + +.fad.fa-microchip::after, .fa-duotone.fa-microchip::after { + content: "\f2db\f2db"; } + +.fad.fa-left-long-to-line::after, .fa-duotone.fa-left-long-to-line::after { + content: "\e41e\e41e"; } + +.fad.fa-crown::after, .fa-duotone.fa-crown::after { + content: "\f521\f521"; } + +.fad.fa-weight-hanging::after, .fa-duotone.fa-weight-hanging::after { + content: "\f5cd\f5cd"; } + +.fad.fa-xmarks-lines::after, .fa-duotone.fa-xmarks-lines::after { + content: "\e59a\e59a"; } + +.fad.fa-file-prescription::after, .fa-duotone.fa-file-prescription::after { + content: "\f572\f572"; } + +.fad.fa-calendar-range::after, .fa-duotone.fa-calendar-range::after { + content: "\e0d6\e0d6"; } + +.fad.fa-flower-daffodil::after, .fa-duotone.fa-flower-daffodil::after { + content: "\f800\f800"; } + +.fad.fa-hand-back-point-up::after, .fa-duotone.fa-hand-back-point-up::after { + content: "\e1a2\e1a2"; } + +.fad.fa-weight-scale::after, .fa-duotone.fa-weight-scale::after { + content: "\f496\f496"; } + +.fad.fa-weight::after, .fa-duotone.fa-weight::after { + content: "\f496\f496"; } + +.fad.fa-arrow-up-to-arc::after, .fa-duotone.fa-arrow-up-to-arc::after { + content: "\e617\e617"; } + +.fad.fa-star-exclamation::after, .fa-duotone.fa-star-exclamation::after { + content: "\f2f3\f2f3"; } + +.fad.fa-books::after, .fa-duotone.fa-books::after { + content: "\f5db\f5db"; } + +.fad.fa-user-group::after, .fa-duotone.fa-user-group::after { + content: "\f500\f500"; } + +.fad.fa-user-friends::after, .fa-duotone.fa-user-friends::after { + content: "\f500\f500"; } + +.fad.fa-arrow-up-a-z::after, .fa-duotone.fa-arrow-up-a-z::after { + content: "\f15e\f15e"; } + +.fad.fa-sort-alpha-up::after, .fa-duotone.fa-sort-alpha-up::after { + content: "\f15e\f15e"; } + +.fad.fa-layer-plus::after, .fa-duotone.fa-layer-plus::after { + content: "\f5ff\f5ff"; } + +.fad.fa-layer-group-plus::after, .fa-duotone.fa-layer-group-plus::after { + content: "\f5ff\f5ff"; } + +.fad.fa-play-pause::after, .fa-duotone.fa-play-pause::after { + content: "\e22f\e22f"; } + +.fad.fa-block-question::after, .fa-duotone.fa-block-question::after { + content: "\e3dd\e3dd"; } + +.fad.fa-snooze::after, .fa-duotone.fa-snooze::after { + content: "\f880\f880"; } + +.fad.fa-zzz::after, .fa-duotone.fa-zzz::after { + content: "\f880\f880"; } + +.fad.fa-scanner-image::after, .fa-duotone.fa-scanner-image::after { + content: "\f8f3\f8f3"; } + +.fad.fa-tv-retro::after, .fa-duotone.fa-tv-retro::after { + content: "\f401\f401"; } + +.fad.fa-square-t::after, .fa-duotone.fa-square-t::after { + content: "\e280\e280"; } + +.fad.fa-farm::after, .fa-duotone.fa-farm::after { + content: "\f864\f864"; } + +.fad.fa-barn-silo::after, .fa-duotone.fa-barn-silo::after { + content: "\f864\f864"; } + +.fad.fa-chess-knight::after, .fa-duotone.fa-chess-knight::after { + content: "\f441\f441"; } + +.fad.fa-bars-sort::after, .fa-duotone.fa-bars-sort::after { + content: "\e0ae\e0ae"; } + +.fad.fa-pallet-boxes::after, .fa-duotone.fa-pallet-boxes::after { + content: "\f483\f483"; } + +.fad.fa-palette-boxes::after, .fa-duotone.fa-palette-boxes::after { + content: "\f483\f483"; } + +.fad.fa-pallet-alt::after, .fa-duotone.fa-pallet-alt::after { + content: "\f483\f483"; } + +.fad.fa-face-laugh-squint::after, .fa-duotone.fa-face-laugh-squint::after { + content: "\f59b\f59b"; } + +.fad.fa-laugh-squint::after, .fa-duotone.fa-laugh-squint::after { + content: "\f59b\f59b"; } + +.fad.fa-code-simple::after, .fa-duotone.fa-code-simple::after { + content: "\e13d\e13d"; } + +.fad.fa-bolt-slash::after, .fa-duotone.fa-bolt-slash::after { + content: "\e0b8\e0b8"; } + +.fad.fa-panel-fire::after, .fa-duotone.fa-panel-fire::after { + content: "\e42f\e42f"; } + +.fad.fa-binary-circle-check::after, .fa-duotone.fa-binary-circle-check::after { + content: "\e33c\e33c"; } + +.fad.fa-comment-minus::after, .fa-duotone.fa-comment-minus::after { + content: "\f4b1\f4b1"; } + +.fad.fa-burrito::after, .fa-duotone.fa-burrito::after { + content: "\f7ed\f7ed"; } + +.fad.fa-violin::after, .fa-duotone.fa-violin::after { + content: "\f8ed\f8ed"; } + +.fad.fa-objects-column::after, .fa-duotone.fa-objects-column::after { + content: "\e3c1\e3c1"; } + +.fad.fa-square-chevron-down::after, .fa-duotone.fa-square-chevron-down::after { + content: "\f329\f329"; } + +.fad.fa-chevron-square-down::after, .fa-duotone.fa-chevron-square-down::after { + content: "\f329\f329"; } + +.fad.fa-comment-plus::after, .fa-duotone.fa-comment-plus::after { + content: "\f4b2\f4b2"; } + +.fad.fa-triangle-instrument::after, .fa-duotone.fa-triangle-instrument::after { + content: "\f8e2\f8e2"; } + +.fad.fa-triangle-music::after, .fa-duotone.fa-triangle-music::after { + content: "\f8e2\f8e2"; } + +.fad.fa-wheelchair::after, .fa-duotone.fa-wheelchair::after { + content: "\f193\f193"; } + +.fad.fa-user-pilot-tie::after, .fa-duotone.fa-user-pilot-tie::after { + content: "\e2c1\e2c1"; } + +.fad.fa-piano-keyboard::after, .fa-duotone.fa-piano-keyboard::after { + content: "\f8d5\f8d5"; } + +.fad.fa-bed-empty::after, .fa-duotone.fa-bed-empty::after { + content: "\f8f9\f8f9"; } + +.fad.fa-circle-arrow-up::after, .fa-duotone.fa-circle-arrow-up::after { + content: "\f0aa\f0aa"; } + +.fad.fa-arrow-circle-up::after, .fa-duotone.fa-arrow-circle-up::after { + content: "\f0aa\f0aa"; } + +.fad.fa-toggle-on::after, .fa-duotone.fa-toggle-on::after { + content: "\f205\f205"; } + +.fad.fa-rectangle-vertical::after, .fa-duotone.fa-rectangle-vertical::after { + content: "\f2fb\f2fb"; } + +.fad.fa-rectangle-portrait::after, .fa-duotone.fa-rectangle-portrait::after { + content: "\f2fb\f2fb"; } + +.fad.fa-person-walking::after, .fa-duotone.fa-person-walking::after { + content: "\f554\f554"; } + +.fad.fa-walking::after, .fa-duotone.fa-walking::after { + content: "\f554\f554"; } + +.fad.fa-l::after, .fa-duotone.fa-l::after { + content: "\4c\4c"; } + +.fad.fa-signal-stream::after, .fa-duotone.fa-signal-stream::after { + content: "\f8dd\f8dd"; } + +.fad.fa-down-to-bracket::after, .fa-duotone.fa-down-to-bracket::after { + content: "\e4e7\e4e7"; } + +.fad.fa-circle-z::after, .fa-duotone.fa-circle-z::after { + content: "\e130\e130"; } + +.fad.fa-stars::after, .fa-duotone.fa-stars::after { + content: "\f762\f762"; } + +.fad.fa-fire::after, .fa-duotone.fa-fire::after { + content: "\f06d\f06d"; } + +.fad.fa-bed-pulse::after, .fa-duotone.fa-bed-pulse::after { + content: "\f487\f487"; } + +.fad.fa-procedures::after, .fa-duotone.fa-procedures::after { + content: "\f487\f487"; } + +.fad.fa-house-day::after, .fa-duotone.fa-house-day::after { + content: "\e00e\e00e"; } + +.fad.fa-shuttle-space::after, .fa-duotone.fa-shuttle-space::after { + content: "\f197\f197"; } + +.fad.fa-space-shuttle::after, .fa-duotone.fa-space-shuttle::after { + content: "\f197\f197"; } + +.fad.fa-shirt-long-sleeve::after, .fa-duotone.fa-shirt-long-sleeve::after { + content: "\e3c7\e3c7"; } + +.fad.fa-chart-pie-simple::after, .fa-duotone.fa-chart-pie-simple::after { + content: "\f64e\f64e"; } + +.fad.fa-chart-pie-alt::after, .fa-duotone.fa-chart-pie-alt::after { + content: "\f64e\f64e"; } + +.fad.fa-face-laugh::after, .fa-duotone.fa-face-laugh::after { + content: "\f599\f599"; } + +.fad.fa-laugh::after, .fa-duotone.fa-laugh::after { + content: "\f599\f599"; } + +.fad.fa-folder-open::after, .fa-duotone.fa-folder-open::after { + content: "\f07c\f07c"; } + +.fad.fa-album-collection-circle-user::after, .fa-duotone.fa-album-collection-circle-user::after { + content: "\e48f\e48f"; } + +.fad.fa-candy::after, .fa-duotone.fa-candy::after { + content: "\e3e7\e3e7"; } + +.fad.fa-bowl-hot::after, .fa-duotone.fa-bowl-hot::after { + content: "\f823\f823"; } + +.fad.fa-soup::after, .fa-duotone.fa-soup::after { + content: "\f823\f823"; } + +.fad.fa-flatbread::after, .fa-duotone.fa-flatbread::after { + content: "\e40b\e40b"; } + +.fad.fa-heart-circle-plus::after, .fa-duotone.fa-heart-circle-plus::after { + content: "\e500\e500"; } + +.fad.fa-code-fork::after, .fa-duotone.fa-code-fork::after { + content: "\e13b\e13b"; } + +.fad.fa-city::after, .fa-duotone.fa-city::after { + content: "\f64f\f64f"; } + +.fad.fa-signal-bars-weak::after, .fa-duotone.fa-signal-bars-weak::after { + content: "\f691\f691"; } + +.fad.fa-signal-alt-1::after, .fa-duotone.fa-signal-alt-1::after { + content: "\f691\f691"; } + +.fad.fa-microphone-lines::after, .fa-duotone.fa-microphone-lines::after { + content: "\f3c9\f3c9"; } + +.fad.fa-microphone-alt::after, .fa-duotone.fa-microphone-alt::after { + content: "\f3c9\f3c9"; } + +.fad.fa-clock-twelve::after, .fa-duotone.fa-clock-twelve::after { + content: "\e358\e358"; } + +.fad.fa-pepper-hot::after, .fa-duotone.fa-pepper-hot::after { + content: "\f816\f816"; } + +.fad.fa-citrus-slice::after, .fa-duotone.fa-citrus-slice::after { + content: "\e2f5\e2f5"; } + +.fad.fa-sheep::after, .fa-duotone.fa-sheep::after { + content: "\f711\f711"; } + +.fad.fa-unlock::after, .fa-duotone.fa-unlock::after { + content: "\f09c\f09c"; } + +.fad.fa-colon-sign::after, .fa-duotone.fa-colon-sign::after { + content: "\e140\e140"; } + +.fad.fa-headset::after, .fa-duotone.fa-headset::after { + content: "\f590\f590"; } + +.fad.fa-badger-honey::after, .fa-duotone.fa-badger-honey::after { + content: "\f6b4\f6b4"; } + +.fad.fa-h4::after, .fa-duotone.fa-h4::after { + content: "\f86a\f86a"; } + +.fad.fa-store-slash::after, .fa-duotone.fa-store-slash::after { + content: "\e071\e071"; } + +.fad.fa-road-circle-xmark::after, .fa-duotone.fa-road-circle-xmark::after { + content: "\e566\e566"; } + +.fad.fa-signal-slash::after, .fa-duotone.fa-signal-slash::after { + content: "\f695\f695"; } + +.fad.fa-user-minus::after, .fa-duotone.fa-user-minus::after { + content: "\f503\f503"; } + +.fad.fa-mars-stroke-up::after, .fa-duotone.fa-mars-stroke-up::after { + content: "\f22a\f22a"; } + +.fad.fa-mars-stroke-v::after, .fa-duotone.fa-mars-stroke-v::after { + content: "\f22a\f22a"; } + +.fad.fa-champagne-glasses::after, .fa-duotone.fa-champagne-glasses::after { + content: "\f79f\f79f"; } + +.fad.fa-glass-cheers::after, .fa-duotone.fa-glass-cheers::after { + content: "\f79f\f79f"; } + +.fad.fa-taco::after, .fa-duotone.fa-taco::after { + content: "\f826\f826"; } + +.fad.fa-hexagon-plus::after, .fa-duotone.fa-hexagon-plus::after { + content: "\f300\f300"; } + +.fad.fa-plus-hexagon::after, .fa-duotone.fa-plus-hexagon::after { + content: "\f300\f300"; } + +.fad.fa-clipboard::after, .fa-duotone.fa-clipboard::after { + content: "\f328\f328"; } + +.fad.fa-house-circle-exclamation::after, .fa-duotone.fa-house-circle-exclamation::after { + content: "\e50a\e50a"; } + +.fad.fa-file-arrow-up::after, .fa-duotone.fa-file-arrow-up::after { + content: "\f574\f574"; } + +.fad.fa-file-upload::after, .fa-duotone.fa-file-upload::after { + content: "\f574\f574"; } + +.fad.fa-wifi::after, .fa-duotone.fa-wifi::after { + content: "\f1eb\f1eb"; } + +.fad.fa-wifi-3::after, .fa-duotone.fa-wifi-3::after { + content: "\f1eb\f1eb"; } + +.fad.fa-wifi-strong::after, .fa-duotone.fa-wifi-strong::after { + content: "\f1eb\f1eb"; } + +.fad.fa-messages::after, .fa-duotone.fa-messages::after { + content: "\f4b6\f4b6"; } + +.fad.fa-comments-alt::after, .fa-duotone.fa-comments-alt::after { + content: "\f4b6\f4b6"; } + +.fad.fa-bath::after, .fa-duotone.fa-bath::after { + content: "\f2cd\f2cd"; } + +.fad.fa-bathtub::after, .fa-duotone.fa-bathtub::after { + content: "\f2cd\f2cd"; } + +.fad.fa-umbrella-simple::after, .fa-duotone.fa-umbrella-simple::after { + content: "\e2bc\e2bc"; } + +.fad.fa-umbrella-alt::after, .fa-duotone.fa-umbrella-alt::after { + content: "\e2bc\e2bc"; } + +.fad.fa-rectangle-history-circle-plus::after, .fa-duotone.fa-rectangle-history-circle-plus::after { + content: "\e4a3\e4a3"; } + +.fad.fa-underline::after, .fa-duotone.fa-underline::after { + content: "\f0cd\f0cd"; } + +.fad.fa-prescription-bottle-pill::after, .fa-duotone.fa-prescription-bottle-pill::after { + content: "\e5c0\e5c0"; } + +.fad.fa-user-pen::after, .fa-duotone.fa-user-pen::after { + content: "\f4ff\f4ff"; } + +.fad.fa-user-edit::after, .fa-duotone.fa-user-edit::after { + content: "\f4ff\f4ff"; } + +.fad.fa-binary-slash::after, .fa-duotone.fa-binary-slash::after { + content: "\e33e\e33e"; } + +.fad.fa-square-o::after, .fa-duotone.fa-square-o::after { + content: "\e278\e278"; } + +.fad.fa-signature::after, .fa-duotone.fa-signature::after { + content: "\f5b7\f5b7"; } + +.fad.fa-stroopwafel::after, .fa-duotone.fa-stroopwafel::after { + content: "\f551\f551"; } + +.fad.fa-bold::after, .fa-duotone.fa-bold::after { + content: "\f032\f032"; } + +.fad.fa-anchor-lock::after, .fa-duotone.fa-anchor-lock::after { + content: "\e4ad\e4ad"; } + +.fad.fa-building-ngo::after, .fa-duotone.fa-building-ngo::after { + content: "\e4d7\e4d7"; } + +.fad.fa-transporter-3::after, .fa-duotone.fa-transporter-3::after { + content: "\e045\e045"; } + +.fad.fa-engine-warning::after, .fa-duotone.fa-engine-warning::after { + content: "\f5f2\f5f2"; } + +.fad.fa-engine-exclamation::after, .fa-duotone.fa-engine-exclamation::after { + content: "\f5f2\f5f2"; } + +.fad.fa-circle-down-right::after, .fa-duotone.fa-circle-down-right::after { + content: "\e108\e108"; } + +.fad.fa-square-k::after, .fa-duotone.fa-square-k::after { + content: "\e274\e274"; } + +.fad.fa-manat-sign::after, .fa-duotone.fa-manat-sign::after { + content: "\e1d5\e1d5"; } + +.fad.fa-money-check-pen::after, .fa-duotone.fa-money-check-pen::after { + content: "\f872\f872"; } + +.fad.fa-money-check-edit::after, .fa-duotone.fa-money-check-edit::after { + content: "\f872\f872"; } + +.fad.fa-not-equal::after, .fa-duotone.fa-not-equal::after { + content: "\f53e\f53e"; } + +.fad.fa-border-top-left::after, .fa-duotone.fa-border-top-left::after { + content: "\f853\f853"; } + +.fad.fa-border-style::after, .fa-duotone.fa-border-style::after { + content: "\f853\f853"; } + +.fad.fa-map-location-dot::after, .fa-duotone.fa-map-location-dot::after { + content: "\f5a0\f5a0"; } + +.fad.fa-map-marked-alt::after, .fa-duotone.fa-map-marked-alt::after { + content: "\f5a0\f5a0"; } + +.fad.fa-tilde::after, .fa-duotone.fa-tilde::after { + content: "\7e\7e"; } + +.fad.fa-jedi::after, .fa-duotone.fa-jedi::after { + content: "\f669\f669"; } + +.fad.fa-square-poll-vertical::after, .fa-duotone.fa-square-poll-vertical::after { + content: "\f681\f681"; } + +.fad.fa-poll::after, .fa-duotone.fa-poll::after { + content: "\f681\f681"; } + +.fad.fa-arrow-down-square-triangle::after, .fa-duotone.fa-arrow-down-square-triangle::after { + content: "\f889\f889"; } + +.fad.fa-sort-shapes-down-alt::after, .fa-duotone.fa-sort-shapes-down-alt::after { + content: "\f889\f889"; } + +.fad.fa-mug-hot::after, .fa-duotone.fa-mug-hot::after { + content: "\f7b6\f7b6"; } + +.fad.fa-dog-leashed::after, .fa-duotone.fa-dog-leashed::after { + content: "\f6d4\f6d4"; } + +.fad.fa-car-battery::after, .fa-duotone.fa-car-battery::after { + content: "\f5df\f5df"; } + +.fad.fa-battery-car::after, .fa-duotone.fa-battery-car::after { + content: "\f5df\f5df"; } + +.fad.fa-face-downcast-sweat::after, .fa-duotone.fa-face-downcast-sweat::after { + content: "\e371\e371"; } + +.fad.fa-mailbox-flag-up::after, .fa-duotone.fa-mailbox-flag-up::after { + content: "\e5bb\e5bb"; } + +.fad.fa-memo-circle-info::after, .fa-duotone.fa-memo-circle-info::after { + content: "\e49a\e49a"; } + +.fad.fa-gift::after, .fa-duotone.fa-gift::after { + content: "\f06b\f06b"; } + +.fad.fa-dice-two::after, .fa-duotone.fa-dice-two::after { + content: "\f528\f528"; } + +.fad.fa-volume::after, .fa-duotone.fa-volume::after { + content: "\f6a8\f6a8"; } + +.fad.fa-volume-medium::after, .fa-duotone.fa-volume-medium::after { + content: "\f6a8\f6a8"; } + +.fad.fa-transporter-5::after, .fa-duotone.fa-transporter-5::after { + content: "\e2a6\e2a6"; } + +.fad.fa-gauge-circle-bolt::after, .fa-duotone.fa-gauge-circle-bolt::after { + content: "\e496\e496"; } + +.fad.fa-coin-front::after, .fa-duotone.fa-coin-front::after { + content: "\e3fc\e3fc"; } + +.fad.fa-file-slash::after, .fa-duotone.fa-file-slash::after { + content: "\e3a7\e3a7"; } + +.fad.fa-message-arrow-up-right::after, .fa-duotone.fa-message-arrow-up-right::after { + content: "\e1dd\e1dd"; } + +.fad.fa-treasure-chest::after, .fa-duotone.fa-treasure-chest::after { + content: "\f723\f723"; } + +.fad.fa-chess-queen::after, .fa-duotone.fa-chess-queen::after { + content: "\f445\f445"; } + +.fad.fa-paintbrush-fine::after, .fa-duotone.fa-paintbrush-fine::after { + content: "\f5a9\f5a9"; } + +.fad.fa-paint-brush-alt::after, .fa-duotone.fa-paint-brush-alt::after { + content: "\f5a9\f5a9"; } + +.fad.fa-paint-brush-fine::after, .fa-duotone.fa-paint-brush-fine::after { + content: "\f5a9\f5a9"; } + +.fad.fa-paintbrush-alt::after, .fa-duotone.fa-paintbrush-alt::after { + content: "\f5a9\f5a9"; } + +.fad.fa-glasses::after, .fa-duotone.fa-glasses::after { + content: "\f530\f530"; } + +.fad.fa-hood-cloak::after, .fa-duotone.fa-hood-cloak::after { + content: "\f6ef\f6ef"; } + +.fad.fa-square-quote::after, .fa-duotone.fa-square-quote::after { + content: "\e329\e329"; } + +.fad.fa-up-left::after, .fa-duotone.fa-up-left::after { + content: "\e2bd\e2bd"; } + +.fad.fa-bring-front::after, .fa-duotone.fa-bring-front::after { + content: "\f857\f857"; } + +.fad.fa-chess-board::after, .fa-duotone.fa-chess-board::after { + content: "\f43c\f43c"; } + +.fad.fa-burger-cheese::after, .fa-duotone.fa-burger-cheese::after { + content: "\f7f1\f7f1"; } + +.fad.fa-cheeseburger::after, .fa-duotone.fa-cheeseburger::after { + content: "\f7f1\f7f1"; } + +.fad.fa-building-circle-check::after, .fa-duotone.fa-building-circle-check::after { + content: "\e4d2\e4d2"; } + +.fad.fa-repeat-1::after, .fa-duotone.fa-repeat-1::after { + content: "\f365\f365"; } + +.fad.fa-arrow-down-to-line::after, .fa-duotone.fa-arrow-down-to-line::after { + content: "\f33d\f33d"; } + +.fad.fa-arrow-to-bottom::after, .fa-duotone.fa-arrow-to-bottom::after { + content: "\f33d\f33d"; } + +.fad.fa-grid-5::after, .fa-duotone.fa-grid-5::after { + content: "\e199\e199"; } + +.fad.fa-swap-arrows::after, .fa-duotone.fa-swap-arrows::after { + content: "\e60a\e60a"; } + +.fad.fa-right-long-to-line::after, .fa-duotone.fa-right-long-to-line::after { + content: "\e444\e444"; } + +.fad.fa-person-chalkboard::after, .fa-duotone.fa-person-chalkboard::after { + content: "\e53d\e53d"; } + +.fad.fa-mars-stroke-right::after, .fa-duotone.fa-mars-stroke-right::after { + content: "\f22b\f22b"; } + +.fad.fa-mars-stroke-h::after, .fa-duotone.fa-mars-stroke-h::after { + content: "\f22b\f22b"; } + +.fad.fa-hand-back-fist::after, .fa-duotone.fa-hand-back-fist::after { + content: "\f255\f255"; } + +.fad.fa-hand-rock::after, .fa-duotone.fa-hand-rock::after { + content: "\f255\f255"; } + +.fad.fa-grid-round-5::after, .fa-duotone.fa-grid-round-5::after { + content: "\e5de\e5de"; } + +.fad.fa-tally::after, .fa-duotone.fa-tally::after { + content: "\f69c\f69c"; } + +.fad.fa-tally-5::after, .fa-duotone.fa-tally-5::after { + content: "\f69c\f69c"; } + +.fad.fa-square-caret-up::after, .fa-duotone.fa-square-caret-up::after { + content: "\f151\f151"; } + +.fad.fa-caret-square-up::after, .fa-duotone.fa-caret-square-up::after { + content: "\f151\f151"; } + +.fad.fa-cloud-showers-water::after, .fa-duotone.fa-cloud-showers-water::after { + content: "\e4e4\e4e4"; } + +.fad.fa-chart-bar::after, .fa-duotone.fa-chart-bar::after { + content: "\f080\f080"; } + +.fad.fa-bar-chart::after, .fa-duotone.fa-bar-chart::after { + content: "\f080\f080"; } + +.fad.fa-hands-bubbles::after, .fa-duotone.fa-hands-bubbles::after { + content: "\e05e\e05e"; } + +.fad.fa-hands-wash::after, .fa-duotone.fa-hands-wash::after { + content: "\e05e\e05e"; } + +.fad.fa-less-than-equal::after, .fa-duotone.fa-less-than-equal::after { + content: "\f537\f537"; } + +.fad.fa-train::after, .fa-duotone.fa-train::after { + content: "\f238\f238"; } + +.fad.fa-up-from-dotted-line::after, .fa-duotone.fa-up-from-dotted-line::after { + content: "\e456\e456"; } + +.fad.fa-eye-low-vision::after, .fa-duotone.fa-eye-low-vision::after { + content: "\f2a8\f2a8"; } + +.fad.fa-low-vision::after, .fa-duotone.fa-low-vision::after { + content: "\f2a8\f2a8"; } + +.fad.fa-traffic-light-go::after, .fa-duotone.fa-traffic-light-go::after { + content: "\f638\f638"; } + +.fad.fa-face-exhaling::after, .fa-duotone.fa-face-exhaling::after { + content: "\e480\e480"; } + +.fad.fa-sensor-fire::after, .fa-duotone.fa-sensor-fire::after { + content: "\e02a\e02a"; } + +.fad.fa-user-unlock::after, .fa-duotone.fa-user-unlock::after { + content: "\e058\e058"; } + +.fad.fa-hexagon-divide::after, .fa-duotone.fa-hexagon-divide::after { + content: "\e1ad\e1ad"; } + +.fad.fa-00::after, .fa-duotone.fa-00::after { + content: "\e467\e467"; } + +.fad.fa-crow::after, .fa-duotone.fa-crow::after { + content: "\f520\f520"; } + +.fad.fa-cassette-betamax::after, .fa-duotone.fa-cassette-betamax::after { + content: "\f8a4\f8a4"; } + +.fad.fa-betamax::after, .fa-duotone.fa-betamax::after { + content: "\f8a4\f8a4"; } + +.fad.fa-sailboat::after, .fa-duotone.fa-sailboat::after { + content: "\e445\e445"; } + +.fad.fa-window-restore::after, .fa-duotone.fa-window-restore::after { + content: "\f2d2\f2d2"; } + +.fad.fa-nfc-magnifying-glass::after, .fa-duotone.fa-nfc-magnifying-glass::after { + content: "\e1f9\e1f9"; } + +.fad.fa-file-binary::after, .fa-duotone.fa-file-binary::after { + content: "\e175\e175"; } + +.fad.fa-circle-v::after, .fa-duotone.fa-circle-v::after { + content: "\e12a\e12a"; } + +.fad.fa-square-plus::after, .fa-duotone.fa-square-plus::after { + content: "\f0fe\f0fe"; } + +.fad.fa-plus-square::after, .fa-duotone.fa-plus-square::after { + content: "\f0fe\f0fe"; } + +.fad.fa-bowl-scoops::after, .fa-duotone.fa-bowl-scoops::after { + content: "\e3df\e3df"; } + +.fad.fa-mistletoe::after, .fa-duotone.fa-mistletoe::after { + content: "\f7b4\f7b4"; } + +.fad.fa-custard::after, .fa-duotone.fa-custard::after { + content: "\e403\e403"; } + +.fad.fa-lacrosse-stick::after, .fa-duotone.fa-lacrosse-stick::after { + content: "\e3b5\e3b5"; } + +.fad.fa-hockey-mask::after, .fa-duotone.fa-hockey-mask::after { + content: "\f6ee\f6ee"; } + +.fad.fa-sunrise::after, .fa-duotone.fa-sunrise::after { + content: "\f766\f766"; } + +.fad.fa-subtitles::after, .fa-duotone.fa-subtitles::after { + content: "\e60f\e60f"; } + +.fad.fa-panel-ews::after, .fa-duotone.fa-panel-ews::after { + content: "\e42e\e42e"; } + +.fad.fa-torii-gate::after, .fa-duotone.fa-torii-gate::after { + content: "\f6a1\f6a1"; } + +.fad.fa-cloud-exclamation::after, .fa-duotone.fa-cloud-exclamation::after { + content: "\e491\e491"; } + +.fad.fa-message-lines::after, .fa-duotone.fa-message-lines::after { + content: "\f4a6\f4a6"; } + +.fad.fa-comment-alt-lines::after, .fa-duotone.fa-comment-alt-lines::after { + content: "\f4a6\f4a6"; } + +.fad.fa-frog::after, .fa-duotone.fa-frog::after { + content: "\f52e\f52e"; } + +.fad.fa-bucket::after, .fa-duotone.fa-bucket::after { + content: "\e4cf\e4cf"; } + +.fad.fa-floppy-disk-pen::after, .fa-duotone.fa-floppy-disk-pen::after { + content: "\e182\e182"; } + +.fad.fa-image::after, .fa-duotone.fa-image::after { + content: "\f03e\f03e"; } + +.fad.fa-window-frame::after, .fa-duotone.fa-window-frame::after { + content: "\e04f\e04f"; } + +.fad.fa-microphone::after, .fa-duotone.fa-microphone::after { + content: "\f130\f130"; } + +.fad.fa-cow::after, .fa-duotone.fa-cow::after { + content: "\f6c8\f6c8"; } + +.fad.fa-file-zip::after, .fa-duotone.fa-file-zip::after { + content: "\e5ee\e5ee"; } + +.fad.fa-square-ring::after, .fa-duotone.fa-square-ring::after { + content: "\e44f\e44f"; } + +.fad.fa-down-from-line::after, .fa-duotone.fa-down-from-line::after { + content: "\f349\f349"; } + +.fad.fa-arrow-alt-from-top::after, .fa-duotone.fa-arrow-alt-from-top::after { + content: "\f349\f349"; } + +.fad.fa-caret-up::after, .fa-duotone.fa-caret-up::after { + content: "\f0d8\f0d8"; } + +.fad.fa-shield-xmark::after, .fa-duotone.fa-shield-xmark::after { + content: "\e24c\e24c"; } + +.fad.fa-shield-times::after, .fa-duotone.fa-shield-times::after { + content: "\e24c\e24c"; } + +.fad.fa-screwdriver::after, .fa-duotone.fa-screwdriver::after { + content: "\f54a\f54a"; } + +.fad.fa-circle-sort-down::after, .fa-duotone.fa-circle-sort-down::after { + content: "\e031\e031"; } + +.fad.fa-sort-circle-down::after, .fa-duotone.fa-sort-circle-down::after { + content: "\e031\e031"; } + +.fad.fa-folder-closed::after, .fa-duotone.fa-folder-closed::after { + content: "\e185\e185"; } + +.fad.fa-house-tsunami::after, .fa-duotone.fa-house-tsunami::after { + content: "\e515\e515"; } + +.fad.fa-square-nfi::after, .fa-duotone.fa-square-nfi::after { + content: "\e576\e576"; } + +.fad.fa-forklift::after, .fa-duotone.fa-forklift::after { + content: "\f47a\f47a"; } + +.fad.fa-arrow-up-from-ground-water::after, .fa-duotone.fa-arrow-up-from-ground-water::after { + content: "\e4b5\e4b5"; } + +.fad.fa-bracket-square-right::after, .fa-duotone.fa-bracket-square-right::after { + content: "\5d\5d"; } + +.fad.fa-martini-glass::after, .fa-duotone.fa-martini-glass::after { + content: "\f57b\f57b"; } + +.fad.fa-glass-martini-alt::after, .fa-duotone.fa-glass-martini-alt::after { + content: "\f57b\f57b"; } + +.fad.fa-rotate-left::after, .fa-duotone.fa-rotate-left::after { + content: "\f2ea\f2ea"; } + +.fad.fa-rotate-back::after, .fa-duotone.fa-rotate-back::after { + content: "\f2ea\f2ea"; } + +.fad.fa-rotate-backward::after, .fa-duotone.fa-rotate-backward::after { + content: "\f2ea\f2ea"; } + +.fad.fa-undo-alt::after, .fa-duotone.fa-undo-alt::after { + content: "\f2ea\f2ea"; } + +.fad.fa-table-columns::after, .fa-duotone.fa-table-columns::after { + content: "\f0db\f0db"; } + +.fad.fa-columns::after, .fa-duotone.fa-columns::after { + content: "\f0db\f0db"; } + +.fad.fa-square-a::after, .fa-duotone.fa-square-a::after { + content: "\e25f\e25f"; } + +.fad.fa-tick::after, .fa-duotone.fa-tick::after { + content: "\e32f\e32f"; } + +.fad.fa-lemon::after, .fa-duotone.fa-lemon::after { + content: "\f094\f094"; } + +.fad.fa-head-side-mask::after, .fa-duotone.fa-head-side-mask::after { + content: "\e063\e063"; } + +.fad.fa-handshake::after, .fa-duotone.fa-handshake::after { + content: "\f2b5\f2b5"; } + +.fad.fa-gem::after, .fa-duotone.fa-gem::after { + content: "\f3a5\f3a5"; } + +.fad.fa-dolly::after, .fa-duotone.fa-dolly::after { + content: "\f472\f472"; } + +.fad.fa-dolly-box::after, .fa-duotone.fa-dolly-box::after { + content: "\f472\f472"; } + +.fad.fa-smoking::after, .fa-duotone.fa-smoking::after { + content: "\f48d\f48d"; } + +.fad.fa-minimize::after, .fa-duotone.fa-minimize::after { + content: "\f78c\f78c"; } + +.fad.fa-compress-arrows-alt::after, .fa-duotone.fa-compress-arrows-alt::after { + content: "\f78c\f78c"; } + +.fad.fa-refrigerator::after, .fa-duotone.fa-refrigerator::after { + content: "\e026\e026"; } + +.fad.fa-monument::after, .fa-duotone.fa-monument::after { + content: "\f5a6\f5a6"; } + +.fad.fa-octagon-xmark::after, .fa-duotone.fa-octagon-xmark::after { + content: "\f2f0\f2f0"; } + +.fad.fa-times-octagon::after, .fa-duotone.fa-times-octagon::after { + content: "\f2f0\f2f0"; } + +.fad.fa-xmark-octagon::after, .fa-duotone.fa-xmark-octagon::after { + content: "\f2f0\f2f0"; } + +.fad.fa-align-slash::after, .fa-duotone.fa-align-slash::after { + content: "\f846\f846"; } + +.fad.fa-snowplow::after, .fa-duotone.fa-snowplow::after { + content: "\f7d2\f7d2"; } + +.fad.fa-angles-right::after, .fa-duotone.fa-angles-right::after { + content: "\f101\f101"; } + +.fad.fa-angle-double-right::after, .fa-duotone.fa-angle-double-right::after { + content: "\f101\f101"; } + +.fad.fa-truck-ramp-couch::after, .fa-duotone.fa-truck-ramp-couch::after { + content: "\f4dd\f4dd"; } + +.fad.fa-truck-couch::after, .fa-duotone.fa-truck-couch::after { + content: "\f4dd\f4dd"; } + +.fad.fa-cannabis::after, .fa-duotone.fa-cannabis::after { + content: "\f55f\f55f"; } + +.fad.fa-circle-play::after, .fa-duotone.fa-circle-play::after { + content: "\f144\f144"; } + +.fad.fa-play-circle::after, .fa-duotone.fa-play-circle::after { + content: "\f144\f144"; } + +.fad.fa-arrow-up-right-and-arrow-down-left-from-center::after, .fa-duotone.fa-arrow-up-right-and-arrow-down-left-from-center::after { + content: "\e0a0\e0a0"; } + +.fad.fa-tablets::after, .fa-duotone.fa-tablets::after { + content: "\f490\f490"; } + +.fad.fa-360-degrees::after, .fa-duotone.fa-360-degrees::after { + content: "\e2dc\e2dc"; } + +.fad.fa-ethernet::after, .fa-duotone.fa-ethernet::after { + content: "\f796\f796"; } + +.fad.fa-euro-sign::after, .fa-duotone.fa-euro-sign::after { + content: "\f153\f153"; } + +.fad.fa-eur::after, .fa-duotone.fa-eur::after { + content: "\f153\f153"; } + +.fad.fa-euro::after, .fa-duotone.fa-euro::after { + content: "\f153\f153"; } + +.fad.fa-chair::after, .fa-duotone.fa-chair::after { + content: "\f6c0\f6c0"; } + +.fad.fa-circle-check::after, .fa-duotone.fa-circle-check::after { + content: "\f058\f058"; } + +.fad.fa-check-circle::after, .fa-duotone.fa-check-circle::after { + content: "\f058\f058"; } + +.fad.fa-square-dashed-circle-plus::after, .fa-duotone.fa-square-dashed-circle-plus::after { + content: "\e5c2\e5c2"; } + +.fad.fa-money-simple-from-bracket::after, .fa-duotone.fa-money-simple-from-bracket::after { + content: "\e313\e313"; } + +.fad.fa-bat::after, .fa-duotone.fa-bat::after { + content: "\f6b5\f6b5"; } + +.fad.fa-circle-stop::after, .fa-duotone.fa-circle-stop::after { + content: "\f28d\f28d"; } + +.fad.fa-stop-circle::after, .fa-duotone.fa-stop-circle::after { + content: "\f28d\f28d"; } + +.fad.fa-head-side-headphones::after, .fa-duotone.fa-head-side-headphones::after { + content: "\f8c2\f8c2"; } + +.fad.fa-phone-rotary::after, .fa-duotone.fa-phone-rotary::after { + content: "\f8d3\f8d3"; } + +.fad.fa-compass-drafting::after, .fa-duotone.fa-compass-drafting::after { + content: "\f568\f568"; } + +.fad.fa-drafting-compass::after, .fa-duotone.fa-drafting-compass::after { + content: "\f568\f568"; } + +.fad.fa-plate-wheat::after, .fa-duotone.fa-plate-wheat::after { + content: "\e55a\e55a"; } + +.fad.fa-calendar-circle-minus::after, .fa-duotone.fa-calendar-circle-minus::after { + content: "\e46f\e46f"; } + +.fad.fa-chopsticks::after, .fa-duotone.fa-chopsticks::after { + content: "\e3f7\e3f7"; } + +.fad.fa-car-wrench::after, .fa-duotone.fa-car-wrench::after { + content: "\f5e3\f5e3"; } + +.fad.fa-car-mechanic::after, .fa-duotone.fa-car-mechanic::after { + content: "\f5e3\f5e3"; } + +.fad.fa-icicles::after, .fa-duotone.fa-icicles::after { + content: "\f7ad\f7ad"; } + +.fad.fa-person-shelter::after, .fa-duotone.fa-person-shelter::after { + content: "\e54f\e54f"; } + +.fad.fa-neuter::after, .fa-duotone.fa-neuter::after { + content: "\f22c\f22c"; } + +.fad.fa-id-badge::after, .fa-duotone.fa-id-badge::after { + content: "\f2c1\f2c1"; } + +.fad.fa-kazoo::after, .fa-duotone.fa-kazoo::after { + content: "\f8c7\f8c7"; } + +.fad.fa-marker::after, .fa-duotone.fa-marker::after { + content: "\f5a1\f5a1"; } + +.fad.fa-bin-bottles::after, .fa-duotone.fa-bin-bottles::after { + content: "\e5f5\e5f5"; } + +.fad.fa-face-laugh-beam::after, .fa-duotone.fa-face-laugh-beam::after { + content: "\f59a\f59a"; } + +.fad.fa-laugh-beam::after, .fa-duotone.fa-laugh-beam::after { + content: "\f59a\f59a"; } + +.fad.fa-square-arrow-down-left::after, .fa-duotone.fa-square-arrow-down-left::after { + content: "\e261\e261"; } + +.fad.fa-battery-bolt::after, .fa-duotone.fa-battery-bolt::after { + content: "\f376\f376"; } + +.fad.fa-tree-large::after, .fa-duotone.fa-tree-large::after { + content: "\f7dd\f7dd"; } + +.fad.fa-helicopter-symbol::after, .fa-duotone.fa-helicopter-symbol::after { + content: "\e502\e502"; } + +.fad.fa-aperture::after, .fa-duotone.fa-aperture::after { + content: "\e2df\e2df"; } + +.fad.fa-universal-access::after, .fa-duotone.fa-universal-access::after { + content: "\f29a\f29a"; } + +.fad.fa-gear-complex::after, .fa-duotone.fa-gear-complex::after { + content: "\e5e9\e5e9"; } + +.fad.fa-file-magnifying-glass::after, .fa-duotone.fa-file-magnifying-glass::after { + content: "\f865\f865"; } + +.fad.fa-file-search::after, .fa-duotone.fa-file-search::after { + content: "\f865\f865"; } + +.fad.fa-up-right::after, .fa-duotone.fa-up-right::after { + content: "\e2be\e2be"; } + +.fad.fa-circle-chevron-up::after, .fa-duotone.fa-circle-chevron-up::after { + content: "\f139\f139"; } + +.fad.fa-chevron-circle-up::after, .fa-duotone.fa-chevron-circle-up::after { + content: "\f139\f139"; } + +.fad.fa-user-police::after, .fa-duotone.fa-user-police::after { + content: "\e333\e333"; } + +.fad.fa-lari-sign::after, .fa-duotone.fa-lari-sign::after { + content: "\e1c8\e1c8"; } + +.fad.fa-volcano::after, .fa-duotone.fa-volcano::after { + content: "\f770\f770"; } + +.fad.fa-teddy-bear::after, .fa-duotone.fa-teddy-bear::after { + content: "\e3cf\e3cf"; } + +.fad.fa-stocking::after, .fa-duotone.fa-stocking::after { + content: "\f7d5\f7d5"; } + +.fad.fa-person-walking-dashed-line-arrow-right::after, .fa-duotone.fa-person-walking-dashed-line-arrow-right::after { + content: "\e553\e553"; } + +.fad.fa-image-slash::after, .fa-duotone.fa-image-slash::after { + content: "\e1b7\e1b7"; } + +.fad.fa-mask-snorkel::after, .fa-duotone.fa-mask-snorkel::after { + content: "\e3b7\e3b7"; } + +.fad.fa-smoke::after, .fa-duotone.fa-smoke::after { + content: "\f760\f760"; } + +.fad.fa-sterling-sign::after, .fa-duotone.fa-sterling-sign::after { + content: "\f154\f154"; } + +.fad.fa-gbp::after, .fa-duotone.fa-gbp::after { + content: "\f154\f154"; } + +.fad.fa-pound-sign::after, .fa-duotone.fa-pound-sign::after { + content: "\f154\f154"; } + +.fad.fa-battery-exclamation::after, .fa-duotone.fa-battery-exclamation::after { + content: "\e0b0\e0b0"; } + +.fad.fa-viruses::after, .fa-duotone.fa-viruses::after { + content: "\e076\e076"; } + +.fad.fa-square-person-confined::after, .fa-duotone.fa-square-person-confined::after { + content: "\e577\e577"; } + +.fad.fa-user-tie::after, .fa-duotone.fa-user-tie::after { + content: "\f508\f508"; } + +.fad.fa-arrow-down-long::after, .fa-duotone.fa-arrow-down-long::after { + content: "\f175\f175"; } + +.fad.fa-long-arrow-down::after, .fa-duotone.fa-long-arrow-down::after { + content: "\f175\f175"; } + +.fad.fa-tent-arrow-down-to-line::after, .fa-duotone.fa-tent-arrow-down-to-line::after { + content: "\e57e\e57e"; } + +.fad.fa-certificate::after, .fa-duotone.fa-certificate::after { + content: "\f0a3\f0a3"; } + +.fad.fa-crystal-ball::after, .fa-duotone.fa-crystal-ball::after { + content: "\e362\e362"; } + +.fad.fa-reply-all::after, .fa-duotone.fa-reply-all::after { + content: "\f122\f122"; } + +.fad.fa-mail-reply-all::after, .fa-duotone.fa-mail-reply-all::after { + content: "\f122\f122"; } + +.fad.fa-suitcase::after, .fa-duotone.fa-suitcase::after { + content: "\f0f2\f0f2"; } + +.fad.fa-person-skating::after, .fa-duotone.fa-person-skating::after { + content: "\f7c5\f7c5"; } + +.fad.fa-skating::after, .fa-duotone.fa-skating::after { + content: "\f7c5\f7c5"; } + +.fad.fa-star-shooting::after, .fa-duotone.fa-star-shooting::after { + content: "\e036\e036"; } + +.fad.fa-binary-lock::after, .fa-duotone.fa-binary-lock::after { + content: "\e33d\e33d"; } + +.fad.fa-filter-circle-dollar::after, .fa-duotone.fa-filter-circle-dollar::after { + content: "\f662\f662"; } + +.fad.fa-funnel-dollar::after, .fa-duotone.fa-funnel-dollar::after { + content: "\f662\f662"; } + +.fad.fa-camera-retro::after, .fa-duotone.fa-camera-retro::after { + content: "\f083\f083"; } + +.fad.fa-circle-arrow-down::after, .fa-duotone.fa-circle-arrow-down::after { + content: "\f0ab\f0ab"; } + +.fad.fa-arrow-circle-down::after, .fa-duotone.fa-arrow-circle-down::after { + content: "\f0ab\f0ab"; } + +.fad.fa-comment-pen::after, .fa-duotone.fa-comment-pen::after { + content: "\f4ae\f4ae"; } + +.fad.fa-comment-edit::after, .fa-duotone.fa-comment-edit::after { + content: "\f4ae\f4ae"; } + +.fad.fa-file-import::after, .fa-duotone.fa-file-import::after { + content: "\f56f\f56f"; } + +.fad.fa-arrow-right-to-file::after, .fa-duotone.fa-arrow-right-to-file::after { + content: "\f56f\f56f"; } + +.fad.fa-banjo::after, .fa-duotone.fa-banjo::after { + content: "\f8a3\f8a3"; } + +.fad.fa-square-arrow-up-right::after, .fa-duotone.fa-square-arrow-up-right::after { + content: "\f14c\f14c"; } + +.fad.fa-external-link-square::after, .fa-duotone.fa-external-link-square::after { + content: "\f14c\f14c"; } + +.fad.fa-light-emergency-on::after, .fa-duotone.fa-light-emergency-on::after { + content: "\e420\e420"; } + +.fad.fa-kerning::after, .fa-duotone.fa-kerning::after { + content: "\f86f\f86f"; } + +.fad.fa-box-open::after, .fa-duotone.fa-box-open::after { + content: "\f49e\f49e"; } + +.fad.fa-square-f::after, .fa-duotone.fa-square-f::after { + content: "\e270\e270"; } + +.fad.fa-scroll::after, .fa-duotone.fa-scroll::after { + content: "\f70e\f70e"; } + +.fad.fa-spa::after, .fa-duotone.fa-spa::after { + content: "\f5bb\f5bb"; } + +.fad.fa-arrow-left-from-line::after, .fa-duotone.fa-arrow-left-from-line::after { + content: "\f344\f344"; } + +.fad.fa-arrow-from-right::after, .fa-duotone.fa-arrow-from-right::after { + content: "\f344\f344"; } + +.fad.fa-strawberry::after, .fa-duotone.fa-strawberry::after { + content: "\e32b\e32b"; } + +.fad.fa-location-pin-lock::after, .fa-duotone.fa-location-pin-lock::after { + content: "\e51f\e51f"; } + +.fad.fa-pause::after, .fa-duotone.fa-pause::after { + content: "\f04c\f04c"; } + +.fad.fa-clock-eight-thirty::after, .fa-duotone.fa-clock-eight-thirty::after { + content: "\e346\e346"; } + +.fad.fa-plane-engines::after, .fa-duotone.fa-plane-engines::after { + content: "\f3de\f3de"; } + +.fad.fa-plane-alt::after, .fa-duotone.fa-plane-alt::after { + content: "\f3de\f3de"; } + +.fad.fa-hill-avalanche::after, .fa-duotone.fa-hill-avalanche::after { + content: "\e507\e507"; } + +.fad.fa-temperature-empty::after, .fa-duotone.fa-temperature-empty::after { + content: "\f2cb\f2cb"; } + +.fad.fa-temperature-0::after, .fa-duotone.fa-temperature-0::after { + content: "\f2cb\f2cb"; } + +.fad.fa-thermometer-0::after, .fa-duotone.fa-thermometer-0::after { + content: "\f2cb\f2cb"; } + +.fad.fa-thermometer-empty::after, .fa-duotone.fa-thermometer-empty::after { + content: "\f2cb\f2cb"; } + +.fad.fa-bomb::after, .fa-duotone.fa-bomb::after { + content: "\f1e2\f1e2"; } + +.fad.fa-gauge-low::after, .fa-duotone.fa-gauge-low::after { + content: "\f627\f627"; } + +.fad.fa-tachometer-alt-slow::after, .fa-duotone.fa-tachometer-alt-slow::after { + content: "\f627\f627"; } + +.fad.fa-registered::after, .fa-duotone.fa-registered::after { + content: "\f25d\f25d"; } + +.fad.fa-trash-can-plus::after, .fa-duotone.fa-trash-can-plus::after { + content: "\e2ac\e2ac"; } + +.fad.fa-address-card::after, .fa-duotone.fa-address-card::after { + content: "\f2bb\f2bb"; } + +.fad.fa-contact-card::after, .fa-duotone.fa-contact-card::after { + content: "\f2bb\f2bb"; } + +.fad.fa-vcard::after, .fa-duotone.fa-vcard::after { + content: "\f2bb\f2bb"; } + +.fad.fa-scale-unbalanced-flip::after, .fa-duotone.fa-scale-unbalanced-flip::after { + content: "\f516\f516"; } + +.fad.fa-balance-scale-right::after, .fa-duotone.fa-balance-scale-right::after { + content: "\f516\f516"; } + +.fad.fa-globe-snow::after, .fa-duotone.fa-globe-snow::after { + content: "\f7a3\f7a3"; } + +.fad.fa-subscript::after, .fa-duotone.fa-subscript::after { + content: "\f12c\f12c"; } + +.fad.fa-diamond-turn-right::after, .fa-duotone.fa-diamond-turn-right::after { + content: "\f5eb\f5eb"; } + +.fad.fa-directions::after, .fa-duotone.fa-directions::after { + content: "\f5eb\f5eb"; } + +.fad.fa-integral::after, .fa-duotone.fa-integral::after { + content: "\f667\f667"; } + +.fad.fa-burst::after, .fa-duotone.fa-burst::after { + content: "\e4dc\e4dc"; } + +.fad.fa-house-laptop::after, .fa-duotone.fa-house-laptop::after { + content: "\e066\e066"; } + +.fad.fa-laptop-house::after, .fa-duotone.fa-laptop-house::after { + content: "\e066\e066"; } + +.fad.fa-face-tired::after, .fa-duotone.fa-face-tired::after { + content: "\f5c8\f5c8"; } + +.fad.fa-tired::after, .fa-duotone.fa-tired::after { + content: "\f5c8\f5c8"; } + +.fad.fa-money-bills::after, .fa-duotone.fa-money-bills::after { + content: "\e1f3\e1f3"; } + +.fad.fa-blinds-raised::after, .fa-duotone.fa-blinds-raised::after { + content: "\f8fd\f8fd"; } + +.fad.fa-smog::after, .fa-duotone.fa-smog::after { + content: "\f75f\f75f"; } + +.fad.fa-ufo-beam::after, .fa-duotone.fa-ufo-beam::after { + content: "\e048\e048"; } + +.fad.fa-circle-caret-up::after, .fa-duotone.fa-circle-caret-up::after { + content: "\f331\f331"; } + +.fad.fa-caret-circle-up::after, .fa-duotone.fa-caret-circle-up::after { + content: "\f331\f331"; } + +.fad.fa-user-vneck-hair-long::after, .fa-duotone.fa-user-vneck-hair-long::after { + content: "\e463\e463"; } + +.fad.fa-square-a-lock::after, .fa-duotone.fa-square-a-lock::after { + content: "\e44d\e44d"; } + +.fad.fa-crutch::after, .fa-duotone.fa-crutch::after { + content: "\f7f7\f7f7"; } + +.fad.fa-gas-pump-slash::after, .fa-duotone.fa-gas-pump-slash::after { + content: "\f5f4\f5f4"; } + +.fad.fa-cloud-arrow-up::after, .fa-duotone.fa-cloud-arrow-up::after { + content: "\f0ee\f0ee"; } + +.fad.fa-cloud-upload::after, .fa-duotone.fa-cloud-upload::after { + content: "\f0ee\f0ee"; } + +.fad.fa-cloud-upload-alt::after, .fa-duotone.fa-cloud-upload-alt::after { + content: "\f0ee\f0ee"; } + +.fad.fa-palette::after, .fa-duotone.fa-palette::after { + content: "\f53f\f53f"; } + +.fad.fa-transporter-4::after, .fa-duotone.fa-transporter-4::after { + content: "\e2a5\e2a5"; } + +.fad.fa-chart-mixed-up-circle-currency::after, .fa-duotone.fa-chart-mixed-up-circle-currency::after { + content: "\e5d8\e5d8"; } + +.fad.fa-objects-align-right::after, .fa-duotone.fa-objects-align-right::after { + content: "\e3bf\e3bf"; } + +.fad.fa-arrows-turn-right::after, .fa-duotone.fa-arrows-turn-right::after { + content: "\e4c0\e4c0"; } + +.fad.fa-vest::after, .fa-duotone.fa-vest::after { + content: "\e085\e085"; } + +.fad.fa-pig::after, .fa-duotone.fa-pig::after { + content: "\f706\f706"; } + +.fad.fa-inbox-full::after, .fa-duotone.fa-inbox-full::after { + content: "\e1ba\e1ba"; } + +.fad.fa-circle-envelope::after, .fa-duotone.fa-circle-envelope::after { + content: "\e10c\e10c"; } + +.fad.fa-envelope-circle::after, .fa-duotone.fa-envelope-circle::after { + content: "\e10c\e10c"; } + +.fad.fa-triangle-person-digging::after, .fa-duotone.fa-triangle-person-digging::after { + content: "\f85d\f85d"; } + +.fad.fa-construction::after, .fa-duotone.fa-construction::after { + content: "\f85d\f85d"; } + +.fad.fa-ferry::after, .fa-duotone.fa-ferry::after { + content: "\e4ea\e4ea"; } + +.fad.fa-bullseye-arrow::after, .fa-duotone.fa-bullseye-arrow::after { + content: "\f648\f648"; } + +.fad.fa-arrows-down-to-people::after, .fa-duotone.fa-arrows-down-to-people::after { + content: "\e4b9\e4b9"; } + +.fad.fa-seedling::after, .fa-duotone.fa-seedling::after { + content: "\f4d8\f4d8"; } + +.fad.fa-sprout::after, .fa-duotone.fa-sprout::after { + content: "\f4d8\f4d8"; } + +.fad.fa-clock-seven::after, .fa-duotone.fa-clock-seven::after { + content: "\e350\e350"; } + +.fad.fa-left-right::after, .fa-duotone.fa-left-right::after { + content: "\f337\f337"; } + +.fad.fa-arrows-alt-h::after, .fa-duotone.fa-arrows-alt-h::after { + content: "\f337\f337"; } + +.fad.fa-boxes-packing::after, .fa-duotone.fa-boxes-packing::after { + content: "\e4c7\e4c7"; } + +.fad.fa-circle-arrow-left::after, .fa-duotone.fa-circle-arrow-left::after { + content: "\f0a8\f0a8"; } + +.fad.fa-arrow-circle-left::after, .fa-duotone.fa-arrow-circle-left::after { + content: "\f0a8\f0a8"; } + +.fad.fa-flashlight::after, .fa-duotone.fa-flashlight::after { + content: "\f8b8\f8b8"; } + +.fad.fa-group-arrows-rotate::after, .fa-duotone.fa-group-arrows-rotate::after { + content: "\e4f6\e4f6"; } + +.fad.fa-bowl-food::after, .fa-duotone.fa-bowl-food::after { + content: "\e4c6\e4c6"; } + +.fad.fa-square-9::after, .fa-duotone.fa-square-9::after { + content: "\e25e\e25e"; } + +.fad.fa-candy-cane::after, .fa-duotone.fa-candy-cane::after { + content: "\f786\f786"; } + +.fad.fa-arrow-down-wide-short::after, .fa-duotone.fa-arrow-down-wide-short::after { + content: "\f160\f160"; } + +.fad.fa-sort-amount-asc::after, .fa-duotone.fa-sort-amount-asc::after { + content: "\f160\f160"; } + +.fad.fa-sort-amount-down::after, .fa-duotone.fa-sort-amount-down::after { + content: "\f160\f160"; } + +.fad.fa-square-dollar::after, .fa-duotone.fa-square-dollar::after { + content: "\f2e9\f2e9"; } + +.fad.fa-dollar-square::after, .fa-duotone.fa-dollar-square::after { + content: "\f2e9\f2e9"; } + +.fad.fa-usd-square::after, .fa-duotone.fa-usd-square::after { + content: "\f2e9\f2e9"; } + +.fad.fa-phone-arrow-right::after, .fa-duotone.fa-phone-arrow-right::after { + content: "\e5be\e5be"; } + +.fad.fa-hand-holding-seedling::after, .fa-duotone.fa-hand-holding-seedling::after { + content: "\f4bf\f4bf"; } + +.fad.fa-message-check::after, .fa-duotone.fa-message-check::after { + content: "\f4a2\f4a2"; } + +.fad.fa-comment-alt-check::after, .fa-duotone.fa-comment-alt-check::after { + content: "\f4a2\f4a2"; } + +.fad.fa-cloud-bolt::after, .fa-duotone.fa-cloud-bolt::after { + content: "\f76c\f76c"; } + +.fad.fa-thunderstorm::after, .fa-duotone.fa-thunderstorm::after { + content: "\f76c\f76c"; } + +.fad.fa-chart-line-up-down::after, .fa-duotone.fa-chart-line-up-down::after { + content: "\e5d7\e5d7"; } + +.fad.fa-text-slash::after, .fa-duotone.fa-text-slash::after { + content: "\f87d\f87d"; } + +.fad.fa-remove-format::after, .fa-duotone.fa-remove-format::after { + content: "\f87d\f87d"; } + +.fad.fa-watch::after, .fa-duotone.fa-watch::after { + content: "\f2e1\f2e1"; } + +.fad.fa-circle-down-left::after, .fa-duotone.fa-circle-down-left::after { + content: "\e107\e107"; } + +.fad.fa-text::after, .fa-duotone.fa-text::after { + content: "\f893\f893"; } + +.fad.fa-projector::after, .fa-duotone.fa-projector::after { + content: "\f8d6\f8d6"; } + +.fad.fa-face-smile-wink::after, .fa-duotone.fa-face-smile-wink::after { + content: "\f4da\f4da"; } + +.fad.fa-smile-wink::after, .fa-duotone.fa-smile-wink::after { + content: "\f4da\f4da"; } + +.fad.fa-tombstone-blank::after, .fa-duotone.fa-tombstone-blank::after { + content: "\f721\f721"; } + +.fad.fa-tombstone-alt::after, .fa-duotone.fa-tombstone-alt::after { + content: "\f721\f721"; } + +.fad.fa-chess-king-piece::after, .fa-duotone.fa-chess-king-piece::after { + content: "\f440\f440"; } + +.fad.fa-chess-king-alt::after, .fa-duotone.fa-chess-king-alt::after { + content: "\f440\f440"; } + +.fad.fa-circle-6::after, .fa-duotone.fa-circle-6::after { + content: "\e0f3\e0f3"; } + +.fad.fa-left::after, .fa-duotone.fa-left::after { + content: "\f355\f355"; } + +.fad.fa-arrow-alt-left::after, .fa-duotone.fa-arrow-alt-left::after { + content: "\f355\f355"; } + +.fad.fa-file-word::after, .fa-duotone.fa-file-word::after { + content: "\f1c2\f1c2"; } + +.fad.fa-file-powerpoint::after, .fa-duotone.fa-file-powerpoint::after { + content: "\f1c4\f1c4"; } + +.fad.fa-square-down::after, .fa-duotone.fa-square-down::after { + content: "\f350\f350"; } + +.fad.fa-arrow-alt-square-down::after, .fa-duotone.fa-arrow-alt-square-down::after { + content: "\f350\f350"; } + +.fad.fa-objects-align-center-vertical::after, .fa-duotone.fa-objects-align-center-vertical::after { + content: "\e3bd\e3bd"; } + +.fad.fa-arrows-left-right::after, .fa-duotone.fa-arrows-left-right::after { + content: "\f07e\f07e"; } + +.fad.fa-arrows-h::after, .fa-duotone.fa-arrows-h::after { + content: "\f07e\f07e"; } + +.fad.fa-house-lock::after, .fa-duotone.fa-house-lock::after { + content: "\e510\e510"; } + +.fad.fa-cloud-arrow-down::after, .fa-duotone.fa-cloud-arrow-down::after { + content: "\f0ed\f0ed"; } + +.fad.fa-cloud-download::after, .fa-duotone.fa-cloud-download::after { + content: "\f0ed\f0ed"; } + +.fad.fa-cloud-download-alt::after, .fa-duotone.fa-cloud-download-alt::after { + content: "\f0ed\f0ed"; } + +.fad.fa-wreath::after, .fa-duotone.fa-wreath::after { + content: "\f7e2\f7e2"; } + +.fad.fa-children::after, .fa-duotone.fa-children::after { + content: "\e4e1\e4e1"; } + +.fad.fa-meter-droplet::after, .fa-duotone.fa-meter-droplet::after { + content: "\e1ea\e1ea"; } + +.fad.fa-chalkboard::after, .fa-duotone.fa-chalkboard::after { + content: "\f51b\f51b"; } + +.fad.fa-blackboard::after, .fa-duotone.fa-blackboard::after { + content: "\f51b\f51b"; } + +.fad.fa-user-large-slash::after, .fa-duotone.fa-user-large-slash::after { + content: "\f4fa\f4fa"; } + +.fad.fa-user-alt-slash::after, .fa-duotone.fa-user-alt-slash::after { + content: "\f4fa\f4fa"; } + +.fad.fa-signal-strong::after, .fa-duotone.fa-signal-strong::after { + content: "\f68f\f68f"; } + +.fad.fa-signal-4::after, .fa-duotone.fa-signal-4::after { + content: "\f68f\f68f"; } + +.fad.fa-lollipop::after, .fa-duotone.fa-lollipop::after { + content: "\e424\e424"; } + +.fad.fa-lollypop::after, .fa-duotone.fa-lollypop::after { + content: "\e424\e424"; } + +.fad.fa-list-tree::after, .fa-duotone.fa-list-tree::after { + content: "\e1d2\e1d2"; } + +.fad.fa-envelope-open::after, .fa-duotone.fa-envelope-open::after { + content: "\f2b6\f2b6"; } + +.fad.fa-draw-circle::after, .fa-duotone.fa-draw-circle::after { + content: "\f5ed\f5ed"; } + +.fad.fa-cat-space::after, .fa-duotone.fa-cat-space::after { + content: "\e001\e001"; } + +.fad.fa-handshake-simple-slash::after, .fa-duotone.fa-handshake-simple-slash::after { + content: "\e05f\e05f"; } + +.fad.fa-handshake-alt-slash::after, .fa-duotone.fa-handshake-alt-slash::after { + content: "\e05f\e05f"; } + +.fad.fa-rabbit-running::after, .fa-duotone.fa-rabbit-running::after { + content: "\f709\f709"; } + +.fad.fa-rabbit-fast::after, .fa-duotone.fa-rabbit-fast::after { + content: "\f709\f709"; } + +.fad.fa-memo-pad::after, .fa-duotone.fa-memo-pad::after { + content: "\e1da\e1da"; } + +.fad.fa-mattress-pillow::after, .fa-duotone.fa-mattress-pillow::after { + content: "\e525\e525"; } + +.fad.fa-alarm-plus::after, .fa-duotone.fa-alarm-plus::after { + content: "\f844\f844"; } + +.fad.fa-alicorn::after, .fa-duotone.fa-alicorn::after { + content: "\f6b0\f6b0"; } + +.fad.fa-comment-question::after, .fa-duotone.fa-comment-question::after { + content: "\e14b\e14b"; } + +.fad.fa-gingerbread-man::after, .fa-duotone.fa-gingerbread-man::after { + content: "\f79d\f79d"; } + +.fad.fa-guarani-sign::after, .fa-duotone.fa-guarani-sign::after { + content: "\e19a\e19a"; } + +.fad.fa-burger-fries::after, .fa-duotone.fa-burger-fries::after { + content: "\e0cd\e0cd"; } + +.fad.fa-mug-tea::after, .fa-duotone.fa-mug-tea::after { + content: "\f875\f875"; } + +.fad.fa-border-top::after, .fa-duotone.fa-border-top::after { + content: "\f855\f855"; } + +.fad.fa-arrows-rotate::after, .fa-duotone.fa-arrows-rotate::after { + content: "\f021\f021"; } + +.fad.fa-refresh::after, .fa-duotone.fa-refresh::after { + content: "\f021\f021"; } + +.fad.fa-sync::after, .fa-duotone.fa-sync::after { + content: "\f021\f021"; } + +.fad.fa-circle-book-open::after, .fa-duotone.fa-circle-book-open::after { + content: "\e0ff\e0ff"; } + +.fad.fa-book-circle::after, .fa-duotone.fa-book-circle::after { + content: "\e0ff\e0ff"; } + +.fad.fa-arrows-to-dotted-line::after, .fa-duotone.fa-arrows-to-dotted-line::after { + content: "\e0a6\e0a6"; } + +.fad.fa-fire-extinguisher::after, .fa-duotone.fa-fire-extinguisher::after { + content: "\f134\f134"; } + +.fad.fa-garage-open::after, .fa-duotone.fa-garage-open::after { + content: "\e00b\e00b"; } + +.fad.fa-shelves-empty::after, .fa-duotone.fa-shelves-empty::after { + content: "\e246\e246"; } + +.fad.fa-cruzeiro-sign::after, .fa-duotone.fa-cruzeiro-sign::after { + content: "\e152\e152"; } + +.fad.fa-watch-apple::after, .fa-duotone.fa-watch-apple::after { + content: "\e2cb\e2cb"; } + +.fad.fa-watch-calculator::after, .fa-duotone.fa-watch-calculator::after { + content: "\f8f0\f8f0"; } + +.fad.fa-list-dropdown::after, .fa-duotone.fa-list-dropdown::after { + content: "\e1cf\e1cf"; } + +.fad.fa-cabinet-filing::after, .fa-duotone.fa-cabinet-filing::after { + content: "\f64b\f64b"; } + +.fad.fa-burger-soda::after, .fa-duotone.fa-burger-soda::after { + content: "\f858\f858"; } + +.fad.fa-square-arrow-up::after, .fa-duotone.fa-square-arrow-up::after { + content: "\f33c\f33c"; } + +.fad.fa-arrow-square-up::after, .fa-duotone.fa-arrow-square-up::after { + content: "\f33c\f33c"; } + +.fad.fa-greater-than-equal::after, .fa-duotone.fa-greater-than-equal::after { + content: "\f532\f532"; } + +.fad.fa-pallet-box::after, .fa-duotone.fa-pallet-box::after { + content: "\e208\e208"; } + +.fad.fa-face-confounded::after, .fa-duotone.fa-face-confounded::after { + content: "\e36c\e36c"; } + +.fad.fa-shield-halved::after, .fa-duotone.fa-shield-halved::after { + content: "\f3ed\f3ed"; } + +.fad.fa-shield-alt::after, .fa-duotone.fa-shield-alt::after { + content: "\f3ed\f3ed"; } + +.fad.fa-truck-plow::after, .fa-duotone.fa-truck-plow::after { + content: "\f7de\f7de"; } + +.fad.fa-book-atlas::after, .fa-duotone.fa-book-atlas::after { + content: "\f558\f558"; } + +.fad.fa-atlas::after, .fa-duotone.fa-atlas::after { + content: "\f558\f558"; } + +.fad.fa-virus::after, .fa-duotone.fa-virus::after { + content: "\e074\e074"; } + +.fad.fa-grid-round-2::after, .fa-duotone.fa-grid-round-2::after { + content: "\e5db\e5db"; } + +.fad.fa-comment-middle-top::after, .fa-duotone.fa-comment-middle-top::after { + content: "\e14a\e14a"; } + +.fad.fa-envelope-circle-check::after, .fa-duotone.fa-envelope-circle-check::after { + content: "\e4e8\e4e8"; } + +.fad.fa-layer-group::after, .fa-duotone.fa-layer-group::after { + content: "\f5fd\f5fd"; } + +.fad.fa-restroom-simple::after, .fa-duotone.fa-restroom-simple::after { + content: "\e23a\e23a"; } + +.fad.fa-arrows-to-dot::after, .fa-duotone.fa-arrows-to-dot::after { + content: "\e4be\e4be"; } + +.fad.fa-border-outer::after, .fa-duotone.fa-border-outer::after { + content: "\f851\f851"; } + +.fad.fa-hashtag-lock::after, .fa-duotone.fa-hashtag-lock::after { + content: "\e415\e415"; } + +.fad.fa-clock-two-thirty::after, .fa-duotone.fa-clock-two-thirty::after { + content: "\e35b\e35b"; } + +.fad.fa-archway::after, .fa-duotone.fa-archway::after { + content: "\f557\f557"; } + +.fad.fa-heart-circle-check::after, .fa-duotone.fa-heart-circle-check::after { + content: "\e4fd\e4fd"; } + +.fad.fa-house-chimney-crack::after, .fa-duotone.fa-house-chimney-crack::after { + content: "\f6f1\f6f1"; } + +.fad.fa-house-damage::after, .fa-duotone.fa-house-damage::after { + content: "\f6f1\f6f1"; } + +.fad.fa-file-zipper::after, .fa-duotone.fa-file-zipper::after { + content: "\f1c6\f1c6"; } + +.fad.fa-file-archive::after, .fa-duotone.fa-file-archive::after { + content: "\f1c6\f1c6"; } + +.fad.fa-heart-half::after, .fa-duotone.fa-heart-half::after { + content: "\e1ab\e1ab"; } + +.fad.fa-comment-check::after, .fa-duotone.fa-comment-check::after { + content: "\f4ac\f4ac"; } + +.fad.fa-square::after, .fa-duotone.fa-square::after { + content: "\f0c8\f0c8"; } + +.fad.fa-memo::after, .fa-duotone.fa-memo::after { + content: "\e1d8\e1d8"; } + +.fad.fa-martini-glass-empty::after, .fa-duotone.fa-martini-glass-empty::after { + content: "\f000\f000"; } + +.fad.fa-glass-martini::after, .fa-duotone.fa-glass-martini::after { + content: "\f000\f000"; } + +.fad.fa-couch::after, .fa-duotone.fa-couch::after { + content: "\f4b8\f4b8"; } + +.fad.fa-cedi-sign::after, .fa-duotone.fa-cedi-sign::after { + content: "\e0df\e0df"; } + +.fad.fa-italic::after, .fa-duotone.fa-italic::after { + content: "\f033\f033"; } + +.fad.fa-glass-citrus::after, .fa-duotone.fa-glass-citrus::after { + content: "\f869\f869"; } + +.fad.fa-calendar-lines-pen::after, .fa-duotone.fa-calendar-lines-pen::after { + content: "\e472\e472"; } + +.fad.fa-church::after, .fa-duotone.fa-church::after { + content: "\f51d\f51d"; } + +.fad.fa-person-snowmobiling::after, .fa-duotone.fa-person-snowmobiling::after { + content: "\f7d1\f7d1"; } + +.fad.fa-snowmobile::after, .fa-duotone.fa-snowmobile::after { + content: "\f7d1\f7d1"; } + +.fad.fa-face-hushed::after, .fa-duotone.fa-face-hushed::after { + content: "\e37b\e37b"; } + +.fad.fa-comments-dollar::after, .fa-duotone.fa-comments-dollar::after { + content: "\f653\f653"; } + +.fad.fa-pickaxe::after, .fa-duotone.fa-pickaxe::after { + content: "\e5bf\e5bf"; } + +.fad.fa-link-simple-slash::after, .fa-duotone.fa-link-simple-slash::after { + content: "\e1ce\e1ce"; } + +.fad.fa-democrat::after, .fa-duotone.fa-democrat::after { + content: "\f747\f747"; } + +.fad.fa-face-confused::after, .fa-duotone.fa-face-confused::after { + content: "\e36d\e36d"; } + +.fad.fa-pinball::after, .fa-duotone.fa-pinball::after { + content: "\e229\e229"; } + +.fad.fa-z::after, .fa-duotone.fa-z::after { + content: "\5a\5a"; } + +.fad.fa-person-skiing::after, .fa-duotone.fa-person-skiing::after { + content: "\f7c9\f7c9"; } + +.fad.fa-skiing::after, .fa-duotone.fa-skiing::after { + content: "\f7c9\f7c9"; } + +.fad.fa-deer::after, .fa-duotone.fa-deer::after { + content: "\f78e\f78e"; } + +.fad.fa-input-pipe::after, .fa-duotone.fa-input-pipe::after { + content: "\e1be\e1be"; } + +.fad.fa-road-lock::after, .fa-duotone.fa-road-lock::after { + content: "\e567\e567"; } + +.fad.fa-a::after, .fa-duotone.fa-a::after { + content: "\41\41"; } + +.fad.fa-bookmark-slash::after, .fa-duotone.fa-bookmark-slash::after { + content: "\e0c2\e0c2"; } + +.fad.fa-temperature-arrow-down::after, .fa-duotone.fa-temperature-arrow-down::after { + content: "\e03f\e03f"; } + +.fad.fa-temperature-down::after, .fa-duotone.fa-temperature-down::after { + content: "\e03f\e03f"; } + +.fad.fa-mace::after, .fa-duotone.fa-mace::after { + content: "\f6f8\f6f8"; } + +.fad.fa-feather-pointed::after, .fa-duotone.fa-feather-pointed::after { + content: "\f56b\f56b"; } + +.fad.fa-feather-alt::after, .fa-duotone.fa-feather-alt::after { + content: "\f56b\f56b"; } + +.fad.fa-sausage::after, .fa-duotone.fa-sausage::after { + content: "\f820\f820"; } + +.fad.fa-trash-can-clock::after, .fa-duotone.fa-trash-can-clock::after { + content: "\e2aa\e2aa"; } + +.fad.fa-p::after, .fa-duotone.fa-p::after { + content: "\50\50"; } + +.fad.fa-broom-wide::after, .fa-duotone.fa-broom-wide::after { + content: "\e5d1\e5d1"; } + +.fad.fa-snowflake::after, .fa-duotone.fa-snowflake::after { + content: "\f2dc\f2dc"; } + +.fad.fa-stomach::after, .fa-duotone.fa-stomach::after { + content: "\f623\f623"; } + +.fad.fa-newspaper::after, .fa-duotone.fa-newspaper::after { + content: "\f1ea\f1ea"; } + +.fad.fa-rectangle-ad::after, .fa-duotone.fa-rectangle-ad::after { + content: "\f641\f641"; } + +.fad.fa-ad::after, .fa-duotone.fa-ad::after { + content: "\f641\f641"; } + +.fad.fa-guitar-electric::after, .fa-duotone.fa-guitar-electric::after { + content: "\f8be\f8be"; } + +.fad.fa-arrow-turn-down-right::after, .fa-duotone.fa-arrow-turn-down-right::after { + content: "\e3d6\e3d6"; } + +.fad.fa-moon-cloud::after, .fa-duotone.fa-moon-cloud::after { + content: "\f754\f754"; } + +.fad.fa-bread-slice-butter::after, .fa-duotone.fa-bread-slice-butter::after { + content: "\e3e1\e3e1"; } + +.fad.fa-circle-arrow-right::after, .fa-duotone.fa-circle-arrow-right::after { + content: "\f0a9\f0a9"; } + +.fad.fa-arrow-circle-right::after, .fa-duotone.fa-arrow-circle-right::after { + content: "\f0a9\f0a9"; } + +.fad.fa-user-group-crown::after, .fa-duotone.fa-user-group-crown::after { + content: "\f6a5\f6a5"; } + +.fad.fa-users-crown::after, .fa-duotone.fa-users-crown::after { + content: "\f6a5\f6a5"; } + +.fad.fa-circle-i::after, .fa-duotone.fa-circle-i::after { + content: "\e111\e111"; } + +.fad.fa-toilet-paper-check::after, .fa-duotone.fa-toilet-paper-check::after { + content: "\e5b2\e5b2"; } + +.fad.fa-filter-circle-xmark::after, .fa-duotone.fa-filter-circle-xmark::after { + content: "\e17b\e17b"; } + +.fad.fa-locust::after, .fa-duotone.fa-locust::after { + content: "\e520\e520"; } + +.fad.fa-sort::after, .fa-duotone.fa-sort::after { + content: "\f0dc\f0dc"; } + +.fad.fa-unsorted::after, .fa-duotone.fa-unsorted::after { + content: "\f0dc\f0dc"; } + +.fad.fa-list-ol::after, .fa-duotone.fa-list-ol::after { + content: "\f0cb\f0cb"; } + +.fad.fa-list-1-2::after, .fa-duotone.fa-list-1-2::after { + content: "\f0cb\f0cb"; } + +.fad.fa-list-numeric::after, .fa-duotone.fa-list-numeric::after { + content: "\f0cb\f0cb"; } + +.fad.fa-chart-waterfall::after, .fa-duotone.fa-chart-waterfall::after { + content: "\e0eb\e0eb"; } + +.fad.fa-sparkle::after, .fa-duotone.fa-sparkle::after { + content: "\e5d6\e5d6"; } + +.fad.fa-face-party::after, .fa-duotone.fa-face-party::after { + content: "\e383\e383"; } + +.fad.fa-kidneys::after, .fa-duotone.fa-kidneys::after { + content: "\f5fb\f5fb"; } + +.fad.fa-wifi-exclamation::after, .fa-duotone.fa-wifi-exclamation::after { + content: "\e2cf\e2cf"; } + +.fad.fa-chart-network::after, .fa-duotone.fa-chart-network::after { + content: "\f78a\f78a"; } + +.fad.fa-person-dress-burst::after, .fa-duotone.fa-person-dress-burst::after { + content: "\e544\e544"; } + +.fad.fa-dice-d4::after, .fa-duotone.fa-dice-d4::after { + content: "\f6d0\f6d0"; } + +.fad.fa-money-check-dollar::after, .fa-duotone.fa-money-check-dollar::after { + content: "\f53d\f53d"; } + +.fad.fa-money-check-alt::after, .fa-duotone.fa-money-check-alt::after { + content: "\f53d\f53d"; } + +.fad.fa-vector-square::after, .fa-duotone.fa-vector-square::after { + content: "\f5cb\f5cb"; } + +.fad.fa-bread-slice::after, .fa-duotone.fa-bread-slice::after { + content: "\f7ec\f7ec"; } + +.fad.fa-language::after, .fa-duotone.fa-language::after { + content: "\f1ab\f1ab"; } + +.fad.fa-wheat-awn-slash::after, .fa-duotone.fa-wheat-awn-slash::after { + content: "\e338\e338"; } + +.fad.fa-face-kiss-wink-heart::after, .fa-duotone.fa-face-kiss-wink-heart::after { + content: "\f598\f598"; } + +.fad.fa-kiss-wink-heart::after, .fa-duotone.fa-kiss-wink-heart::after { + content: "\f598\f598"; } + +.fad.fa-dagger::after, .fa-duotone.fa-dagger::after { + content: "\f6cb\f6cb"; } + +.fad.fa-podium::after, .fa-duotone.fa-podium::after { + content: "\f680\f680"; } + +.fad.fa-memo-circle-check::after, .fa-duotone.fa-memo-circle-check::after { + content: "\e1d9\e1d9"; } + +.fad.fa-route-highway::after, .fa-duotone.fa-route-highway::after { + content: "\f61a\f61a"; } + +.fad.fa-down-to-line::after, .fa-duotone.fa-down-to-line::after { + content: "\f34a\f34a"; } + +.fad.fa-arrow-alt-to-bottom::after, .fa-duotone.fa-arrow-alt-to-bottom::after { + content: "\f34a\f34a"; } + +.fad.fa-filter::after, .fa-duotone.fa-filter::after { + content: "\f0b0\f0b0"; } + +.fad.fa-square-g::after, .fa-duotone.fa-square-g::after { + content: "\e271\e271"; } + +.fad.fa-circle-phone::after, .fa-duotone.fa-circle-phone::after { + content: "\e11b\e11b"; } + +.fad.fa-phone-circle::after, .fa-duotone.fa-phone-circle::after { + content: "\e11b\e11b"; } + +.fad.fa-clipboard-prescription::after, .fa-duotone.fa-clipboard-prescription::after { + content: "\f5e8\f5e8"; } + +.fad.fa-user-nurse-hair::after, .fa-duotone.fa-user-nurse-hair::after { + content: "\e45d\e45d"; } + +.fad.fa-question::after, .fa-duotone.fa-question::after { + content: "\3f\3f"; } + +.fad.fa-file-signature::after, .fa-duotone.fa-file-signature::after { + content: "\f573\f573"; } + +.fad.fa-toggle-large-on::after, .fa-duotone.fa-toggle-large-on::after { + content: "\e5b1\e5b1"; } + +.fad.fa-up-down-left-right::after, .fa-duotone.fa-up-down-left-right::after { + content: "\f0b2\f0b2"; } + +.fad.fa-arrows-alt::after, .fa-duotone.fa-arrows-alt::after { + content: "\f0b2\f0b2"; } + +.fad.fa-dryer-heat::after, .fa-duotone.fa-dryer-heat::after { + content: "\f862\f862"; } + +.fad.fa-dryer-alt::after, .fa-duotone.fa-dryer-alt::after { + content: "\f862\f862"; } + +.fad.fa-house-chimney-user::after, .fa-duotone.fa-house-chimney-user::after { + content: "\e065\e065"; } + +.fad.fa-hand-holding-heart::after, .fa-duotone.fa-hand-holding-heart::after { + content: "\f4be\f4be"; } + +.fad.fa-arrow-up-small-big::after, .fa-duotone.fa-arrow-up-small-big::after { + content: "\f88f\f88f"; } + +.fad.fa-sort-size-up-alt::after, .fa-duotone.fa-sort-size-up-alt::after { + content: "\f88f\f88f"; } + +.fad.fa-train-track::after, .fa-duotone.fa-train-track::after { + content: "\e453\e453"; } + +.fad.fa-puzzle-piece::after, .fa-duotone.fa-puzzle-piece::after { + content: "\f12e\f12e"; } + +.fad.fa-money-check::after, .fa-duotone.fa-money-check::after { + content: "\f53c\f53c"; } + +.fad.fa-star-half-stroke::after, .fa-duotone.fa-star-half-stroke::after { + content: "\f5c0\f5c0"; } + +.fad.fa-star-half-alt::after, .fa-duotone.fa-star-half-alt::after { + content: "\f5c0\f5c0"; } + +.fad.fa-file-exclamation::after, .fa-duotone.fa-file-exclamation::after { + content: "\f31a\f31a"; } + +.fad.fa-code::after, .fa-duotone.fa-code::after { + content: "\f121\f121"; } + +.fad.fa-whiskey-glass::after, .fa-duotone.fa-whiskey-glass::after { + content: "\f7a0\f7a0"; } + +.fad.fa-glass-whiskey::after, .fa-duotone.fa-glass-whiskey::after { + content: "\f7a0\f7a0"; } + +.fad.fa-moon-stars::after, .fa-duotone.fa-moon-stars::after { + content: "\f755\f755"; } + +.fad.fa-building-circle-exclamation::after, .fa-duotone.fa-building-circle-exclamation::after { + content: "\e4d3\e4d3"; } + +.fad.fa-clothes-hanger::after, .fa-duotone.fa-clothes-hanger::after { + content: "\e136\e136"; } + +.fad.fa-mobile-notch::after, .fa-duotone.fa-mobile-notch::after { + content: "\e1ee\e1ee"; } + +.fad.fa-mobile-iphone::after, .fa-duotone.fa-mobile-iphone::after { + content: "\e1ee\e1ee"; } + +.fad.fa-magnifying-glass-chart::after, .fa-duotone.fa-magnifying-glass-chart::after { + content: "\e522\e522"; } + +.fad.fa-arrow-up-right-from-square::after, .fa-duotone.fa-arrow-up-right-from-square::after { + content: "\f08e\f08e"; } + +.fad.fa-external-link::after, .fa-duotone.fa-external-link::after { + content: "\f08e\f08e"; } + +.fad.fa-cubes-stacked::after, .fa-duotone.fa-cubes-stacked::after { + content: "\e4e6\e4e6"; } + +.fad.fa-images-user::after, .fa-duotone.fa-images-user::after { + content: "\e1b9\e1b9"; } + +.fad.fa-won-sign::after, .fa-duotone.fa-won-sign::after { + content: "\f159\f159"; } + +.fad.fa-krw::after, .fa-duotone.fa-krw::after { + content: "\f159\f159"; } + +.fad.fa-won::after, .fa-duotone.fa-won::after { + content: "\f159\f159"; } + +.fad.fa-image-polaroid-user::after, .fa-duotone.fa-image-polaroid-user::after { + content: "\e1b6\e1b6"; } + +.fad.fa-virus-covid::after, .fa-duotone.fa-virus-covid::after { + content: "\e4a8\e4a8"; } + +.fad.fa-square-ellipsis::after, .fa-duotone.fa-square-ellipsis::after { + content: "\e26e\e26e"; } + +.fad.fa-pie::after, .fa-duotone.fa-pie::after { + content: "\f705\f705"; } + +.fad.fa-chess-knight-piece::after, .fa-duotone.fa-chess-knight-piece::after { + content: "\f442\f442"; } + +.fad.fa-chess-knight-alt::after, .fa-duotone.fa-chess-knight-alt::after { + content: "\f442\f442"; } + +.fad.fa-austral-sign::after, .fa-duotone.fa-austral-sign::after { + content: "\e0a9\e0a9"; } + +.fad.fa-cloud-plus::after, .fa-duotone.fa-cloud-plus::after { + content: "\e35e\e35e"; } + +.fad.fa-f::after, .fa-duotone.fa-f::after { + content: "\46\46"; } + +.fad.fa-leaf::after, .fa-duotone.fa-leaf::after { + content: "\f06c\f06c"; } + +.fad.fa-bed-bunk::after, .fa-duotone.fa-bed-bunk::after { + content: "\f8f8\f8f8"; } + +.fad.fa-road::after, .fa-duotone.fa-road::after { + content: "\f018\f018"; } + +.fad.fa-taxi::after, .fa-duotone.fa-taxi::after { + content: "\f1ba\f1ba"; } + +.fad.fa-cab::after, .fa-duotone.fa-cab::after { + content: "\f1ba\f1ba"; } + +.fad.fa-person-circle-plus::after, .fa-duotone.fa-person-circle-plus::after { + content: "\e541\e541"; } + +.fad.fa-chart-pie::after, .fa-duotone.fa-chart-pie::after { + content: "\f200\f200"; } + +.fad.fa-pie-chart::after, .fa-duotone.fa-pie-chart::after { + content: "\f200\f200"; } + +.fad.fa-bolt-lightning::after, .fa-duotone.fa-bolt-lightning::after { + content: "\e0b7\e0b7"; } + +.fad.fa-clock-eight::after, .fa-duotone.fa-clock-eight::after { + content: "\e345\e345"; } + +.fad.fa-sack-xmark::after, .fa-duotone.fa-sack-xmark::after { + content: "\e56a\e56a"; } + +.fad.fa-file-excel::after, .fa-duotone.fa-file-excel::after { + content: "\f1c3\f1c3"; } + +.fad.fa-file-contract::after, .fa-duotone.fa-file-contract::after { + content: "\f56c\f56c"; } + +.fad.fa-fish-fins::after, .fa-duotone.fa-fish-fins::after { + content: "\e4f2\e4f2"; } + +.fad.fa-circle-q::after, .fa-duotone.fa-circle-q::after { + content: "\e11e\e11e"; } + +.fad.fa-building-flag::after, .fa-duotone.fa-building-flag::after { + content: "\e4d5\e4d5"; } + +.fad.fa-face-grin-beam::after, .fa-duotone.fa-face-grin-beam::after { + content: "\f582\f582"; } + +.fad.fa-grin-beam::after, .fa-duotone.fa-grin-beam::after { + content: "\f582\f582"; } + +.fad.fa-object-ungroup::after, .fa-duotone.fa-object-ungroup::after { + content: "\f248\f248"; } + +.fad.fa-face-disguise::after, .fa-duotone.fa-face-disguise::after { + content: "\e370\e370"; } + +.fad.fa-circle-arrow-down-right::after, .fa-duotone.fa-circle-arrow-down-right::after { + content: "\e0fa\e0fa"; } + +.fad.fa-alien-8bit::after, .fa-duotone.fa-alien-8bit::after { + content: "\f8f6\f8f6"; } + +.fad.fa-alien-monster::after, .fa-duotone.fa-alien-monster::after { + content: "\f8f6\f8f6"; } + +.fad.fa-hand-point-ribbon::after, .fa-duotone.fa-hand-point-ribbon::after { + content: "\e1a6\e1a6"; } + +.fad.fa-poop::after, .fa-duotone.fa-poop::after { + content: "\f619\f619"; } + +.fad.fa-object-exclude::after, .fa-duotone.fa-object-exclude::after { + content: "\e49c\e49c"; } + +.fad.fa-telescope::after, .fa-duotone.fa-telescope::after { + content: "\e03e\e03e"; } + +.fad.fa-location-pin::after, .fa-duotone.fa-location-pin::after { + content: "\f041\f041"; } + +.fad.fa-map-marker::after, .fa-duotone.fa-map-marker::after { + content: "\f041\f041"; } + +.fad.fa-square-list::after, .fa-duotone.fa-square-list::after { + content: "\e489\e489"; } + +.fad.fa-kaaba::after, .fa-duotone.fa-kaaba::after { + content: "\f66b\f66b"; } + +.fad.fa-toilet-paper::after, .fa-duotone.fa-toilet-paper::after { + content: "\f71e\f71e"; } + +.fad.fa-helmet-safety::after, .fa-duotone.fa-helmet-safety::after { + content: "\f807\f807"; } + +.fad.fa-hard-hat::after, .fa-duotone.fa-hard-hat::after { + content: "\f807\f807"; } + +.fad.fa-hat-hard::after, .fa-duotone.fa-hat-hard::after { + content: "\f807\f807"; } + +.fad.fa-comment-code::after, .fa-duotone.fa-comment-code::after { + content: "\e147\e147"; } + +.fad.fa-sim-cards::after, .fa-duotone.fa-sim-cards::after { + content: "\e251\e251"; } + +.fad.fa-starship::after, .fa-duotone.fa-starship::after { + content: "\e039\e039"; } + +.fad.fa-eject::after, .fa-duotone.fa-eject::after { + content: "\f052\f052"; } + +.fad.fa-circle-right::after, .fa-duotone.fa-circle-right::after { + content: "\f35a\f35a"; } + +.fad.fa-arrow-alt-circle-right::after, .fa-duotone.fa-arrow-alt-circle-right::after { + content: "\f35a\f35a"; } + +.fad.fa-plane-circle-check::after, .fa-duotone.fa-plane-circle-check::after { + content: "\e555\e555"; } + +.fad.fa-seal::after, .fa-duotone.fa-seal::after { + content: "\e241\e241"; } + +.fad.fa-user-cowboy::after, .fa-duotone.fa-user-cowboy::after { + content: "\f8ea\f8ea"; } + +.fad.fa-hexagon-vertical-nft::after, .fa-duotone.fa-hexagon-vertical-nft::after { + content: "\e505\e505"; } + +.fad.fa-face-rolling-eyes::after, .fa-duotone.fa-face-rolling-eyes::after { + content: "\f5a5\f5a5"; } + +.fad.fa-meh-rolling-eyes::after, .fa-duotone.fa-meh-rolling-eyes::after { + content: "\f5a5\f5a5"; } + +.fad.fa-bread-loaf::after, .fa-duotone.fa-bread-loaf::after { + content: "\f7eb\f7eb"; } + +.fad.fa-rings-wedding::after, .fa-duotone.fa-rings-wedding::after { + content: "\f81b\f81b"; } + +.fad.fa-object-group::after, .fa-duotone.fa-object-group::after { + content: "\f247\f247"; } + +.fad.fa-french-fries::after, .fa-duotone.fa-french-fries::after { + content: "\f803\f803"; } + +.fad.fa-chart-line::after, .fa-duotone.fa-chart-line::after { + content: "\f201\f201"; } + +.fad.fa-line-chart::after, .fa-duotone.fa-line-chart::after { + content: "\f201\f201"; } + +.fad.fa-calendar-arrow-down::after, .fa-duotone.fa-calendar-arrow-down::after { + content: "\e0d0\e0d0"; } + +.fad.fa-calendar-download::after, .fa-duotone.fa-calendar-download::after { + content: "\e0d0\e0d0"; } + +.fad.fa-send-back::after, .fa-duotone.fa-send-back::after { + content: "\f87e\f87e"; } + +.fad.fa-mask-ventilator::after, .fa-duotone.fa-mask-ventilator::after { + content: "\e524\e524"; } + +.fad.fa-signature-lock::after, .fa-duotone.fa-signature-lock::after { + content: "\e3ca\e3ca"; } + +.fad.fa-arrow-right::after, .fa-duotone.fa-arrow-right::after { + content: "\f061\f061"; } + +.fad.fa-signs-post::after, .fa-duotone.fa-signs-post::after { + content: "\f277\f277"; } + +.fad.fa-map-signs::after, .fa-duotone.fa-map-signs::after { + content: "\f277\f277"; } + +.fad.fa-octagon-plus::after, .fa-duotone.fa-octagon-plus::after { + content: "\f301\f301"; } + +.fad.fa-plus-octagon::after, .fa-duotone.fa-plus-octagon::after { + content: "\f301\f301"; } + +.fad.fa-cash-register::after, .fa-duotone.fa-cash-register::after { + content: "\f788\f788"; } + +.fad.fa-person-circle-question::after, .fa-duotone.fa-person-circle-question::after { + content: "\e542\e542"; } + +.fad.fa-melon-slice::after, .fa-duotone.fa-melon-slice::after { + content: "\e311\e311"; } + +.fad.fa-space-station-moon::after, .fa-duotone.fa-space-station-moon::after { + content: "\e033\e033"; } + +.fad.fa-message-smile::after, .fa-duotone.fa-message-smile::after { + content: "\f4aa\f4aa"; } + +.fad.fa-comment-alt-smile::after, .fa-duotone.fa-comment-alt-smile::after { + content: "\f4aa\f4aa"; } + +.fad.fa-cup-straw::after, .fa-duotone.fa-cup-straw::after { + content: "\e363\e363"; } + +.fad.fa-left-from-line::after, .fa-duotone.fa-left-from-line::after { + content: "\f348\f348"; } + +.fad.fa-arrow-alt-from-right::after, .fa-duotone.fa-arrow-alt-from-right::after { + content: "\f348\f348"; } + +.fad.fa-h::after, .fa-duotone.fa-h::after { + content: "\48\48"; } + +.fad.fa-basket-shopping-simple::after, .fa-duotone.fa-basket-shopping-simple::after { + content: "\e0af\e0af"; } + +.fad.fa-shopping-basket-alt::after, .fa-duotone.fa-shopping-basket-alt::after { + content: "\e0af\e0af"; } + +.fad.fa-hands-holding-heart::after, .fa-duotone.fa-hands-holding-heart::after { + content: "\f4c3\f4c3"; } + +.fad.fa-hands-heart::after, .fa-duotone.fa-hands-heart::after { + content: "\f4c3\f4c3"; } + +.fad.fa-clock-nine::after, .fa-duotone.fa-clock-nine::after { + content: "\e34c\e34c"; } + +.fad.fa-tarp::after, .fa-duotone.fa-tarp::after { + content: "\e57b\e57b"; } + +.fad.fa-face-sleepy::after, .fa-duotone.fa-face-sleepy::after { + content: "\e38e\e38e"; } + +.fad.fa-hand-horns::after, .fa-duotone.fa-hand-horns::after { + content: "\e1a9\e1a9"; } + +.fad.fa-screwdriver-wrench::after, .fa-duotone.fa-screwdriver-wrench::after { + content: "\f7d9\f7d9"; } + +.fad.fa-tools::after, .fa-duotone.fa-tools::after { + content: "\f7d9\f7d9"; } + +.fad.fa-arrows-to-eye::after, .fa-duotone.fa-arrows-to-eye::after { + content: "\e4bf\e4bf"; } + +.fad.fa-circle-three-quarters::after, .fa-duotone.fa-circle-three-quarters::after { + content: "\e125\e125"; } + +.fad.fa-trophy-star::after, .fa-duotone.fa-trophy-star::after { + content: "\f2eb\f2eb"; } + +.fad.fa-trophy-alt::after, .fa-duotone.fa-trophy-alt::after { + content: "\f2eb\f2eb"; } + +.fad.fa-plug-circle-bolt::after, .fa-duotone.fa-plug-circle-bolt::after { + content: "\e55b\e55b"; } + +.fad.fa-face-thermometer::after, .fa-duotone.fa-face-thermometer::after { + content: "\e39a\e39a"; } + +.fad.fa-grid-round-4::after, .fa-duotone.fa-grid-round-4::after { + content: "\e5dd\e5dd"; } + +.fad.fa-shirt-running::after, .fa-duotone.fa-shirt-running::after { + content: "\e3c8\e3c8"; } + +.fad.fa-book-circle-arrow-up::after, .fa-duotone.fa-book-circle-arrow-up::after { + content: "\e0bd\e0bd"; } + +.fad.fa-face-nauseated::after, .fa-duotone.fa-face-nauseated::after { + content: "\e381\e381"; } + +.fad.fa-heart::after, .fa-duotone.fa-heart::after { + content: "\f004\f004"; } + +.fad.fa-file-chart-pie::after, .fa-duotone.fa-file-chart-pie::after { + content: "\f65a\f65a"; } + +.fad.fa-mars-and-venus::after, .fa-duotone.fa-mars-and-venus::after { + content: "\f224\f224"; } + +.fad.fa-house-user::after, .fa-duotone.fa-house-user::after { + content: "\e1b0\e1b0"; } + +.fad.fa-home-user::after, .fa-duotone.fa-home-user::after { + content: "\e1b0\e1b0"; } + +.fad.fa-circle-arrow-down-left::after, .fa-duotone.fa-circle-arrow-down-left::after { + content: "\e0f9\e0f9"; } + +.fad.fa-dumpster-fire::after, .fa-duotone.fa-dumpster-fire::after { + content: "\f794\f794"; } + +.fad.fa-hexagon-minus::after, .fa-duotone.fa-hexagon-minus::after { + content: "\f307\f307"; } + +.fad.fa-minus-hexagon::after, .fa-duotone.fa-minus-hexagon::after { + content: "\f307\f307"; } + +.fad.fa-left-to-line::after, .fa-duotone.fa-left-to-line::after { + content: "\f34b\f34b"; } + +.fad.fa-arrow-alt-to-left::after, .fa-duotone.fa-arrow-alt-to-left::after { + content: "\f34b\f34b"; } + +.fad.fa-house-crack::after, .fa-duotone.fa-house-crack::after { + content: "\e3b1\e3b1"; } + +.fad.fa-paw-simple::after, .fa-duotone.fa-paw-simple::after { + content: "\f701\f701"; } + +.fad.fa-paw-alt::after, .fa-duotone.fa-paw-alt::after { + content: "\f701\f701"; } + +.fad.fa-arrow-left-long-to-line::after, .fa-duotone.fa-arrow-left-long-to-line::after { + content: "\e3d4\e3d4"; } + +.fad.fa-brackets-round::after, .fa-duotone.fa-brackets-round::after { + content: "\e0c5\e0c5"; } + +.fad.fa-parentheses::after, .fa-duotone.fa-parentheses::after { + content: "\e0c5\e0c5"; } + +.fad.fa-martini-glass-citrus::after, .fa-duotone.fa-martini-glass-citrus::after { + content: "\f561\f561"; } + +.fad.fa-cocktail::after, .fa-duotone.fa-cocktail::after { + content: "\f561\f561"; } + +.fad.fa-user-shakespeare::after, .fa-duotone.fa-user-shakespeare::after { + content: "\e2c2\e2c2"; } + +.fad.fa-arrow-right-to-arc::after, .fa-duotone.fa-arrow-right-to-arc::after { + content: "\e4b2\e4b2"; } + +.fad.fa-face-surprise::after, .fa-duotone.fa-face-surprise::after { + content: "\f5c2\f5c2"; } + +.fad.fa-surprise::after, .fa-duotone.fa-surprise::after { + content: "\f5c2\f5c2"; } + +.fad.fa-bottle-water::after, .fa-duotone.fa-bottle-water::after { + content: "\e4c5\e4c5"; } + +.fad.fa-circle-pause::after, .fa-duotone.fa-circle-pause::after { + content: "\f28b\f28b"; } + +.fad.fa-pause-circle::after, .fa-duotone.fa-pause-circle::after { + content: "\f28b\f28b"; } + +.fad.fa-gauge-circle-plus::after, .fa-duotone.fa-gauge-circle-plus::after { + content: "\e498\e498"; } + +.fad.fa-folders::after, .fa-duotone.fa-folders::after { + content: "\f660\f660"; } + +.fad.fa-angel::after, .fa-duotone.fa-angel::after { + content: "\f779\f779"; } + +.fad.fa-value-absolute::after, .fa-duotone.fa-value-absolute::after { + content: "\f6a6\f6a6"; } + +.fad.fa-rabbit::after, .fa-duotone.fa-rabbit::after { + content: "\f708\f708"; } + +.fad.fa-toilet-paper-slash::after, .fa-duotone.fa-toilet-paper-slash::after { + content: "\e072\e072"; } + +.fad.fa-circle-euro::after, .fa-duotone.fa-circle-euro::after { + content: "\e5ce\e5ce"; } + +.fad.fa-apple-whole::after, .fa-duotone.fa-apple-whole::after { + content: "\f5d1\f5d1"; } + +.fad.fa-apple-alt::after, .fa-duotone.fa-apple-alt::after { + content: "\f5d1\f5d1"; } + +.fad.fa-kitchen-set::after, .fa-duotone.fa-kitchen-set::after { + content: "\e51a\e51a"; } + +.fad.fa-diamond-half::after, .fa-duotone.fa-diamond-half::after { + content: "\e5b7\e5b7"; } + +.fad.fa-lock-keyhole::after, .fa-duotone.fa-lock-keyhole::after { + content: "\f30d\f30d"; } + +.fad.fa-lock-alt::after, .fa-duotone.fa-lock-alt::after { + content: "\f30d\f30d"; } + +.fad.fa-r::after, .fa-duotone.fa-r::after { + content: "\52\52"; } + +.fad.fa-temperature-quarter::after, .fa-duotone.fa-temperature-quarter::after { + content: "\f2ca\f2ca"; } + +.fad.fa-temperature-1::after, .fa-duotone.fa-temperature-1::after { + content: "\f2ca\f2ca"; } + +.fad.fa-thermometer-1::after, .fa-duotone.fa-thermometer-1::after { + content: "\f2ca\f2ca"; } + +.fad.fa-thermometer-quarter::after, .fa-duotone.fa-thermometer-quarter::after { + content: "\f2ca\f2ca"; } + +.fad.fa-square-info::after, .fa-duotone.fa-square-info::after { + content: "\f30f\f30f"; } + +.fad.fa-info-square::after, .fa-duotone.fa-info-square::after { + content: "\f30f\f30f"; } + +.fad.fa-wifi-slash::after, .fa-duotone.fa-wifi-slash::after { + content: "\f6ac\f6ac"; } + +.fad.fa-toilet-paper-xmark::after, .fa-duotone.fa-toilet-paper-xmark::after { + content: "\e5b3\e5b3"; } + +.fad.fa-hands-holding-dollar::after, .fa-duotone.fa-hands-holding-dollar::after { + content: "\f4c5\f4c5"; } + +.fad.fa-hands-usd::after, .fa-duotone.fa-hands-usd::after { + content: "\f4c5\f4c5"; } + +.fad.fa-cube::after, .fa-duotone.fa-cube::after { + content: "\f1b2\f1b2"; } + +.fad.fa-arrow-down-triangle-square::after, .fa-duotone.fa-arrow-down-triangle-square::after { + content: "\f888\f888"; } + +.fad.fa-sort-shapes-down::after, .fa-duotone.fa-sort-shapes-down::after { + content: "\f888\f888"; } + +.fad.fa-bitcoin-sign::after, .fa-duotone.fa-bitcoin-sign::after { + content: "\e0b4\e0b4"; } + +.fad.fa-shutters::after, .fa-duotone.fa-shutters::after { + content: "\e449\e449"; } + +.fad.fa-shield-dog::after, .fa-duotone.fa-shield-dog::after { + content: "\e573\e573"; } + +.fad.fa-solar-panel::after, .fa-duotone.fa-solar-panel::after { + content: "\f5ba\f5ba"; } + +.fad.fa-lock-open::after, .fa-duotone.fa-lock-open::after { + content: "\f3c1\f3c1"; } + +.fad.fa-table-tree::after, .fa-duotone.fa-table-tree::after { + content: "\e293\e293"; } + +.fad.fa-house-chimney-heart::after, .fa-duotone.fa-house-chimney-heart::after { + content: "\e1b2\e1b2"; } + +.fad.fa-tally-3::after, .fa-duotone.fa-tally-3::after { + content: "\e296\e296"; } + +.fad.fa-elevator::after, .fa-duotone.fa-elevator::after { + content: "\e16d\e16d"; } + +.fad.fa-money-bill-transfer::after, .fa-duotone.fa-money-bill-transfer::after { + content: "\e528\e528"; } + +.fad.fa-money-bill-trend-up::after, .fa-duotone.fa-money-bill-trend-up::after { + content: "\e529\e529"; } + +.fad.fa-house-flood-water-circle-arrow-right::after, .fa-duotone.fa-house-flood-water-circle-arrow-right::after { + content: "\e50f\e50f"; } + +.fad.fa-square-poll-horizontal::after, .fa-duotone.fa-square-poll-horizontal::after { + content: "\f682\f682"; } + +.fad.fa-poll-h::after, .fa-duotone.fa-poll-h::after { + content: "\f682\f682"; } + +.fad.fa-circle::after, .fa-duotone.fa-circle::after { + content: "\f111\f111"; } + +.fad.fa-cart-circle-exclamation::after, .fa-duotone.fa-cart-circle-exclamation::after { + content: "\e3f2\e3f2"; } + +.fad.fa-sword::after, .fa-duotone.fa-sword::after { + content: "\f71c\f71c"; } + +.fad.fa-backward-fast::after, .fa-duotone.fa-backward-fast::after { + content: "\f049\f049"; } + +.fad.fa-fast-backward::after, .fa-duotone.fa-fast-backward::after { + content: "\f049\f049"; } + +.fad.fa-recycle::after, .fa-duotone.fa-recycle::after { + content: "\f1b8\f1b8"; } + +.fad.fa-user-astronaut::after, .fa-duotone.fa-user-astronaut::after { + content: "\f4fb\f4fb"; } + +.fad.fa-interrobang::after, .fa-duotone.fa-interrobang::after { + content: "\e5ba\e5ba"; } + +.fad.fa-plane-slash::after, .fa-duotone.fa-plane-slash::after { + content: "\e069\e069"; } + +.fad.fa-circle-dashed::after, .fa-duotone.fa-circle-dashed::after { + content: "\e105\e105"; } + +.fad.fa-trademark::after, .fa-duotone.fa-trademark::after { + content: "\f25c\f25c"; } + +.fad.fa-basketball::after, .fa-duotone.fa-basketball::after { + content: "\f434\f434"; } + +.fad.fa-basketball-ball::after, .fa-duotone.fa-basketball-ball::after { + content: "\f434\f434"; } + +.fad.fa-fork-knife::after, .fa-duotone.fa-fork-knife::after { + content: "\f2e6\f2e6"; } + +.fad.fa-utensils-alt::after, .fa-duotone.fa-utensils-alt::after { + content: "\f2e6\f2e6"; } + +.fad.fa-satellite-dish::after, .fa-duotone.fa-satellite-dish::after { + content: "\f7c0\f7c0"; } + +.fad.fa-badge-check::after, .fa-duotone.fa-badge-check::after { + content: "\f336\f336"; } + +.fad.fa-circle-up::after, .fa-duotone.fa-circle-up::after { + content: "\f35b\f35b"; } + +.fad.fa-arrow-alt-circle-up::after, .fa-duotone.fa-arrow-alt-circle-up::after { + content: "\f35b\f35b"; } + +.fad.fa-slider::after, .fa-duotone.fa-slider::after { + content: "\e252\e252"; } + +.fad.fa-mobile-screen-button::after, .fa-duotone.fa-mobile-screen-button::after { + content: "\f3cd\f3cd"; } + +.fad.fa-mobile-alt::after, .fa-duotone.fa-mobile-alt::after { + content: "\f3cd\f3cd"; } + +.fad.fa-clock-one-thirty::after, .fa-duotone.fa-clock-one-thirty::after { + content: "\e34f\e34f"; } + +.fad.fa-inbox-out::after, .fa-duotone.fa-inbox-out::after { + content: "\f311\f311"; } + +.fad.fa-inbox-arrow-up::after, .fa-duotone.fa-inbox-arrow-up::after { + content: "\f311\f311"; } + +.fad.fa-cloud-slash::after, .fa-duotone.fa-cloud-slash::after { + content: "\e137\e137"; } + +.fad.fa-volume-high::after, .fa-duotone.fa-volume-high::after { + content: "\f028\f028"; } + +.fad.fa-volume-up::after, .fa-duotone.fa-volume-up::after { + content: "\f028\f028"; } + +.fad.fa-users-rays::after, .fa-duotone.fa-users-rays::after { + content: "\e593\e593"; } + +.fad.fa-wallet::after, .fa-duotone.fa-wallet::after { + content: "\f555\f555"; } + +.fad.fa-octagon-check::after, .fa-duotone.fa-octagon-check::after { + content: "\e426\e426"; } + +.fad.fa-flatbread-stuffed::after, .fa-duotone.fa-flatbread-stuffed::after { + content: "\e40c\e40c"; } + +.fad.fa-clipboard-check::after, .fa-duotone.fa-clipboard-check::after { + content: "\f46c\f46c"; } + +.fad.fa-cart-circle-plus::after, .fa-duotone.fa-cart-circle-plus::after { + content: "\e3f3\e3f3"; } + +.fad.fa-truck-clock::after, .fa-duotone.fa-truck-clock::after { + content: "\f48c\f48c"; } + +.fad.fa-shipping-timed::after, .fa-duotone.fa-shipping-timed::after { + content: "\f48c\f48c"; } + +.fad.fa-pool-8-ball::after, .fa-duotone.fa-pool-8-ball::after { + content: "\e3c5\e3c5"; } + +.fad.fa-file-audio::after, .fa-duotone.fa-file-audio::after { + content: "\f1c7\f1c7"; } + +.fad.fa-turn-down-left::after, .fa-duotone.fa-turn-down-left::after { + content: "\e331\e331"; } + +.fad.fa-lock-hashtag::after, .fa-duotone.fa-lock-hashtag::after { + content: "\e423\e423"; } + +.fad.fa-chart-radar::after, .fa-duotone.fa-chart-radar::after { + content: "\e0e7\e0e7"; } + +.fad.fa-staff::after, .fa-duotone.fa-staff::after { + content: "\f71b\f71b"; } + +.fad.fa-burger::after, .fa-duotone.fa-burger::after { + content: "\f805\f805"; } + +.fad.fa-hamburger::after, .fa-duotone.fa-hamburger::after { + content: "\f805\f805"; } + +.fad.fa-utility-pole::after, .fa-duotone.fa-utility-pole::after { + content: "\e2c3\e2c3"; } + +.fad.fa-transporter-6::after, .fa-duotone.fa-transporter-6::after { + content: "\e2a7\e2a7"; } + +.fad.fa-wrench::after, .fa-duotone.fa-wrench::after { + content: "\f0ad\f0ad"; } + +.fad.fa-bugs::after, .fa-duotone.fa-bugs::after { + content: "\e4d0\e4d0"; } + +.fad.fa-vector-polygon::after, .fa-duotone.fa-vector-polygon::after { + content: "\e2c7\e2c7"; } + +.fad.fa-diagram-nested::after, .fa-duotone.fa-diagram-nested::after { + content: "\e157\e157"; } + +.fad.fa-rupee-sign::after, .fa-duotone.fa-rupee-sign::after { + content: "\f156\f156"; } + +.fad.fa-rupee::after, .fa-duotone.fa-rupee::after { + content: "\f156\f156"; } + +.fad.fa-file-image::after, .fa-duotone.fa-file-image::after { + content: "\f1c5\f1c5"; } + +.fad.fa-circle-question::after, .fa-duotone.fa-circle-question::after { + content: "\f059\f059"; } + +.fad.fa-question-circle::after, .fa-duotone.fa-question-circle::after { + content: "\f059\f059"; } + +.fad.fa-image-user::after, .fa-duotone.fa-image-user::after { + content: "\e1b8\e1b8"; } + +.fad.fa-buoy::after, .fa-duotone.fa-buoy::after { + content: "\e5b5\e5b5"; } + +.fad.fa-plane-departure::after, .fa-duotone.fa-plane-departure::after { + content: "\f5b0\f5b0"; } + +.fad.fa-handshake-slash::after, .fa-duotone.fa-handshake-slash::after { + content: "\e060\e060"; } + +.fad.fa-book-bookmark::after, .fa-duotone.fa-book-bookmark::after { + content: "\e0bb\e0bb"; } + +.fad.fa-border-center-h::after, .fa-duotone.fa-border-center-h::after { + content: "\f89c\f89c"; } + +.fad.fa-can-food::after, .fa-duotone.fa-can-food::after { + content: "\e3e6\e3e6"; } + +.fad.fa-typewriter::after, .fa-duotone.fa-typewriter::after { + content: "\f8e7\f8e7"; } + +.fad.fa-arrow-right-from-arc::after, .fa-duotone.fa-arrow-right-from-arc::after { + content: "\e4b1\e4b1"; } + +.fad.fa-circle-k::after, .fa-duotone.fa-circle-k::after { + content: "\e113\e113"; } + +.fad.fa-face-hand-over-mouth::after, .fa-duotone.fa-face-hand-over-mouth::after { + content: "\e378\e378"; } + +.fad.fa-popcorn::after, .fa-duotone.fa-popcorn::after { + content: "\f819\f819"; } + +.fad.fa-house-water::after, .fa-duotone.fa-house-water::after { + content: "\f74f\f74f"; } + +.fad.fa-house-flood::after, .fa-duotone.fa-house-flood::after { + content: "\f74f\f74f"; } + +.fad.fa-object-subtract::after, .fa-duotone.fa-object-subtract::after { + content: "\e49e\e49e"; } + +.fad.fa-code-branch::after, .fa-duotone.fa-code-branch::after { + content: "\f126\f126"; } + +.fad.fa-warehouse-full::after, .fa-duotone.fa-warehouse-full::after { + content: "\f495\f495"; } + +.fad.fa-warehouse-alt::after, .fa-duotone.fa-warehouse-alt::after { + content: "\f495\f495"; } + +.fad.fa-hat-cowboy::after, .fa-duotone.fa-hat-cowboy::after { + content: "\f8c0\f8c0"; } + +.fad.fa-bridge::after, .fa-duotone.fa-bridge::after { + content: "\e4c8\e4c8"; } + +.fad.fa-phone-flip::after, .fa-duotone.fa-phone-flip::after { + content: "\f879\f879"; } + +.fad.fa-phone-alt::after, .fa-duotone.fa-phone-alt::after { + content: "\f879\f879"; } + +.fad.fa-arrow-down-from-dotted-line::after, .fa-duotone.fa-arrow-down-from-dotted-line::after { + content: "\e090\e090"; } + +.fad.fa-file-doc::after, .fa-duotone.fa-file-doc::after { + content: "\e5ed\e5ed"; } + +.fad.fa-square-quarters::after, .fa-duotone.fa-square-quarters::after { + content: "\e44e\e44e"; } + +.fad.fa-truck-front::after, .fa-duotone.fa-truck-front::after { + content: "\e2b7\e2b7"; } + +.fad.fa-cat::after, .fa-duotone.fa-cat::after { + content: "\f6be\f6be"; } + +.fad.fa-trash-xmark::after, .fa-duotone.fa-trash-xmark::after { + content: "\e2b4\e2b4"; } + +.fad.fa-circle-caret-left::after, .fa-duotone.fa-circle-caret-left::after { + content: "\f32e\f32e"; } + +.fad.fa-caret-circle-left::after, .fa-duotone.fa-caret-circle-left::after { + content: "\f32e\f32e"; } + +.fad.fa-files::after, .fa-duotone.fa-files::after { + content: "\e178\e178"; } + +.fad.fa-anchor-circle-exclamation::after, .fa-duotone.fa-anchor-circle-exclamation::after { + content: "\e4ab\e4ab"; } + +.fad.fa-face-clouds::after, .fa-duotone.fa-face-clouds::after { + content: "\e47d\e47d"; } + +.fad.fa-user-crown::after, .fa-duotone.fa-user-crown::after { + content: "\f6a4\f6a4"; } + +.fad.fa-truck-field::after, .fa-duotone.fa-truck-field::after { + content: "\e58d\e58d"; } + +.fad.fa-route::after, .fa-duotone.fa-route::after { + content: "\f4d7\f4d7"; } + +.fad.fa-cart-circle-check::after, .fa-duotone.fa-cart-circle-check::after { + content: "\e3f1\e3f1"; } + +.fad.fa-clipboard-question::after, .fa-duotone.fa-clipboard-question::after { + content: "\e4e3\e4e3"; } + +.fad.fa-panorama::after, .fa-duotone.fa-panorama::after { + content: "\e209\e209"; } + +.fad.fa-comment-medical::after, .fa-duotone.fa-comment-medical::after { + content: "\f7f5\f7f5"; } + +.fad.fa-teeth-open::after, .fa-duotone.fa-teeth-open::after { + content: "\f62f\f62f"; } + +.fad.fa-user-tie-hair-long::after, .fa-duotone.fa-user-tie-hair-long::after { + content: "\e460\e460"; } + +.fad.fa-file-circle-minus::after, .fa-duotone.fa-file-circle-minus::after { + content: "\e4ed\e4ed"; } + +.fad.fa-head-side-medical::after, .fa-duotone.fa-head-side-medical::after { + content: "\f809\f809"; } + +.fad.fa-tags::after, .fa-duotone.fa-tags::after { + content: "\f02c\f02c"; } + +.fad.fa-wine-glass::after, .fa-duotone.fa-wine-glass::after { + content: "\f4e3\f4e3"; } + +.fad.fa-forward-fast::after, .fa-duotone.fa-forward-fast::after { + content: "\f050\f050"; } + +.fad.fa-fast-forward::after, .fa-duotone.fa-fast-forward::after { + content: "\f050\f050"; } + +.fad.fa-face-meh-blank::after, .fa-duotone.fa-face-meh-blank::after { + content: "\f5a4\f5a4"; } + +.fad.fa-meh-blank::after, .fa-duotone.fa-meh-blank::after { + content: "\f5a4\f5a4"; } + +.fad.fa-user-robot::after, .fa-duotone.fa-user-robot::after { + content: "\e04b\e04b"; } + +.fad.fa-square-parking::after, .fa-duotone.fa-square-parking::after { + content: "\f540\f540"; } + +.fad.fa-parking::after, .fa-duotone.fa-parking::after { + content: "\f540\f540"; } + +.fad.fa-card-diamond::after, .fa-duotone.fa-card-diamond::after { + content: "\e3ea\e3ea"; } + +.fad.fa-face-zipper::after, .fa-duotone.fa-face-zipper::after { + content: "\e3a5\e3a5"; } + +.fad.fa-face-raised-eyebrow::after, .fa-duotone.fa-face-raised-eyebrow::after { + content: "\e388\e388"; } + +.fad.fa-house-signal::after, .fa-duotone.fa-house-signal::after { + content: "\e012\e012"; } + +.fad.fa-square-chevron-up::after, .fa-duotone.fa-square-chevron-up::after { + content: "\f32c\f32c"; } + +.fad.fa-chevron-square-up::after, .fa-duotone.fa-chevron-square-up::after { + content: "\f32c\f32c"; } + +.fad.fa-bars-progress::after, .fa-duotone.fa-bars-progress::after { + content: "\f828\f828"; } + +.fad.fa-tasks-alt::after, .fa-duotone.fa-tasks-alt::after { + content: "\f828\f828"; } + +.fad.fa-faucet-drip::after, .fa-duotone.fa-faucet-drip::after { + content: "\e006\e006"; } + +.fad.fa-arrows-to-line::after, .fa-duotone.fa-arrows-to-line::after { + content: "\e0a7\e0a7"; } + +.fad.fa-dolphin::after, .fa-duotone.fa-dolphin::after { + content: "\e168\e168"; } + +.fad.fa-arrow-up-right::after, .fa-duotone.fa-arrow-up-right::after { + content: "\e09f\e09f"; } + +.fad.fa-circle-r::after, .fa-duotone.fa-circle-r::after { + content: "\e120\e120"; } + +.fad.fa-cart-flatbed::after, .fa-duotone.fa-cart-flatbed::after { + content: "\f474\f474"; } + +.fad.fa-dolly-flatbed::after, .fa-duotone.fa-dolly-flatbed::after { + content: "\f474\f474"; } + +.fad.fa-ban-smoking::after, .fa-duotone.fa-ban-smoking::after { + content: "\f54d\f54d"; } + +.fad.fa-smoking-ban::after, .fa-duotone.fa-smoking-ban::after { + content: "\f54d\f54d"; } + +.fad.fa-circle-sort-up::after, .fa-duotone.fa-circle-sort-up::after { + content: "\e032\e032"; } + +.fad.fa-sort-circle-up::after, .fa-duotone.fa-sort-circle-up::after { + content: "\e032\e032"; } + +.fad.fa-terminal::after, .fa-duotone.fa-terminal::after { + content: "\f120\f120"; } + +.fad.fa-mobile-button::after, .fa-duotone.fa-mobile-button::after { + content: "\f10b\f10b"; } + +.fad.fa-house-medical-flag::after, .fa-duotone.fa-house-medical-flag::after { + content: "\e514\e514"; } + +.fad.fa-basket-shopping::after, .fa-duotone.fa-basket-shopping::after { + content: "\f291\f291"; } + +.fad.fa-shopping-basket::after, .fa-duotone.fa-shopping-basket::after { + content: "\f291\f291"; } + +.fad.fa-tape::after, .fa-duotone.fa-tape::after { + content: "\f4db\f4db"; } + +.fad.fa-chestnut::after, .fa-duotone.fa-chestnut::after { + content: "\e3f6\e3f6"; } + +.fad.fa-bus-simple::after, .fa-duotone.fa-bus-simple::after { + content: "\f55e\f55e"; } + +.fad.fa-bus-alt::after, .fa-duotone.fa-bus-alt::after { + content: "\f55e\f55e"; } + +.fad.fa-eye::after, .fa-duotone.fa-eye::after { + content: "\f06e\f06e"; } + +.fad.fa-face-sad-cry::after, .fa-duotone.fa-face-sad-cry::after { + content: "\f5b3\f5b3"; } + +.fad.fa-sad-cry::after, .fa-duotone.fa-sad-cry::after { + content: "\f5b3\f5b3"; } + +.fad.fa-heat::after, .fa-duotone.fa-heat::after { + content: "\e00c\e00c"; } + +.fad.fa-ticket-airline::after, .fa-duotone.fa-ticket-airline::after { + content: "\e29a\e29a"; } + +.fad.fa-boot-heeled::after, .fa-duotone.fa-boot-heeled::after { + content: "\e33f\e33f"; } + +.fad.fa-arrows-minimize::after, .fa-duotone.fa-arrows-minimize::after { + content: "\e0a5\e0a5"; } + +.fad.fa-compress-arrows::after, .fa-duotone.fa-compress-arrows::after { + content: "\e0a5\e0a5"; } + +.fad.fa-audio-description::after, .fa-duotone.fa-audio-description::after { + content: "\f29e\f29e"; } + +.fad.fa-person-military-to-person::after, .fa-duotone.fa-person-military-to-person::after { + content: "\e54c\e54c"; } + +.fad.fa-file-shield::after, .fa-duotone.fa-file-shield::after { + content: "\e4f0\e4f0"; } + +.fad.fa-hexagon::after, .fa-duotone.fa-hexagon::after { + content: "\f312\f312"; } + +.fad.fa-manhole::after, .fa-duotone.fa-manhole::after { + content: "\e1d6\e1d6"; } + +.fad.fa-user-slash::after, .fa-duotone.fa-user-slash::after { + content: "\f506\f506"; } + +.fad.fa-pen::after, .fa-duotone.fa-pen::after { + content: "\f304\f304"; } + +.fad.fa-tower-observation::after, .fa-duotone.fa-tower-observation::after { + content: "\e586\e586"; } + +.fad.fa-floppy-disks::after, .fa-duotone.fa-floppy-disks::after { + content: "\e183\e183"; } + +.fad.fa-toilet-paper-blank-under::after, .fa-duotone.fa-toilet-paper-blank-under::after { + content: "\e29f\e29f"; } + +.fad.fa-toilet-paper-reverse-alt::after, .fa-duotone.fa-toilet-paper-reverse-alt::after { + content: "\e29f\e29f"; } + +.fad.fa-file-code::after, .fa-duotone.fa-file-code::after { + content: "\f1c9\f1c9"; } + +.fad.fa-signal::after, .fa-duotone.fa-signal::after { + content: "\f012\f012"; } + +.fad.fa-signal-5::after, .fa-duotone.fa-signal-5::after { + content: "\f012\f012"; } + +.fad.fa-signal-perfect::after, .fa-duotone.fa-signal-perfect::after { + content: "\f012\f012"; } + +.fad.fa-pump::after, .fa-duotone.fa-pump::after { + content: "\e442\e442"; } + +.fad.fa-bus::after, .fa-duotone.fa-bus::after { + content: "\f207\f207"; } + +.fad.fa-heart-circle-xmark::after, .fa-duotone.fa-heart-circle-xmark::after { + content: "\e501\e501"; } + +.fad.fa-arrow-up-left-from-circle::after, .fa-duotone.fa-arrow-up-left-from-circle::after { + content: "\e09e\e09e"; } + +.fad.fa-house-chimney::after, .fa-duotone.fa-house-chimney::after { + content: "\e3af\e3af"; } + +.fad.fa-home-lg::after, .fa-duotone.fa-home-lg::after { + content: "\e3af\e3af"; } + +.fad.fa-window-maximize::after, .fa-duotone.fa-window-maximize::after { + content: "\f2d0\f2d0"; } + +.fad.fa-dryer::after, .fa-duotone.fa-dryer::after { + content: "\f861\f861"; } + +.fad.fa-face-frown::after, .fa-duotone.fa-face-frown::after { + content: "\f119\f119"; } + +.fad.fa-frown::after, .fa-duotone.fa-frown::after { + content: "\f119\f119"; } + +.fad.fa-chess-bishop-piece::after, .fa-duotone.fa-chess-bishop-piece::after { + content: "\f43b\f43b"; } + +.fad.fa-chess-bishop-alt::after, .fa-duotone.fa-chess-bishop-alt::after { + content: "\f43b\f43b"; } + +.fad.fa-shirt-tank-top::after, .fa-duotone.fa-shirt-tank-top::after { + content: "\e3c9\e3c9"; } + +.fad.fa-diploma::after, .fa-duotone.fa-diploma::after { + content: "\f5ea\f5ea"; } + +.fad.fa-scroll-ribbon::after, .fa-duotone.fa-scroll-ribbon::after { + content: "\f5ea\f5ea"; } + +.fad.fa-screencast::after, .fa-duotone.fa-screencast::after { + content: "\e23e\e23e"; } + +.fad.fa-walker::after, .fa-duotone.fa-walker::after { + content: "\f831\f831"; } + +.fad.fa-prescription::after, .fa-duotone.fa-prescription::after { + content: "\f5b1\f5b1"; } + +.fad.fa-shop::after, .fa-duotone.fa-shop::after { + content: "\f54f\f54f"; } + +.fad.fa-store-alt::after, .fa-duotone.fa-store-alt::after { + content: "\f54f\f54f"; } + +.fad.fa-floppy-disk::after, .fa-duotone.fa-floppy-disk::after { + content: "\f0c7\f0c7"; } + +.fad.fa-save::after, .fa-duotone.fa-save::after { + content: "\f0c7\f0c7"; } + +.fad.fa-vihara::after, .fa-duotone.fa-vihara::after { + content: "\f6a7\f6a7"; } + +.fad.fa-face-kiss-closed-eyes::after, .fa-duotone.fa-face-kiss-closed-eyes::after { + content: "\e37d\e37d"; } + +.fad.fa-scale-unbalanced::after, .fa-duotone.fa-scale-unbalanced::after { + content: "\f515\f515"; } + +.fad.fa-balance-scale-left::after, .fa-duotone.fa-balance-scale-left::after { + content: "\f515\f515"; } + +.fad.fa-file-user::after, .fa-duotone.fa-file-user::after { + content: "\f65c\f65c"; } + +.fad.fa-user-police-tie::after, .fa-duotone.fa-user-police-tie::after { + content: "\e334\e334"; } + +.fad.fa-face-tongue-money::after, .fa-duotone.fa-face-tongue-money::after { + content: "\e39d\e39d"; } + +.fad.fa-tennis-ball::after, .fa-duotone.fa-tennis-ball::after { + content: "\f45e\f45e"; } + +.fad.fa-square-l::after, .fa-duotone.fa-square-l::after { + content: "\e275\e275"; } + +.fad.fa-sort-up::after, .fa-duotone.fa-sort-up::after { + content: "\f0de\f0de"; } + +.fad.fa-sort-asc::after, .fa-duotone.fa-sort-asc::after { + content: "\f0de\f0de"; } + +.fad.fa-calendar-arrow-up::after, .fa-duotone.fa-calendar-arrow-up::after { + content: "\e0d1\e0d1"; } + +.fad.fa-calendar-upload::after, .fa-duotone.fa-calendar-upload::after { + content: "\e0d1\e0d1"; } + +.fad.fa-comment-dots::after, .fa-duotone.fa-comment-dots::after { + content: "\f4ad\f4ad"; } + +.fad.fa-commenting::after, .fa-duotone.fa-commenting::after { + content: "\f4ad\f4ad"; } + +.fad.fa-plant-wilt::after, .fa-duotone.fa-plant-wilt::after { + content: "\e5aa\e5aa"; } + +.fad.fa-scarf::after, .fa-duotone.fa-scarf::after { + content: "\f7c1\f7c1"; } + +.fad.fa-album-circle-plus::after, .fa-duotone.fa-album-circle-plus::after { + content: "\e48c\e48c"; } + +.fad.fa-user-nurse-hair-long::after, .fa-duotone.fa-user-nurse-hair-long::after { + content: "\e45e\e45e"; } + +.fad.fa-diamond::after, .fa-duotone.fa-diamond::after { + content: "\f219\f219"; } + +.fad.fa-square-left::after, .fa-duotone.fa-square-left::after { + content: "\f351\f351"; } + +.fad.fa-arrow-alt-square-left::after, .fa-duotone.fa-arrow-alt-square-left::after { + content: "\f351\f351"; } + +.fad.fa-face-grin-squint::after, .fa-duotone.fa-face-grin-squint::after { + content: "\f585\f585"; } + +.fad.fa-grin-squint::after, .fa-duotone.fa-grin-squint::after { + content: "\f585\f585"; } + +.fad.fa-circle-ellipsis-vertical::after, .fa-duotone.fa-circle-ellipsis-vertical::after { + content: "\e10b\e10b"; } + +.fad.fa-hand-holding-dollar::after, .fa-duotone.fa-hand-holding-dollar::after { + content: "\f4c0\f4c0"; } + +.fad.fa-hand-holding-usd::after, .fa-duotone.fa-hand-holding-usd::after { + content: "\f4c0\f4c0"; } + +.fad.fa-grid-dividers::after, .fa-duotone.fa-grid-dividers::after { + content: "\e3ad\e3ad"; } + +.fad.fa-bacterium::after, .fa-duotone.fa-bacterium::after { + content: "\e05a\e05a"; } + +.fad.fa-hand-pointer::after, .fa-duotone.fa-hand-pointer::after { + content: "\f25a\f25a"; } + +.fad.fa-drum-steelpan::after, .fa-duotone.fa-drum-steelpan::after { + content: "\f56a\f56a"; } + +.fad.fa-hand-scissors::after, .fa-duotone.fa-hand-scissors::after { + content: "\f257\f257"; } + +.fad.fa-hands-praying::after, .fa-duotone.fa-hands-praying::after { + content: "\f684\f684"; } + +.fad.fa-praying-hands::after, .fa-duotone.fa-praying-hands::after { + content: "\f684\f684"; } + +.fad.fa-face-pensive::after, .fa-duotone.fa-face-pensive::after { + content: "\e384\e384"; } + +.fad.fa-user-music::after, .fa-duotone.fa-user-music::after { + content: "\f8eb\f8eb"; } + +.fad.fa-arrow-rotate-right::after, .fa-duotone.fa-arrow-rotate-right::after { + content: "\f01e\f01e"; } + +.fad.fa-arrow-right-rotate::after, .fa-duotone.fa-arrow-right-rotate::after { + content: "\f01e\f01e"; } + +.fad.fa-arrow-rotate-forward::after, .fa-duotone.fa-arrow-rotate-forward::after { + content: "\f01e\f01e"; } + +.fad.fa-redo::after, .fa-duotone.fa-redo::after { + content: "\f01e\f01e"; } + +.fad.fa-messages-dollar::after, .fa-duotone.fa-messages-dollar::after { + content: "\f652\f652"; } + +.fad.fa-comments-alt-dollar::after, .fa-duotone.fa-comments-alt-dollar::after { + content: "\f652\f652"; } + +.fad.fa-sensor-on::after, .fa-duotone.fa-sensor-on::after { + content: "\e02b\e02b"; } + +.fad.fa-balloon::after, .fa-duotone.fa-balloon::after { + content: "\e2e3\e2e3"; } + +.fad.fa-biohazard::after, .fa-duotone.fa-biohazard::after { + content: "\f780\f780"; } + +.fad.fa-chess-queen-piece::after, .fa-duotone.fa-chess-queen-piece::after { + content: "\f446\f446"; } + +.fad.fa-chess-queen-alt::after, .fa-duotone.fa-chess-queen-alt::after { + content: "\f446\f446"; } + +.fad.fa-location-crosshairs::after, .fa-duotone.fa-location-crosshairs::after { + content: "\f601\f601"; } + +.fad.fa-location::after, .fa-duotone.fa-location::after { + content: "\f601\f601"; } + +.fad.fa-mars-double::after, .fa-duotone.fa-mars-double::after { + content: "\f227\f227"; } + +.fad.fa-house-person-leave::after, .fa-duotone.fa-house-person-leave::after { + content: "\e00f\e00f"; } + +.fad.fa-house-leave::after, .fa-duotone.fa-house-leave::after { + content: "\e00f\e00f"; } + +.fad.fa-house-person-depart::after, .fa-duotone.fa-house-person-depart::after { + content: "\e00f\e00f"; } + +.fad.fa-ruler-triangle::after, .fa-duotone.fa-ruler-triangle::after { + content: "\f61c\f61c"; } + +.fad.fa-card-club::after, .fa-duotone.fa-card-club::after { + content: "\e3e9\e3e9"; } + +.fad.fa-child-dress::after, .fa-duotone.fa-child-dress::after { + content: "\e59c\e59c"; } + +.fad.fa-users-between-lines::after, .fa-duotone.fa-users-between-lines::after { + content: "\e591\e591"; } + +.fad.fa-lungs-virus::after, .fa-duotone.fa-lungs-virus::after { + content: "\e067\e067"; } + +.fad.fa-spinner-third::after, .fa-duotone.fa-spinner-third::after { + content: "\f3f4\f3f4"; } + +.fad.fa-face-grin-tears::after, .fa-duotone.fa-face-grin-tears::after { + content: "\f588\f588"; } + +.fad.fa-grin-tears::after, .fa-duotone.fa-grin-tears::after { + content: "\f588\f588"; } + +.fad.fa-phone::after, .fa-duotone.fa-phone::after { + content: "\f095\f095"; } + +.fad.fa-computer-mouse-scrollwheel::after, .fa-duotone.fa-computer-mouse-scrollwheel::after { + content: "\f8cd\f8cd"; } + +.fad.fa-mouse-alt::after, .fa-duotone.fa-mouse-alt::after { + content: "\f8cd\f8cd"; } + +.fad.fa-calendar-xmark::after, .fa-duotone.fa-calendar-xmark::after { + content: "\f273\f273"; } + +.fad.fa-calendar-times::after, .fa-duotone.fa-calendar-times::after { + content: "\f273\f273"; } + +.fad.fa-child-reaching::after, .fa-duotone.fa-child-reaching::after { + content: "\e59d\e59d"; } + +.fad.fa-table-layout::after, .fa-duotone.fa-table-layout::after { + content: "\e290\e290"; } + +.fad.fa-narwhal::after, .fa-duotone.fa-narwhal::after { + content: "\f6fe\f6fe"; } + +.fad.fa-ramp-loading::after, .fa-duotone.fa-ramp-loading::after { + content: "\f4d4\f4d4"; } + +.fad.fa-calendar-circle-plus::after, .fa-duotone.fa-calendar-circle-plus::after { + content: "\e470\e470"; } + +.fad.fa-toothbrush::after, .fa-duotone.fa-toothbrush::after { + content: "\f635\f635"; } + +.fad.fa-border-inner::after, .fa-duotone.fa-border-inner::after { + content: "\f84e\f84e"; } + +.fad.fa-paw-claws::after, .fa-duotone.fa-paw-claws::after { + content: "\f702\f702"; } + +.fad.fa-kiwi-fruit::after, .fa-duotone.fa-kiwi-fruit::after { + content: "\e30c\e30c"; } + +.fad.fa-traffic-light-slow::after, .fa-duotone.fa-traffic-light-slow::after { + content: "\f639\f639"; } + +.fad.fa-rectangle-code::after, .fa-duotone.fa-rectangle-code::after { + content: "\e322\e322"; } + +.fad.fa-head-side-virus::after, .fa-duotone.fa-head-side-virus::after { + content: "\e064\e064"; } + +.fad.fa-keyboard-brightness::after, .fa-duotone.fa-keyboard-brightness::after { + content: "\e1c0\e1c0"; } + +.fad.fa-books-medical::after, .fa-duotone.fa-books-medical::after { + content: "\f7e8\f7e8"; } + +.fad.fa-lightbulb-slash::after, .fa-duotone.fa-lightbulb-slash::after { + content: "\f673\f673"; } + +.fad.fa-house-blank::after, .fa-duotone.fa-house-blank::after { + content: "\e487\e487"; } + +.fad.fa-home-blank::after, .fa-duotone.fa-home-blank::after { + content: "\e487\e487"; } + +.fad.fa-square-5::after, .fa-duotone.fa-square-5::after { + content: "\e25a\e25a"; } + +.fad.fa-square-heart::after, .fa-duotone.fa-square-heart::after { + content: "\f4c8\f4c8"; } + +.fad.fa-heart-square::after, .fa-duotone.fa-heart-square::after { + content: "\f4c8\f4c8"; } + +.fad.fa-puzzle::after, .fa-duotone.fa-puzzle::after { + content: "\e443\e443"; } + +.fad.fa-user-gear::after, .fa-duotone.fa-user-gear::after { + content: "\f4fe\f4fe"; } + +.fad.fa-user-cog::after, .fa-duotone.fa-user-cog::after { + content: "\f4fe\f4fe"; } + +.fad.fa-pipe-circle-check::after, .fa-duotone.fa-pipe-circle-check::after { + content: "\e436\e436"; } + +.fad.fa-arrow-up-1-9::after, .fa-duotone.fa-arrow-up-1-9::after { + content: "\f163\f163"; } + +.fad.fa-sort-numeric-up::after, .fa-duotone.fa-sort-numeric-up::after { + content: "\f163\f163"; } + +.fad.fa-octagon-exclamation::after, .fa-duotone.fa-octagon-exclamation::after { + content: "\e204\e204"; } + +.fad.fa-dial-low::after, .fa-duotone.fa-dial-low::after { + content: "\e15d\e15d"; } + +.fad.fa-door-closed::after, .fa-duotone.fa-door-closed::after { + content: "\f52a\f52a"; } + +.fad.fa-laptop-mobile::after, .fa-duotone.fa-laptop-mobile::after { + content: "\f87a\f87a"; } + +.fad.fa-phone-laptop::after, .fa-duotone.fa-phone-laptop::after { + content: "\f87a\f87a"; } + +.fad.fa-conveyor-belt-boxes::after, .fa-duotone.fa-conveyor-belt-boxes::after { + content: "\f46f\f46f"; } + +.fad.fa-conveyor-belt-alt::after, .fa-duotone.fa-conveyor-belt-alt::after { + content: "\f46f\f46f"; } + +.fad.fa-shield-virus::after, .fa-duotone.fa-shield-virus::after { + content: "\e06c\e06c"; } + +.fad.fa-starfighter-twin-ion-engine-advanced::after, .fa-duotone.fa-starfighter-twin-ion-engine-advanced::after { + content: "\e28e\e28e"; } + +.fad.fa-starfighter-alt-advanced::after, .fa-duotone.fa-starfighter-alt-advanced::after { + content: "\e28e\e28e"; } + +.fad.fa-dice-six::after, .fa-duotone.fa-dice-six::after { + content: "\f526\f526"; } + +.fad.fa-starfighter-twin-ion-engine::after, .fa-duotone.fa-starfighter-twin-ion-engine::after { + content: "\e038\e038"; } + +.fad.fa-starfighter-alt::after, .fa-duotone.fa-starfighter-alt::after { + content: "\e038\e038"; } + +.fad.fa-rocket-launch::after, .fa-duotone.fa-rocket-launch::after { + content: "\e027\e027"; } + +.fad.fa-mosquito-net::after, .fa-duotone.fa-mosquito-net::after { + content: "\e52c\e52c"; } + +.fad.fa-vent-damper::after, .fa-duotone.fa-vent-damper::after { + content: "\e465\e465"; } + +.fad.fa-bridge-water::after, .fa-duotone.fa-bridge-water::after { + content: "\e4ce\e4ce"; } + +.fad.fa-ban-bug::after, .fa-duotone.fa-ban-bug::after { + content: "\f7f9\f7f9"; } + +.fad.fa-debug::after, .fa-duotone.fa-debug::after { + content: "\f7f9\f7f9"; } + +.fad.fa-person-booth::after, .fa-duotone.fa-person-booth::after { + content: "\f756\f756"; } + +.fad.fa-text-width::after, .fa-duotone.fa-text-width::after { + content: "\f035\f035"; } + +.fad.fa-garage-car::after, .fa-duotone.fa-garage-car::after { + content: "\e00a\e00a"; } + +.fad.fa-square-kanban::after, .fa-duotone.fa-square-kanban::after { + content: "\e488\e488"; } + +.fad.fa-hat-wizard::after, .fa-duotone.fa-hat-wizard::after { + content: "\f6e8\f6e8"; } + +.fad.fa-pen-fancy::after, .fa-duotone.fa-pen-fancy::after { + content: "\f5ac\f5ac"; } + +.fad.fa-coffee-pot::after, .fa-duotone.fa-coffee-pot::after { + content: "\e002\e002"; } + +.fad.fa-mouse-field::after, .fa-duotone.fa-mouse-field::after { + content: "\e5a8\e5a8"; } + +.fad.fa-person-digging::after, .fa-duotone.fa-person-digging::after { + content: "\f85e\f85e"; } + +.fad.fa-digging::after, .fa-duotone.fa-digging::after { + content: "\f85e\f85e"; } + +.fad.fa-shower-down::after, .fa-duotone.fa-shower-down::after { + content: "\e24d\e24d"; } + +.fad.fa-shower-alt::after, .fa-duotone.fa-shower-alt::after { + content: "\e24d\e24d"; } + +.fad.fa-box-circle-check::after, .fa-duotone.fa-box-circle-check::after { + content: "\e0c4\e0c4"; } + +.fad.fa-brightness::after, .fa-duotone.fa-brightness::after { + content: "\e0c9\e0c9"; } + +.fad.fa-car-side-bolt::after, .fa-duotone.fa-car-side-bolt::after { + content: "\e344\e344"; } + +.fad.fa-ornament::after, .fa-duotone.fa-ornament::after { + content: "\f7b8\f7b8"; } + +.fad.fa-phone-arrow-down-left::after, .fa-duotone.fa-phone-arrow-down-left::after { + content: "\e223\e223"; } + +.fad.fa-phone-arrow-down::after, .fa-duotone.fa-phone-arrow-down::after { + content: "\e223\e223"; } + +.fad.fa-phone-incoming::after, .fa-duotone.fa-phone-incoming::after { + content: "\e223\e223"; } + +.fad.fa-cloud-word::after, .fa-duotone.fa-cloud-word::after { + content: "\e138\e138"; } + +.fad.fa-hand-fingers-crossed::after, .fa-duotone.fa-hand-fingers-crossed::after { + content: "\e1a3\e1a3"; } + +.fad.fa-trash::after, .fa-duotone.fa-trash::after { + content: "\f1f8\f1f8"; } + +.fad.fa-gauge-simple::after, .fa-duotone.fa-gauge-simple::after { + content: "\f629\f629"; } + +.fad.fa-gauge-simple-med::after, .fa-duotone.fa-gauge-simple-med::after { + content: "\f629\f629"; } + +.fad.fa-tachometer-average::after, .fa-duotone.fa-tachometer-average::after { + content: "\f629\f629"; } + +.fad.fa-arrow-down-small-big::after, .fa-duotone.fa-arrow-down-small-big::after { + content: "\f88d\f88d"; } + +.fad.fa-sort-size-down-alt::after, .fa-duotone.fa-sort-size-down-alt::after { + content: "\f88d\f88d"; } + +.fad.fa-book-medical::after, .fa-duotone.fa-book-medical::after { + content: "\f7e6\f7e6"; } + +.fad.fa-face-melting::after, .fa-duotone.fa-face-melting::after { + content: "\e483\e483"; } + +.fad.fa-poo::after, .fa-duotone.fa-poo::after { + content: "\f2fe\f2fe"; } + +.fad.fa-pen-clip-slash::after, .fa-duotone.fa-pen-clip-slash::after { + content: "\e20f\e20f"; } + +.fad.fa-pen-alt-slash::after, .fa-duotone.fa-pen-alt-slash::after { + content: "\e20f\e20f"; } + +.fad.fa-quote-right::after, .fa-duotone.fa-quote-right::after { + content: "\f10e\f10e"; } + +.fad.fa-quote-right-alt::after, .fa-duotone.fa-quote-right-alt::after { + content: "\f10e\f10e"; } + +.fad.fa-scroll-old::after, .fa-duotone.fa-scroll-old::after { + content: "\f70f\f70f"; } + +.fad.fa-guitars::after, .fa-duotone.fa-guitars::after { + content: "\f8bf\f8bf"; } + +.fad.fa-phone-xmark::after, .fa-duotone.fa-phone-xmark::after { + content: "\e227\e227"; } + +.fad.fa-hose::after, .fa-duotone.fa-hose::after { + content: "\e419\e419"; } + +.fad.fa-clock-six::after, .fa-duotone.fa-clock-six::after { + content: "\e352\e352"; } + +.fad.fa-shirt::after, .fa-duotone.fa-shirt::after { + content: "\f553\f553"; } + +.fad.fa-t-shirt::after, .fa-duotone.fa-t-shirt::after { + content: "\f553\f553"; } + +.fad.fa-tshirt::after, .fa-duotone.fa-tshirt::after { + content: "\f553\f553"; } + +.fad.fa-billboard::after, .fa-duotone.fa-billboard::after { + content: "\e5cd\e5cd"; } + +.fad.fa-square-r::after, .fa-duotone.fa-square-r::after { + content: "\e27c\e27c"; } + +.fad.fa-cubes::after, .fa-duotone.fa-cubes::after { + content: "\f1b3\f1b3"; } + +.fad.fa-envelope-open-dollar::after, .fa-duotone.fa-envelope-open-dollar::after { + content: "\f657\f657"; } + +.fad.fa-divide::after, .fa-duotone.fa-divide::after { + content: "\f529\f529"; } + +.fad.fa-sun-cloud::after, .fa-duotone.fa-sun-cloud::after { + content: "\f763\f763"; } + +.fad.fa-lamp-floor::after, .fa-duotone.fa-lamp-floor::after { + content: "\e015\e015"; } + +.fad.fa-square-7::after, .fa-duotone.fa-square-7::after { + content: "\e25c\e25c"; } + +.fad.fa-tenge-sign::after, .fa-duotone.fa-tenge-sign::after { + content: "\f7d7\f7d7"; } + +.fad.fa-tenge::after, .fa-duotone.fa-tenge::after { + content: "\f7d7\f7d7"; } + +.fad.fa-headphones::after, .fa-duotone.fa-headphones::after { + content: "\f025\f025"; } + +.fad.fa-hands-holding::after, .fa-duotone.fa-hands-holding::after { + content: "\f4c2\f4c2"; } + +.fad.fa-campfire::after, .fa-duotone.fa-campfire::after { + content: "\f6ba\f6ba"; } + +.fad.fa-circle-ampersand::after, .fa-duotone.fa-circle-ampersand::after { + content: "\e0f8\e0f8"; } + +.fad.fa-snowflakes::after, .fa-duotone.fa-snowflakes::after { + content: "\f7cf\f7cf"; } + +.fad.fa-hands-clapping::after, .fa-duotone.fa-hands-clapping::after { + content: "\e1a8\e1a8"; } + +.fad.fa-republican::after, .fa-duotone.fa-republican::after { + content: "\f75e\f75e"; } + +.fad.fa-leaf-maple::after, .fa-duotone.fa-leaf-maple::after { + content: "\f6f6\f6f6"; } + +.fad.fa-arrow-left::after, .fa-duotone.fa-arrow-left::after { + content: "\f060\f060"; } + +.fad.fa-person-circle-xmark::after, .fa-duotone.fa-person-circle-xmark::after { + content: "\e543\e543"; } + +.fad.fa-ruler::after, .fa-duotone.fa-ruler::after { + content: "\f545\f545"; } + +.fad.fa-cup-straw-swoosh::after, .fa-duotone.fa-cup-straw-swoosh::after { + content: "\e364\e364"; } + +.fad.fa-temperature-sun::after, .fa-duotone.fa-temperature-sun::after { + content: "\f76a\f76a"; } + +.fad.fa-temperature-hot::after, .fa-duotone.fa-temperature-hot::after { + content: "\f76a\f76a"; } + +.fad.fa-align-left::after, .fa-duotone.fa-align-left::after { + content: "\f036\f036"; } + +.fad.fa-dice-d6::after, .fa-duotone.fa-dice-d6::after { + content: "\f6d1\f6d1"; } + +.fad.fa-restroom::after, .fa-duotone.fa-restroom::after { + content: "\f7bd\f7bd"; } + +.fad.fa-high-definition::after, .fa-duotone.fa-high-definition::after { + content: "\e1ae\e1ae"; } + +.fad.fa-rectangle-hd::after, .fa-duotone.fa-rectangle-hd::after { + content: "\e1ae\e1ae"; } + +.fad.fa-j::after, .fa-duotone.fa-j::after { + content: "\4a\4a"; } + +.fad.fa-galaxy::after, .fa-duotone.fa-galaxy::after { + content: "\e008\e008"; } + +.fad.fa-users-viewfinder::after, .fa-duotone.fa-users-viewfinder::after { + content: "\e595\e595"; } + +.fad.fa-file-video::after, .fa-duotone.fa-file-video::after { + content: "\f1c8\f1c8"; } + +.fad.fa-cherries::after, .fa-duotone.fa-cherries::after { + content: "\e0ec\e0ec"; } + +.fad.fa-up-right-from-square::after, .fa-duotone.fa-up-right-from-square::after { + content: "\f35d\f35d"; } + +.fad.fa-external-link-alt::after, .fa-duotone.fa-external-link-alt::after { + content: "\f35d\f35d"; } + +.fad.fa-circle-sort::after, .fa-duotone.fa-circle-sort::after { + content: "\e030\e030"; } + +.fad.fa-sort-circle::after, .fa-duotone.fa-sort-circle::after { + content: "\e030\e030"; } + +.fad.fa-table-cells::after, .fa-duotone.fa-table-cells::after { + content: "\f00a\f00a"; } + +.fad.fa-th::after, .fa-duotone.fa-th::after { + content: "\f00a\f00a"; } + +.fad.fa-file-pdf::after, .fa-duotone.fa-file-pdf::after { + content: "\f1c1\f1c1"; } + +.fad.fa-siren::after, .fa-duotone.fa-siren::after { + content: "\e02d\e02d"; } + +.fad.fa-arrow-up-to-dotted-line::after, .fa-duotone.fa-arrow-up-to-dotted-line::after { + content: "\e0a1\e0a1"; } + +.fad.fa-image-landscape::after, .fa-duotone.fa-image-landscape::after { + content: "\e1b5\e1b5"; } + +.fad.fa-landscape::after, .fa-duotone.fa-landscape::after { + content: "\e1b5\e1b5"; } + +.fad.fa-tank-water::after, .fa-duotone.fa-tank-water::after { + content: "\e452\e452"; } + +.fad.fa-curling-stone::after, .fa-duotone.fa-curling-stone::after { + content: "\f44a\f44a"; } + +.fad.fa-curling::after, .fa-duotone.fa-curling::after { + content: "\f44a\f44a"; } + +.fad.fa-gamepad-modern::after, .fa-duotone.fa-gamepad-modern::after { + content: "\e5a2\e5a2"; } + +.fad.fa-gamepad-alt::after, .fa-duotone.fa-gamepad-alt::after { + content: "\e5a2\e5a2"; } + +.fad.fa-messages-question::after, .fa-duotone.fa-messages-question::after { + content: "\e1e7\e1e7"; } + +.fad.fa-book-bible::after, .fa-duotone.fa-book-bible::after { + content: "\f647\f647"; } + +.fad.fa-bible::after, .fa-duotone.fa-bible::after { + content: "\f647\f647"; } + +.fad.fa-o::after, .fa-duotone.fa-o::after { + content: "\4f\4f"; } + +.fad.fa-suitcase-medical::after, .fa-duotone.fa-suitcase-medical::after { + content: "\f0fa\f0fa"; } + +.fad.fa-medkit::after, .fa-duotone.fa-medkit::after { + content: "\f0fa\f0fa"; } + +.fad.fa-briefcase-arrow-right::after, .fa-duotone.fa-briefcase-arrow-right::after { + content: "\e2f2\e2f2"; } + +.fad.fa-expand-wide::after, .fa-duotone.fa-expand-wide::after { + content: "\f320\f320"; } + +.fad.fa-clock-eleven-thirty::after, .fa-duotone.fa-clock-eleven-thirty::after { + content: "\e348\e348"; } + +.fad.fa-rv::after, .fa-duotone.fa-rv::after { + content: "\f7be\f7be"; } + +.fad.fa-user-secret::after, .fa-duotone.fa-user-secret::after { + content: "\f21b\f21b"; } + +.fad.fa-otter::after, .fa-duotone.fa-otter::after { + content: "\f700\f700"; } + +.fad.fa-dreidel::after, .fa-duotone.fa-dreidel::after { + content: "\f792\f792"; } + +.fad.fa-person-dress::after, .fa-duotone.fa-person-dress::after { + content: "\f182\f182"; } + +.fad.fa-female::after, .fa-duotone.fa-female::after { + content: "\f182\f182"; } + +.fad.fa-comment-dollar::after, .fa-duotone.fa-comment-dollar::after { + content: "\f651\f651"; } + +.fad.fa-business-time::after, .fa-duotone.fa-business-time::after { + content: "\f64a\f64a"; } + +.fad.fa-briefcase-clock::after, .fa-duotone.fa-briefcase-clock::after { + content: "\f64a\f64a"; } + +.fad.fa-flower-tulip::after, .fa-duotone.fa-flower-tulip::after { + content: "\f801\f801"; } + +.fad.fa-people-pants-simple::after, .fa-duotone.fa-people-pants-simple::after { + content: "\e21a\e21a"; } + +.fad.fa-cloud-drizzle::after, .fa-duotone.fa-cloud-drizzle::after { + content: "\f738\f738"; } + +.fad.fa-table-cells-large::after, .fa-duotone.fa-table-cells-large::after { + content: "\f009\f009"; } + +.fad.fa-th-large::after, .fa-duotone.fa-th-large::after { + content: "\f009\f009"; } + +.fad.fa-book-tanakh::after, .fa-duotone.fa-book-tanakh::after { + content: "\f827\f827"; } + +.fad.fa-tanakh::after, .fa-duotone.fa-tanakh::after { + content: "\f827\f827"; } + +.fad.fa-solar-system::after, .fa-duotone.fa-solar-system::after { + content: "\e02f\e02f"; } + +.fad.fa-seal-question::after, .fa-duotone.fa-seal-question::after { + content: "\e243\e243"; } + +.fad.fa-phone-volume::after, .fa-duotone.fa-phone-volume::after { + content: "\f2a0\f2a0"; } + +.fad.fa-volume-control-phone::after, .fa-duotone.fa-volume-control-phone::after { + content: "\f2a0\f2a0"; } + +.fad.fa-disc-drive::after, .fa-duotone.fa-disc-drive::after { + content: "\f8b5\f8b5"; } + +.fad.fa-hat-cowboy-side::after, .fa-duotone.fa-hat-cowboy-side::after { + content: "\f8c1\f8c1"; } + +.fad.fa-table-rows::after, .fa-duotone.fa-table-rows::after { + content: "\e292\e292"; } + +.fad.fa-rows::after, .fa-duotone.fa-rows::after { + content: "\e292\e292"; } + +.fad.fa-location-exclamation::after, .fa-duotone.fa-location-exclamation::after { + content: "\f608\f608"; } + +.fad.fa-map-marker-exclamation::after, .fa-duotone.fa-map-marker-exclamation::after { + content: "\f608\f608"; } + +.fad.fa-face-fearful::after, .fa-duotone.fa-face-fearful::after { + content: "\e375\e375"; } + +.fad.fa-clipboard-user::after, .fa-duotone.fa-clipboard-user::after { + content: "\f7f3\f7f3"; } + +.fad.fa-bus-school::after, .fa-duotone.fa-bus-school::after { + content: "\f5dd\f5dd"; } + +.fad.fa-film-slash::after, .fa-duotone.fa-film-slash::after { + content: "\e179\e179"; } + +.fad.fa-square-arrow-down-right::after, .fa-duotone.fa-square-arrow-down-right::after { + content: "\e262\e262"; } + +.fad.fa-book-sparkles::after, .fa-duotone.fa-book-sparkles::after { + content: "\f6b8\f6b8"; } + +.fad.fa-book-spells::after, .fa-duotone.fa-book-spells::after { + content: "\f6b8\f6b8"; } + +.fad.fa-washing-machine::after, .fa-duotone.fa-washing-machine::after { + content: "\f898\f898"; } + +.fad.fa-washer::after, .fa-duotone.fa-washer::after { + content: "\f898\f898"; } + +.fad.fa-child::after, .fa-duotone.fa-child::after { + content: "\f1ae\f1ae"; } + +.fad.fa-lira-sign::after, .fa-duotone.fa-lira-sign::after { + content: "\f195\f195"; } + +.fad.fa-user-visor::after, .fa-duotone.fa-user-visor::after { + content: "\e04c\e04c"; } + +.fad.fa-file-plus-minus::after, .fa-duotone.fa-file-plus-minus::after { + content: "\e177\e177"; } + +.fad.fa-chess-clock-flip::after, .fa-duotone.fa-chess-clock-flip::after { + content: "\f43e\f43e"; } + +.fad.fa-chess-clock-alt::after, .fa-duotone.fa-chess-clock-alt::after { + content: "\f43e\f43e"; } + +.fad.fa-satellite::after, .fa-duotone.fa-satellite::after { + content: "\f7bf\f7bf"; } + +.fad.fa-plane-lock::after, .fa-duotone.fa-plane-lock::after { + content: "\e558\e558"; } + +.fad.fa-steering-wheel::after, .fa-duotone.fa-steering-wheel::after { + content: "\f622\f622"; } + +.fad.fa-tag::after, .fa-duotone.fa-tag::after { + content: "\f02b\f02b"; } + +.fad.fa-stretcher::after, .fa-duotone.fa-stretcher::after { + content: "\f825\f825"; } + +.fad.fa-book-section::after, .fa-duotone.fa-book-section::after { + content: "\e0c1\e0c1"; } + +.fad.fa-book-law::after, .fa-duotone.fa-book-law::after { + content: "\e0c1\e0c1"; } + +.fad.fa-inboxes::after, .fa-duotone.fa-inboxes::after { + content: "\e1bb\e1bb"; } + +.fad.fa-coffee-bean::after, .fa-duotone.fa-coffee-bean::after { + content: "\e13e\e13e"; } + +.fad.fa-circle-yen::after, .fa-duotone.fa-circle-yen::after { + content: "\e5d0\e5d0"; } + +.fad.fa-brackets-curly::after, .fa-duotone.fa-brackets-curly::after { + content: "\f7ea\f7ea"; } + +.fad.fa-ellipsis-stroke-vertical::after, .fa-duotone.fa-ellipsis-stroke-vertical::after { + content: "\f39c\f39c"; } + +.fad.fa-ellipsis-v-alt::after, .fa-duotone.fa-ellipsis-v-alt::after { + content: "\f39c\f39c"; } + +.fad.fa-comment::after, .fa-duotone.fa-comment::after { + content: "\f075\f075"; } + +.fad.fa-square-1::after, .fa-duotone.fa-square-1::after { + content: "\e256\e256"; } + +.fad.fa-cake-candles::after, .fa-duotone.fa-cake-candles::after { + content: "\f1fd\f1fd"; } + +.fad.fa-birthday-cake::after, .fa-duotone.fa-birthday-cake::after { + content: "\f1fd\f1fd"; } + +.fad.fa-cake::after, .fa-duotone.fa-cake::after { + content: "\f1fd\f1fd"; } + +.fad.fa-head-side::after, .fa-duotone.fa-head-side::after { + content: "\f6e9\f6e9"; } + +.fad.fa-envelope::after, .fa-duotone.fa-envelope::after { + content: "\f0e0\f0e0"; } + +.fad.fa-dolly-empty::after, .fa-duotone.fa-dolly-empty::after { + content: "\f473\f473"; } + +.fad.fa-face-tissue::after, .fa-duotone.fa-face-tissue::after { + content: "\e39c\e39c"; } + +.fad.fa-angles-up::after, .fa-duotone.fa-angles-up::after { + content: "\f102\f102"; } + +.fad.fa-angle-double-up::after, .fa-duotone.fa-angle-double-up::after { + content: "\f102\f102"; } + +.fad.fa-bin-recycle::after, .fa-duotone.fa-bin-recycle::after { + content: "\e5f7\e5f7"; } + +.fad.fa-paperclip::after, .fa-duotone.fa-paperclip::after { + content: "\f0c6\f0c6"; } + +.fad.fa-chart-line-down::after, .fa-duotone.fa-chart-line-down::after { + content: "\f64d\f64d"; } + +.fad.fa-arrow-right-to-city::after, .fa-duotone.fa-arrow-right-to-city::after { + content: "\e4b3\e4b3"; } + +.fad.fa-lock-a::after, .fa-duotone.fa-lock-a::after { + content: "\e422\e422"; } + +.fad.fa-ribbon::after, .fa-duotone.fa-ribbon::after { + content: "\f4d6\f4d6"; } + +.fad.fa-lungs::after, .fa-duotone.fa-lungs::after { + content: "\f604\f604"; } + +.fad.fa-person-pinball::after, .fa-duotone.fa-person-pinball::after { + content: "\e21d\e21d"; } + +.fad.fa-arrow-up-9-1::after, .fa-duotone.fa-arrow-up-9-1::after { + content: "\f887\f887"; } + +.fad.fa-sort-numeric-up-alt::after, .fa-duotone.fa-sort-numeric-up-alt::after { + content: "\f887\f887"; } + +.fad.fa-apple-core::after, .fa-duotone.fa-apple-core::after { + content: "\e08f\e08f"; } + +.fad.fa-circle-y::after, .fa-duotone.fa-circle-y::after { + content: "\e12f\e12f"; } + +.fad.fa-h6::after, .fa-duotone.fa-h6::after { + content: "\e413\e413"; } + +.fad.fa-litecoin-sign::after, .fa-duotone.fa-litecoin-sign::after { + content: "\e1d3\e1d3"; } + +.fad.fa-circle-small::after, .fa-duotone.fa-circle-small::after { + content: "\e122\e122"; } + +.fad.fa-border-none::after, .fa-duotone.fa-border-none::after { + content: "\f850\f850"; } + +.fad.fa-arrow-turn-down-left::after, .fa-duotone.fa-arrow-turn-down-left::after { + content: "\e2e1\e2e1"; } + +.fad.fa-circle-nodes::after, .fa-duotone.fa-circle-nodes::after { + content: "\e4e2\e4e2"; } + +.fad.fa-parachute-box::after, .fa-duotone.fa-parachute-box::after { + content: "\f4cd\f4cd"; } + +.fad.fa-message-medical::after, .fa-duotone.fa-message-medical::after { + content: "\f7f4\f7f4"; } + +.fad.fa-comment-alt-medical::after, .fa-duotone.fa-comment-alt-medical::after { + content: "\f7f4\f7f4"; } + +.fad.fa-rugby-ball::after, .fa-duotone.fa-rugby-ball::after { + content: "\e3c6\e3c6"; } + +.fad.fa-comment-music::after, .fa-duotone.fa-comment-music::after { + content: "\f8b0\f8b0"; } + +.fad.fa-indent::after, .fa-duotone.fa-indent::after { + content: "\f03c\f03c"; } + +.fad.fa-tree-deciduous::after, .fa-duotone.fa-tree-deciduous::after { + content: "\f400\f400"; } + +.fad.fa-tree-alt::after, .fa-duotone.fa-tree-alt::after { + content: "\f400\f400"; } + +.fad.fa-puzzle-piece-simple::after, .fa-duotone.fa-puzzle-piece-simple::after { + content: "\e231\e231"; } + +.fad.fa-puzzle-piece-alt::after, .fa-duotone.fa-puzzle-piece-alt::after { + content: "\e231\e231"; } + +.fad.fa-truck-field-un::after, .fa-duotone.fa-truck-field-un::after { + content: "\e58e\e58e"; } + +.fad.fa-nfc-trash::after, .fa-duotone.fa-nfc-trash::after { + content: "\e1fd\e1fd"; } + +.fad.fa-hourglass::after, .fa-duotone.fa-hourglass::after { + content: "\f254\f254"; } + +.fad.fa-hourglass-empty::after, .fa-duotone.fa-hourglass-empty::after { + content: "\f254\f254"; } + +.fad.fa-mountain::after, .fa-duotone.fa-mountain::after { + content: "\f6fc\f6fc"; } + +.fad.fa-file-xmark::after, .fa-duotone.fa-file-xmark::after { + content: "\f317\f317"; } + +.fad.fa-file-times::after, .fa-duotone.fa-file-times::after { + content: "\f317\f317"; } + +.fad.fa-house-heart::after, .fa-duotone.fa-house-heart::after { + content: "\f4c9\f4c9"; } + +.fad.fa-home-heart::after, .fa-duotone.fa-home-heart::after { + content: "\f4c9\f4c9"; } + +.fad.fa-house-chimney-blank::after, .fa-duotone.fa-house-chimney-blank::after { + content: "\e3b0\e3b0"; } + +.fad.fa-meter-bolt::after, .fa-duotone.fa-meter-bolt::after { + content: "\e1e9\e1e9"; } + +.fad.fa-user-doctor::after, .fa-duotone.fa-user-doctor::after { + content: "\f0f0\f0f0"; } + +.fad.fa-user-md::after, .fa-duotone.fa-user-md::after { + content: "\f0f0\f0f0"; } + +.fad.fa-slash-back::after, .fa-duotone.fa-slash-back::after { + content: "\5c\5c"; } + +.fad.fa-circle-info::after, .fa-duotone.fa-circle-info::after { + content: "\f05a\f05a"; } + +.fad.fa-info-circle::after, .fa-duotone.fa-info-circle::after { + content: "\f05a\f05a"; } + +.fad.fa-fishing-rod::after, .fa-duotone.fa-fishing-rod::after { + content: "\e3a8\e3a8"; } + +.fad.fa-hammer-crash::after, .fa-duotone.fa-hammer-crash::after { + content: "\e414\e414"; } + +.fad.fa-message-heart::after, .fa-duotone.fa-message-heart::after { + content: "\e5c9\e5c9"; } + +.fad.fa-cloud-meatball::after, .fa-duotone.fa-cloud-meatball::after { + content: "\f73b\f73b"; } + +.fad.fa-camera-polaroid::after, .fa-duotone.fa-camera-polaroid::after { + content: "\f8aa\f8aa"; } + +.fad.fa-camera::after, .fa-duotone.fa-camera::after { + content: "\f030\f030"; } + +.fad.fa-camera-alt::after, .fa-duotone.fa-camera-alt::after { + content: "\f030\f030"; } + +.fad.fa-square-virus::after, .fa-duotone.fa-square-virus::after { + content: "\e578\e578"; } + +.fad.fa-cart-arrow-up::after, .fa-duotone.fa-cart-arrow-up::after { + content: "\e3ee\e3ee"; } + +.fad.fa-meteor::after, .fa-duotone.fa-meteor::after { + content: "\f753\f753"; } + +.fad.fa-car-on::after, .fa-duotone.fa-car-on::after { + content: "\e4dd\e4dd"; } + +.fad.fa-sleigh::after, .fa-duotone.fa-sleigh::after { + content: "\f7cc\f7cc"; } + +.fad.fa-arrow-down-1-9::after, .fa-duotone.fa-arrow-down-1-9::after { + content: "\f162\f162"; } + +.fad.fa-sort-numeric-asc::after, .fa-duotone.fa-sort-numeric-asc::after { + content: "\f162\f162"; } + +.fad.fa-sort-numeric-down::after, .fa-duotone.fa-sort-numeric-down::after { + content: "\f162\f162"; } + +.fad.fa-buoy-mooring::after, .fa-duotone.fa-buoy-mooring::after { + content: "\e5b6\e5b6"; } + +.fad.fa-square-4::after, .fa-duotone.fa-square-4::after { + content: "\e259\e259"; } + +.fad.fa-hand-holding-droplet::after, .fa-duotone.fa-hand-holding-droplet::after { + content: "\f4c1\f4c1"; } + +.fad.fa-hand-holding-water::after, .fa-duotone.fa-hand-holding-water::after { + content: "\f4c1\f4c1"; } + +.fad.fa-tricycle-adult::after, .fa-duotone.fa-tricycle-adult::after { + content: "\e5c4\e5c4"; } + +.fad.fa-waveform::after, .fa-duotone.fa-waveform::after { + content: "\f8f1\f8f1"; } + +.fad.fa-water::after, .fa-duotone.fa-water::after { + content: "\f773\f773"; } + +.fad.fa-star-sharp-half-stroke::after, .fa-duotone.fa-star-sharp-half-stroke::after { + content: "\e28d\e28d"; } + +.fad.fa-star-sharp-half-alt::after, .fa-duotone.fa-star-sharp-half-alt::after { + content: "\e28d\e28d"; } + +.fad.fa-nfc-signal::after, .fa-duotone.fa-nfc-signal::after { + content: "\e1fb\e1fb"; } + +.fad.fa-plane-prop::after, .fa-duotone.fa-plane-prop::after { + content: "\e22b\e22b"; } + +.fad.fa-calendar-check::after, .fa-duotone.fa-calendar-check::after { + content: "\f274\f274"; } + +.fad.fa-clock-desk::after, .fa-duotone.fa-clock-desk::after { + content: "\e134\e134"; } + +.fad.fa-calendar-clock::after, .fa-duotone.fa-calendar-clock::after { + content: "\e0d2\e0d2"; } + +.fad.fa-calendar-time::after, .fa-duotone.fa-calendar-time::after { + content: "\e0d2\e0d2"; } + +.fad.fa-braille::after, .fa-duotone.fa-braille::after { + content: "\f2a1\f2a1"; } + +.fad.fa-prescription-bottle-medical::after, .fa-duotone.fa-prescription-bottle-medical::after { + content: "\f486\f486"; } + +.fad.fa-prescription-bottle-alt::after, .fa-duotone.fa-prescription-bottle-alt::after { + content: "\f486\f486"; } + +.fad.fa-plate-utensils::after, .fa-duotone.fa-plate-utensils::after { + content: "\e43b\e43b"; } + +.fad.fa-family-pants::after, .fa-duotone.fa-family-pants::after { + content: "\e302\e302"; } + +.fad.fa-hose-reel::after, .fa-duotone.fa-hose-reel::after { + content: "\e41a\e41a"; } + +.fad.fa-house-window::after, .fa-duotone.fa-house-window::after { + content: "\e3b3\e3b3"; } + +.fad.fa-landmark::after, .fa-duotone.fa-landmark::after { + content: "\f66f\f66f"; } + +.fad.fa-truck::after, .fa-duotone.fa-truck::after { + content: "\f0d1\f0d1"; } + +.fad.fa-crosshairs::after, .fa-duotone.fa-crosshairs::after { + content: "\f05b\f05b"; } + +.fad.fa-cloud-rainbow::after, .fa-duotone.fa-cloud-rainbow::after { + content: "\f73e\f73e"; } + +.fad.fa-person-cane::after, .fa-duotone.fa-person-cane::after { + content: "\e53c\e53c"; } + +.fad.fa-alien::after, .fa-duotone.fa-alien::after { + content: "\f8f5\f8f5"; } + +.fad.fa-tent::after, .fa-duotone.fa-tent::after { + content: "\e57d\e57d"; } + +.fad.fa-laptop-binary::after, .fa-duotone.fa-laptop-binary::after { + content: "\e5e7\e5e7"; } + +.fad.fa-vest-patches::after, .fa-duotone.fa-vest-patches::after { + content: "\e086\e086"; } + +.fad.fa-people-dress-simple::after, .fa-duotone.fa-people-dress-simple::after { + content: "\e218\e218"; } + +.fad.fa-check-double::after, .fa-duotone.fa-check-double::after { + content: "\f560\f560"; } + +.fad.fa-arrow-down-a-z::after, .fa-duotone.fa-arrow-down-a-z::after { + content: "\f15d\f15d"; } + +.fad.fa-sort-alpha-asc::after, .fa-duotone.fa-sort-alpha-asc::after { + content: "\f15d\f15d"; } + +.fad.fa-sort-alpha-down::after, .fa-duotone.fa-sort-alpha-down::after { + content: "\f15d\f15d"; } + +.fad.fa-bowling-ball-pin::after, .fa-duotone.fa-bowling-ball-pin::after { + content: "\e0c3\e0c3"; } + +.fad.fa-bell-school-slash::after, .fa-duotone.fa-bell-school-slash::after { + content: "\f5d6\f5d6"; } + +.fad.fa-plus-large::after, .fa-duotone.fa-plus-large::after { + content: "\e59e\e59e"; } + +.fad.fa-money-bill-wheat::after, .fa-duotone.fa-money-bill-wheat::after { + content: "\e52a\e52a"; } + +.fad.fa-camera-viewfinder::after, .fa-duotone.fa-camera-viewfinder::after { + content: "\e0da\e0da"; } + +.fad.fa-screenshot::after, .fa-duotone.fa-screenshot::after { + content: "\e0da\e0da"; } + +.fad.fa-message-music::after, .fa-duotone.fa-message-music::after { + content: "\f8af\f8af"; } + +.fad.fa-comment-alt-music::after, .fa-duotone.fa-comment-alt-music::after { + content: "\f8af\f8af"; } + +.fad.fa-car-building::after, .fa-duotone.fa-car-building::after { + content: "\f859\f859"; } + +.fad.fa-border-bottom-right::after, .fa-duotone.fa-border-bottom-right::after { + content: "\f854\f854"; } + +.fad.fa-border-style-alt::after, .fa-duotone.fa-border-style-alt::after { + content: "\f854\f854"; } + +.fad.fa-octagon::after, .fa-duotone.fa-octagon::after { + content: "\f306\f306"; } + +.fad.fa-comment-arrow-up-right::after, .fa-duotone.fa-comment-arrow-up-right::after { + content: "\e145\e145"; } + +.fad.fa-octagon-divide::after, .fa-duotone.fa-octagon-divide::after { + content: "\e203\e203"; } + +.fad.fa-cookie::after, .fa-duotone.fa-cookie::after { + content: "\f563\f563"; } + +.fad.fa-arrow-rotate-left::after, .fa-duotone.fa-arrow-rotate-left::after { + content: "\f0e2\f0e2"; } + +.fad.fa-arrow-left-rotate::after, .fa-duotone.fa-arrow-left-rotate::after { + content: "\f0e2\f0e2"; } + +.fad.fa-arrow-rotate-back::after, .fa-duotone.fa-arrow-rotate-back::after { + content: "\f0e2\f0e2"; } + +.fad.fa-arrow-rotate-backward::after, .fa-duotone.fa-arrow-rotate-backward::after { + content: "\f0e2\f0e2"; } + +.fad.fa-undo::after, .fa-duotone.fa-undo::after { + content: "\f0e2\f0e2"; } + +.fad.fa-tv-music::after, .fa-duotone.fa-tv-music::after { + content: "\f8e6\f8e6"; } + +.fad.fa-hard-drive::after, .fa-duotone.fa-hard-drive::after { + content: "\f0a0\f0a0"; } + +.fad.fa-hdd::after, .fa-duotone.fa-hdd::after { + content: "\f0a0\f0a0"; } + +.fad.fa-reel::after, .fa-duotone.fa-reel::after { + content: "\e238\e238"; } + +.fad.fa-face-grin-squint-tears::after, .fa-duotone.fa-face-grin-squint-tears::after { + content: "\f586\f586"; } + +.fad.fa-grin-squint-tears::after, .fa-duotone.fa-grin-squint-tears::after { + content: "\f586\f586"; } + +.fad.fa-dumbbell::after, .fa-duotone.fa-dumbbell::after { + content: "\f44b\f44b"; } + +.fad.fa-rectangle-list::after, .fa-duotone.fa-rectangle-list::after { + content: "\f022\f022"; } + +.fad.fa-list-alt::after, .fa-duotone.fa-list-alt::after { + content: "\f022\f022"; } + +.fad.fa-tarp-droplet::after, .fa-duotone.fa-tarp-droplet::after { + content: "\e57c\e57c"; } + +.fad.fa-alarm-exclamation::after, .fa-duotone.fa-alarm-exclamation::after { + content: "\f843\f843"; } + +.fad.fa-house-medical-circle-check::after, .fa-duotone.fa-house-medical-circle-check::after { + content: "\e511\e511"; } + +.fad.fa-traffic-cone::after, .fa-duotone.fa-traffic-cone::after { + content: "\f636\f636"; } + +.fad.fa-grate::after, .fa-duotone.fa-grate::after { + content: "\e193\e193"; } + +.fad.fa-arrow-down-right::after, .fa-duotone.fa-arrow-down-right::after { + content: "\e093\e093"; } + +.fad.fa-person-skiing-nordic::after, .fa-duotone.fa-person-skiing-nordic::after { + content: "\f7ca\f7ca"; } + +.fad.fa-skiing-nordic::after, .fa-duotone.fa-skiing-nordic::after { + content: "\f7ca\f7ca"; } + +.fad.fa-calendar-plus::after, .fa-duotone.fa-calendar-plus::after { + content: "\f271\f271"; } + +.fad.fa-person-from-portal::after, .fa-duotone.fa-person-from-portal::after { + content: "\e023\e023"; } + +.fad.fa-portal-exit::after, .fa-duotone.fa-portal-exit::after { + content: "\e023\e023"; } + +.fad.fa-plane-arrival::after, .fa-duotone.fa-plane-arrival::after { + content: "\f5af\f5af"; } + +.fad.fa-cowbell-circle-plus::after, .fa-duotone.fa-cowbell-circle-plus::after { + content: "\f8b4\f8b4"; } + +.fad.fa-cowbell-more::after, .fa-duotone.fa-cowbell-more::after { + content: "\f8b4\f8b4"; } + +.fad.fa-circle-left::after, .fa-duotone.fa-circle-left::after { + content: "\f359\f359"; } + +.fad.fa-arrow-alt-circle-left::after, .fa-duotone.fa-arrow-alt-circle-left::after { + content: "\f359\f359"; } + +.fad.fa-distribute-spacing-vertical::after, .fa-duotone.fa-distribute-spacing-vertical::after { + content: "\e366\e366"; } + +.fad.fa-signal-bars-fair::after, .fa-duotone.fa-signal-bars-fair::after { + content: "\f692\f692"; } + +.fad.fa-signal-alt-2::after, .fa-duotone.fa-signal-alt-2::after { + content: "\f692\f692"; } + +.fad.fa-sportsball::after, .fa-duotone.fa-sportsball::after { + content: "\e44b\e44b"; } + +.fad.fa-game-console-handheld-crank::after, .fa-duotone.fa-game-console-handheld-crank::after { + content: "\e5b9\e5b9"; } + +.fad.fa-train-subway::after, .fa-duotone.fa-train-subway::after { + content: "\f239\f239"; } + +.fad.fa-subway::after, .fa-duotone.fa-subway::after { + content: "\f239\f239"; } + +.fad.fa-chart-gantt::after, .fa-duotone.fa-chart-gantt::after { + content: "\e0e4\e0e4"; } + +.fad.fa-face-smile-upside-down::after, .fa-duotone.fa-face-smile-upside-down::after { + content: "\e395\e395"; } + +.fad.fa-ball-pile::after, .fa-duotone.fa-ball-pile::after { + content: "\f77e\f77e"; } + +.fad.fa-badge-dollar::after, .fa-duotone.fa-badge-dollar::after { + content: "\f645\f645"; } + +.fad.fa-money-bills-simple::after, .fa-duotone.fa-money-bills-simple::after { + content: "\e1f4\e1f4"; } + +.fad.fa-money-bills-alt::after, .fa-duotone.fa-money-bills-alt::after { + content: "\e1f4\e1f4"; } + +.fad.fa-list-timeline::after, .fa-duotone.fa-list-timeline::after { + content: "\e1d1\e1d1"; } + +.fad.fa-indian-rupee-sign::after, .fa-duotone.fa-indian-rupee-sign::after { + content: "\e1bc\e1bc"; } + +.fad.fa-indian-rupee::after, .fa-duotone.fa-indian-rupee::after { + content: "\e1bc\e1bc"; } + +.fad.fa-inr::after, .fa-duotone.fa-inr::after { + content: "\e1bc\e1bc"; } + +.fad.fa-crop-simple::after, .fa-duotone.fa-crop-simple::after { + content: "\f565\f565"; } + +.fad.fa-crop-alt::after, .fa-duotone.fa-crop-alt::after { + content: "\f565\f565"; } + +.fad.fa-money-bill-1::after, .fa-duotone.fa-money-bill-1::after { + content: "\f3d1\f3d1"; } + +.fad.fa-money-bill-alt::after, .fa-duotone.fa-money-bill-alt::after { + content: "\f3d1\f3d1"; } + +.fad.fa-left-long::after, .fa-duotone.fa-left-long::after { + content: "\f30a\f30a"; } + +.fad.fa-long-arrow-alt-left::after, .fa-duotone.fa-long-arrow-alt-left::after { + content: "\f30a\f30a"; } + +.fad.fa-keyboard-down::after, .fa-duotone.fa-keyboard-down::after { + content: "\e1c2\e1c2"; } + +.fad.fa-circle-up-right::after, .fa-duotone.fa-circle-up-right::after { + content: "\e129\e129"; } + +.fad.fa-cloud-bolt-moon::after, .fa-duotone.fa-cloud-bolt-moon::after { + content: "\f76d\f76d"; } + +.fad.fa-thunderstorm-moon::after, .fa-duotone.fa-thunderstorm-moon::after { + content: "\f76d\f76d"; } + +.fad.fa-dna::after, .fa-duotone.fa-dna::after { + content: "\f471\f471"; } + +.fad.fa-virus-slash::after, .fa-duotone.fa-virus-slash::after { + content: "\e075\e075"; } + +.fad.fa-bracket-round-right::after, .fa-duotone.fa-bracket-round-right::after { + content: "\29\29"; } + +.fad.fa-circle-sterling::after, .fa-duotone.fa-circle-sterling::after { + content: "\e5cf\e5cf"; } + +.fad.fa-circle-5::after, .fa-duotone.fa-circle-5::after { + content: "\e0f2\e0f2"; } + +.fad.fa-minus::after, .fa-duotone.fa-minus::after { + content: "\f068\f068"; } + +.fad.fa-subtract::after, .fa-duotone.fa-subtract::after { + content: "\f068\f068"; } + +.fad.fa-fire-flame::after, .fa-duotone.fa-fire-flame::after { + content: "\f6df\f6df"; } + +.fad.fa-flame::after, .fa-duotone.fa-flame::after { + content: "\f6df\f6df"; } + +.fad.fa-right-to-line::after, .fa-duotone.fa-right-to-line::after { + content: "\f34c\f34c"; } + +.fad.fa-arrow-alt-to-right::after, .fa-duotone.fa-arrow-alt-to-right::after { + content: "\f34c\f34c"; } + +.fad.fa-gif::after, .fa-duotone.fa-gif::after { + content: "\e190\e190"; } + +.fad.fa-chess::after, .fa-duotone.fa-chess::after { + content: "\f439\f439"; } + +.fad.fa-trash-slash::after, .fa-duotone.fa-trash-slash::after { + content: "\e2b3\e2b3"; } + +.fad.fa-arrow-left-long::after, .fa-duotone.fa-arrow-left-long::after { + content: "\f177\f177"; } + +.fad.fa-long-arrow-left::after, .fa-duotone.fa-long-arrow-left::after { + content: "\f177\f177"; } + +.fad.fa-plug-circle-check::after, .fa-duotone.fa-plug-circle-check::after { + content: "\e55c\e55c"; } + +.fad.fa-font-case::after, .fa-duotone.fa-font-case::after { + content: "\f866\f866"; } + +.fad.fa-street-view::after, .fa-duotone.fa-street-view::after { + content: "\f21d\f21d"; } + +.fad.fa-arrow-down-left::after, .fa-duotone.fa-arrow-down-left::after { + content: "\e091\e091"; } + +.fad.fa-franc-sign::after, .fa-duotone.fa-franc-sign::after { + content: "\e18f\e18f"; } + +.fad.fa-flask-round-poison::after, .fa-duotone.fa-flask-round-poison::after { + content: "\f6e0\f6e0"; } + +.fad.fa-flask-poison::after, .fa-duotone.fa-flask-poison::after { + content: "\f6e0\f6e0"; } + +.fad.fa-volume-off::after, .fa-duotone.fa-volume-off::after { + content: "\f026\f026"; } + +.fad.fa-book-circle-arrow-right::after, .fa-duotone.fa-book-circle-arrow-right::after { + content: "\e0bc\e0bc"; } + +.fad.fa-chart-user::after, .fa-duotone.fa-chart-user::after { + content: "\f6a3\f6a3"; } + +.fad.fa-user-chart::after, .fa-duotone.fa-user-chart::after { + content: "\f6a3\f6a3"; } + +.fad.fa-hands-asl-interpreting::after, .fa-duotone.fa-hands-asl-interpreting::after { + content: "\f2a3\f2a3"; } + +.fad.fa-american-sign-language-interpreting::after, .fa-duotone.fa-american-sign-language-interpreting::after { + content: "\f2a3\f2a3"; } + +.fad.fa-asl-interpreting::after, .fa-duotone.fa-asl-interpreting::after { + content: "\f2a3\f2a3"; } + +.fad.fa-hands-american-sign-language-interpreting::after, .fa-duotone.fa-hands-american-sign-language-interpreting::after { + content: "\f2a3\f2a3"; } + +.fad.fa-presentation-screen::after, .fa-duotone.fa-presentation-screen::after { + content: "\f685\f685"; } + +.fad.fa-presentation::after, .fa-duotone.fa-presentation::after { + content: "\f685\f685"; } + +.fad.fa-circle-bolt::after, .fa-duotone.fa-circle-bolt::after { + content: "\e0fe\e0fe"; } + +.fad.fa-face-smile-halo::after, .fa-duotone.fa-face-smile-halo::after { + content: "\e38f\e38f"; } + +.fad.fa-cart-circle-arrow-down::after, .fa-duotone.fa-cart-circle-arrow-down::after { + content: "\e3ef\e3ef"; } + +.fad.fa-house-person-return::after, .fa-duotone.fa-house-person-return::after { + content: "\e011\e011"; } + +.fad.fa-house-person-arrive::after, .fa-duotone.fa-house-person-arrive::after { + content: "\e011\e011"; } + +.fad.fa-house-return::after, .fa-duotone.fa-house-return::after { + content: "\e011\e011"; } + +.fad.fa-message-xmark::after, .fa-duotone.fa-message-xmark::after { + content: "\f4ab\f4ab"; } + +.fad.fa-comment-alt-times::after, .fa-duotone.fa-comment-alt-times::after { + content: "\f4ab\f4ab"; } + +.fad.fa-message-times::after, .fa-duotone.fa-message-times::after { + content: "\f4ab\f4ab"; } + +.fad.fa-file-certificate::after, .fa-duotone.fa-file-certificate::after { + content: "\f5f3\f5f3"; } + +.fad.fa-file-award::after, .fa-duotone.fa-file-award::after { + content: "\f5f3\f5f3"; } + +.fad.fa-user-doctor-hair-long::after, .fa-duotone.fa-user-doctor-hair-long::after { + content: "\e459\e459"; } + +.fad.fa-camera-security::after, .fa-duotone.fa-camera-security::after { + content: "\f8fe\f8fe"; } + +.fad.fa-camera-home::after, .fa-duotone.fa-camera-home::after { + content: "\f8fe\f8fe"; } + +.fad.fa-gear::after, .fa-duotone.fa-gear::after { + content: "\f013\f013"; } + +.fad.fa-cog::after, .fa-duotone.fa-cog::after { + content: "\f013\f013"; } + +.fad.fa-droplet-slash::after, .fa-duotone.fa-droplet-slash::after { + content: "\f5c7\f5c7"; } + +.fad.fa-tint-slash::after, .fa-duotone.fa-tint-slash::after { + content: "\f5c7\f5c7"; } + +.fad.fa-book-heart::after, .fa-duotone.fa-book-heart::after { + content: "\f499\f499"; } + +.fad.fa-mosque::after, .fa-duotone.fa-mosque::after { + content: "\f678\f678"; } + +.fad.fa-duck::after, .fa-duotone.fa-duck::after { + content: "\f6d8\f6d8"; } + +.fad.fa-mosquito::after, .fa-duotone.fa-mosquito::after { + content: "\e52b\e52b"; } + +.fad.fa-star-of-david::after, .fa-duotone.fa-star-of-david::after { + content: "\f69a\f69a"; } + +.fad.fa-flag-swallowtail::after, .fa-duotone.fa-flag-swallowtail::after { + content: "\f74c\f74c"; } + +.fad.fa-flag-alt::after, .fa-duotone.fa-flag-alt::after { + content: "\f74c\f74c"; } + +.fad.fa-person-military-rifle::after, .fa-duotone.fa-person-military-rifle::after { + content: "\e54b\e54b"; } + +.fad.fa-car-garage::after, .fa-duotone.fa-car-garage::after { + content: "\f5e2\f5e2"; } + +.fad.fa-cart-shopping::after, .fa-duotone.fa-cart-shopping::after { + content: "\f07a\f07a"; } + +.fad.fa-shopping-cart::after, .fa-duotone.fa-shopping-cart::after { + content: "\f07a\f07a"; } + +.fad.fa-book-font::after, .fa-duotone.fa-book-font::after { + content: "\e0bf\e0bf"; } + +.fad.fa-shield-plus::after, .fa-duotone.fa-shield-plus::after { + content: "\e24a\e24a"; } + +.fad.fa-vials::after, .fa-duotone.fa-vials::after { + content: "\f493\f493"; } + +.fad.fa-eye-dropper-full::after, .fa-duotone.fa-eye-dropper-full::after { + content: "\e172\e172"; } + +.fad.fa-distribute-spacing-horizontal::after, .fa-duotone.fa-distribute-spacing-horizontal::after { + content: "\e365\e365"; } + +.fad.fa-tablet-rugged::after, .fa-duotone.fa-tablet-rugged::after { + content: "\f48f\f48f"; } + +.fad.fa-temperature-snow::after, .fa-duotone.fa-temperature-snow::after { + content: "\f768\f768"; } + +.fad.fa-temperature-frigid::after, .fa-duotone.fa-temperature-frigid::after { + content: "\f768\f768"; } + +.fad.fa-moped::after, .fa-duotone.fa-moped::after { + content: "\e3b9\e3b9"; } + +.fad.fa-face-smile-plus::after, .fa-duotone.fa-face-smile-plus::after { + content: "\f5b9\f5b9"; } + +.fad.fa-smile-plus::after, .fa-duotone.fa-smile-plus::after { + content: "\f5b9\f5b9"; } + +.fad.fa-radio-tuner::after, .fa-duotone.fa-radio-tuner::after { + content: "\f8d8\f8d8"; } + +.fad.fa-radio-alt::after, .fa-duotone.fa-radio-alt::after { + content: "\f8d8\f8d8"; } + +.fad.fa-face-swear::after, .fa-duotone.fa-face-swear::after { + content: "\e399\e399"; } + +.fad.fa-water-arrow-down::after, .fa-duotone.fa-water-arrow-down::after { + content: "\f774\f774"; } + +.fad.fa-water-lower::after, .fa-duotone.fa-water-lower::after { + content: "\f774\f774"; } + +.fad.fa-scanner-touchscreen::after, .fa-duotone.fa-scanner-touchscreen::after { + content: "\f48a\f48a"; } + +.fad.fa-circle-7::after, .fa-duotone.fa-circle-7::after { + content: "\e0f4\e0f4"; } + +.fad.fa-plug-circle-plus::after, .fa-duotone.fa-plug-circle-plus::after { + content: "\e55f\e55f"; } + +.fad.fa-person-ski-jumping::after, .fa-duotone.fa-person-ski-jumping::after { + content: "\f7c7\f7c7"; } + +.fad.fa-ski-jump::after, .fa-duotone.fa-ski-jump::after { + content: "\f7c7\f7c7"; } + +.fad.fa-place-of-worship::after, .fa-duotone.fa-place-of-worship::after { + content: "\f67f\f67f"; } + +.fad.fa-water-arrow-up::after, .fa-duotone.fa-water-arrow-up::after { + content: "\f775\f775"; } + +.fad.fa-water-rise::after, .fa-duotone.fa-water-rise::after { + content: "\f775\f775"; } + +.fad.fa-waveform-lines::after, .fa-duotone.fa-waveform-lines::after { + content: "\f8f2\f8f2"; } + +.fad.fa-waveform-path::after, .fa-duotone.fa-waveform-path::after { + content: "\f8f2\f8f2"; } + +.fad.fa-split::after, .fa-duotone.fa-split::after { + content: "\e254\e254"; } + +.fad.fa-film-canister::after, .fa-duotone.fa-film-canister::after { + content: "\f8b7\f8b7"; } + +.fad.fa-film-cannister::after, .fa-duotone.fa-film-cannister::after { + content: "\f8b7\f8b7"; } + +.fad.fa-folder-xmark::after, .fa-duotone.fa-folder-xmark::after { + content: "\f65f\f65f"; } + +.fad.fa-folder-times::after, .fa-duotone.fa-folder-times::after { + content: "\f65f\f65f"; } + +.fad.fa-toilet-paper-blank::after, .fa-duotone.fa-toilet-paper-blank::after { + content: "\f71f\f71f"; } + +.fad.fa-toilet-paper-alt::after, .fa-duotone.fa-toilet-paper-alt::after { + content: "\f71f\f71f"; } + +.fad.fa-tablet-screen::after, .fa-duotone.fa-tablet-screen::after { + content: "\f3fc\f3fc"; } + +.fad.fa-tablet-android-alt::after, .fa-duotone.fa-tablet-android-alt::after { + content: "\f3fc\f3fc"; } + +.fad.fa-hexagon-vertical-nft-slanted::after, .fa-duotone.fa-hexagon-vertical-nft-slanted::after { + content: "\e506\e506"; } + +.fad.fa-folder-music::after, .fa-duotone.fa-folder-music::after { + content: "\e18d\e18d"; } + +.fad.fa-display-medical::after, .fa-duotone.fa-display-medical::after { + content: "\e166\e166"; } + +.fad.fa-desktop-medical::after, .fa-duotone.fa-desktop-medical::after { + content: "\e166\e166"; } + +.fad.fa-share-all::after, .fa-duotone.fa-share-all::after { + content: "\f367\f367"; } + +.fad.fa-peapod::after, .fa-duotone.fa-peapod::after { + content: "\e31c\e31c"; } + +.fad.fa-chess-clock::after, .fa-duotone.fa-chess-clock::after { + content: "\f43d\f43d"; } + +.fad.fa-axe::after, .fa-duotone.fa-axe::after { + content: "\f6b2\f6b2"; } + +.fad.fa-square-d::after, .fa-duotone.fa-square-d::after { + content: "\e268\e268"; } + +.fad.fa-grip-vertical::after, .fa-duotone.fa-grip-vertical::after { + content: "\f58e\f58e"; } + +.fad.fa-mobile-signal-out::after, .fa-duotone.fa-mobile-signal-out::after { + content: "\e1f0\e1f0"; } + +.fad.fa-arrow-turn-up::after, .fa-duotone.fa-arrow-turn-up::after { + content: "\f148\f148"; } + +.fad.fa-level-up::after, .fa-duotone.fa-level-up::after { + content: "\f148\f148"; } + +.fad.fa-u::after, .fa-duotone.fa-u::after { + content: "\55\55"; } + +.fad.fa-arrow-up-from-dotted-line::after, .fa-duotone.fa-arrow-up-from-dotted-line::after { + content: "\e09b\e09b"; } + +.fad.fa-square-root-variable::after, .fa-duotone.fa-square-root-variable::after { + content: "\f698\f698"; } + +.fad.fa-square-root-alt::after, .fa-duotone.fa-square-root-alt::after { + content: "\f698\f698"; } + +.fad.fa-light-switch-on::after, .fa-duotone.fa-light-switch-on::after { + content: "\e019\e019"; } + +.fad.fa-arrow-down-arrow-up::after, .fa-duotone.fa-arrow-down-arrow-up::after { + content: "\f883\f883"; } + +.fad.fa-sort-alt::after, .fa-duotone.fa-sort-alt::after { + content: "\f883\f883"; } + +.fad.fa-raindrops::after, .fa-duotone.fa-raindrops::after { + content: "\f75c\f75c"; } + +.fad.fa-dash::after, .fa-duotone.fa-dash::after { + content: "\e404\e404"; } + +.fad.fa-minus-large::after, .fa-duotone.fa-minus-large::after { + content: "\e404\e404"; } + +.fad.fa-clock::after, .fa-duotone.fa-clock::after { + content: "\f017\f017"; } + +.fad.fa-clock-four::after, .fa-duotone.fa-clock-four::after { + content: "\f017\f017"; } + +.fad.fa-input-numeric::after, .fa-duotone.fa-input-numeric::after { + content: "\e1bd\e1bd"; } + +.fad.fa-truck-tow::after, .fa-duotone.fa-truck-tow::after { + content: "\e2b8\e2b8"; } + +.fad.fa-backward-step::after, .fa-duotone.fa-backward-step::after { + content: "\f048\f048"; } + +.fad.fa-step-backward::after, .fa-duotone.fa-step-backward::after { + content: "\f048\f048"; } + +.fad.fa-pallet::after, .fa-duotone.fa-pallet::after { + content: "\f482\f482"; } + +.fad.fa-car-bolt::after, .fa-duotone.fa-car-bolt::after { + content: "\e341\e341"; } + +.fad.fa-arrows-maximize::after, .fa-duotone.fa-arrows-maximize::after { + content: "\f31d\f31d"; } + +.fad.fa-expand-arrows::after, .fa-duotone.fa-expand-arrows::after { + content: "\f31d\f31d"; } + +.fad.fa-faucet::after, .fa-duotone.fa-faucet::after { + content: "\e005\e005"; } + +.fad.fa-cloud-sleet::after, .fa-duotone.fa-cloud-sleet::after { + content: "\f741\f741"; } + +.fad.fa-lamp-street::after, .fa-duotone.fa-lamp-street::after { + content: "\e1c5\e1c5"; } + +.fad.fa-list-radio::after, .fa-duotone.fa-list-radio::after { + content: "\e1d0\e1d0"; } + +.fad.fa-pen-nib-slash::after, .fa-duotone.fa-pen-nib-slash::after { + content: "\e4a1\e4a1"; } + +.fad.fa-baseball-bat-ball::after, .fa-duotone.fa-baseball-bat-ball::after { + content: "\f432\f432"; } + +.fad.fa-square-up-left::after, .fa-duotone.fa-square-up-left::after { + content: "\e282\e282"; } + +.fad.fa-overline::after, .fa-duotone.fa-overline::after { + content: "\f876\f876"; } + +.fad.fa-s::after, .fa-duotone.fa-s::after { + content: "\53\53"; } + +.fad.fa-timeline::after, .fa-duotone.fa-timeline::after { + content: "\e29c\e29c"; } + +.fad.fa-keyboard::after, .fa-duotone.fa-keyboard::after { + content: "\f11c\f11c"; } + +.fad.fa-arrows-from-dotted-line::after, .fa-duotone.fa-arrows-from-dotted-line::after { + content: "\e0a3\e0a3"; } + +.fad.fa-usb-drive::after, .fa-duotone.fa-usb-drive::after { + content: "\f8e9\f8e9"; } + +.fad.fa-ballot::after, .fa-duotone.fa-ballot::after { + content: "\f732\f732"; } + +.fad.fa-caret-down::after, .fa-duotone.fa-caret-down::after { + content: "\f0d7\f0d7"; } + +.fad.fa-location-dot-slash::after, .fa-duotone.fa-location-dot-slash::after { + content: "\f605\f605"; } + +.fad.fa-map-marker-alt-slash::after, .fa-duotone.fa-map-marker-alt-slash::after { + content: "\f605\f605"; } + +.fad.fa-cards::after, .fa-duotone.fa-cards::after { + content: "\e3ed\e3ed"; } + +.fad.fa-house-chimney-medical::after, .fa-duotone.fa-house-chimney-medical::after { + content: "\f7f2\f7f2"; } + +.fad.fa-clinic-medical::after, .fa-duotone.fa-clinic-medical::after { + content: "\f7f2\f7f2"; } + +.fad.fa-boxing-glove::after, .fa-duotone.fa-boxing-glove::after { + content: "\f438\f438"; } + +.fad.fa-glove-boxing::after, .fa-duotone.fa-glove-boxing::after { + content: "\f438\f438"; } + +.fad.fa-temperature-three-quarters::after, .fa-duotone.fa-temperature-three-quarters::after { + content: "\f2c8\f2c8"; } + +.fad.fa-temperature-3::after, .fa-duotone.fa-temperature-3::after { + content: "\f2c8\f2c8"; } + +.fad.fa-thermometer-3::after, .fa-duotone.fa-thermometer-3::after { + content: "\f2c8\f2c8"; } + +.fad.fa-thermometer-three-quarters::after, .fa-duotone.fa-thermometer-three-quarters::after { + content: "\f2c8\f2c8"; } + +.fad.fa-bell-school::after, .fa-duotone.fa-bell-school::after { + content: "\f5d5\f5d5"; } + +.fad.fa-mobile-screen::after, .fa-duotone.fa-mobile-screen::after { + content: "\f3cf\f3cf"; } + +.fad.fa-mobile-android-alt::after, .fa-duotone.fa-mobile-android-alt::after { + content: "\f3cf\f3cf"; } + +.fad.fa-plane-up::after, .fa-duotone.fa-plane-up::after { + content: "\e22d\e22d"; } + +.fad.fa-folder-heart::after, .fa-duotone.fa-folder-heart::after { + content: "\e189\e189"; } + +.fad.fa-circle-location-arrow::after, .fa-duotone.fa-circle-location-arrow::after { + content: "\f602\f602"; } + +.fad.fa-location-circle::after, .fa-duotone.fa-location-circle::after { + content: "\f602\f602"; } + +.fad.fa-face-head-bandage::after, .fa-duotone.fa-face-head-bandage::after { + content: "\e37a\e37a"; } + +.fad.fa-sushi-roll::after, .fa-duotone.fa-sushi-roll::after { + content: "\e48b\e48b"; } + +.fad.fa-maki-roll::after, .fa-duotone.fa-maki-roll::after { + content: "\e48b\e48b"; } + +.fad.fa-makizushi::after, .fa-duotone.fa-makizushi::after { + content: "\e48b\e48b"; } + +.fad.fa-car-bump::after, .fa-duotone.fa-car-bump::after { + content: "\f5e0\f5e0"; } + +.fad.fa-piggy-bank::after, .fa-duotone.fa-piggy-bank::after { + content: "\f4d3\f4d3"; } + +.fad.fa-racquet::after, .fa-duotone.fa-racquet::after { + content: "\f45a\f45a"; } + +.fad.fa-car-mirrors::after, .fa-duotone.fa-car-mirrors::after { + content: "\e343\e343"; } + +.fad.fa-industry-windows::after, .fa-duotone.fa-industry-windows::after { + content: "\f3b3\f3b3"; } + +.fad.fa-industry-alt::after, .fa-duotone.fa-industry-alt::after { + content: "\f3b3\f3b3"; } + +.fad.fa-bolt-auto::after, .fa-duotone.fa-bolt-auto::after { + content: "\e0b6\e0b6"; } + +.fad.fa-battery-half::after, .fa-duotone.fa-battery-half::after { + content: "\f242\f242"; } + +.fad.fa-battery-3::after, .fa-duotone.fa-battery-3::after { + content: "\f242\f242"; } + +.fad.fa-flux-capacitor::after, .fa-duotone.fa-flux-capacitor::after { + content: "\f8ba\f8ba"; } + +.fad.fa-mountain-city::after, .fa-duotone.fa-mountain-city::after { + content: "\e52e\e52e"; } + +.fad.fa-coins::after, .fa-duotone.fa-coins::after { + content: "\f51e\f51e"; } + +.fad.fa-honey-pot::after, .fa-duotone.fa-honey-pot::after { + content: "\e418\e418"; } + +.fad.fa-olive::after, .fa-duotone.fa-olive::after { + content: "\e316\e316"; } + +.fad.fa-khanda::after, .fa-duotone.fa-khanda::after { + content: "\f66d\f66d"; } + +.fad.fa-filter-list::after, .fa-duotone.fa-filter-list::after { + content: "\e17c\e17c"; } + +.fad.fa-outlet::after, .fa-duotone.fa-outlet::after { + content: "\e01c\e01c"; } + +.fad.fa-sliders::after, .fa-duotone.fa-sliders::after { + content: "\f1de\f1de"; } + +.fad.fa-sliders-h::after, .fa-duotone.fa-sliders-h::after { + content: "\f1de\f1de"; } + +.fad.fa-cauldron::after, .fa-duotone.fa-cauldron::after { + content: "\f6bf\f6bf"; } + +.fad.fa-people::after, .fa-duotone.fa-people::after { + content: "\e216\e216"; } + +.fad.fa-folder-tree::after, .fa-duotone.fa-folder-tree::after { + content: "\f802\f802"; } + +.fad.fa-network-wired::after, .fa-duotone.fa-network-wired::after { + content: "\f6ff\f6ff"; } + +.fad.fa-croissant::after, .fa-duotone.fa-croissant::after { + content: "\f7f6\f7f6"; } + +.fad.fa-map-pin::after, .fa-duotone.fa-map-pin::after { + content: "\f276\f276"; } + +.fad.fa-hamsa::after, .fa-duotone.fa-hamsa::after { + content: "\f665\f665"; } + +.fad.fa-cent-sign::after, .fa-duotone.fa-cent-sign::after { + content: "\e3f5\e3f5"; } + +.fad.fa-swords-laser::after, .fa-duotone.fa-swords-laser::after { + content: "\e03d\e03d"; } + +.fad.fa-flask::after, .fa-duotone.fa-flask::after { + content: "\f0c3\f0c3"; } + +.fad.fa-person-pregnant::after, .fa-duotone.fa-person-pregnant::after { + content: "\e31e\e31e"; } + +.fad.fa-square-u::after, .fa-duotone.fa-square-u::after { + content: "\e281\e281"; } + +.fad.fa-wand-sparkles::after, .fa-duotone.fa-wand-sparkles::after { + content: "\f72b\f72b"; } + +.fad.fa-router::after, .fa-duotone.fa-router::after { + content: "\f8da\f8da"; } + +.fad.fa-ellipsis-vertical::after, .fa-duotone.fa-ellipsis-vertical::after { + content: "\f142\f142"; } + +.fad.fa-ellipsis-v::after, .fa-duotone.fa-ellipsis-v::after { + content: "\f142\f142"; } + +.fad.fa-sword-laser-alt::after, .fa-duotone.fa-sword-laser-alt::after { + content: "\e03c\e03c"; } + +.fad.fa-ticket::after, .fa-duotone.fa-ticket::after { + content: "\f145\f145"; } + +.fad.fa-power-off::after, .fa-duotone.fa-power-off::after { + content: "\f011\f011"; } + +.fad.fa-coin::after, .fa-duotone.fa-coin::after { + content: "\f85c\f85c"; } + +.fad.fa-laptop-slash::after, .fa-duotone.fa-laptop-slash::after { + content: "\e1c7\e1c7"; } + +.fad.fa-right-long::after, .fa-duotone.fa-right-long::after { + content: "\f30b\f30b"; } + +.fad.fa-long-arrow-alt-right::after, .fa-duotone.fa-long-arrow-alt-right::after { + content: "\f30b\f30b"; } + +.fad.fa-circle-b::after, .fa-duotone.fa-circle-b::after { + content: "\e0fd\e0fd"; } + +.fad.fa-person-dress-simple::after, .fa-duotone.fa-person-dress-simple::after { + content: "\e21c\e21c"; } + +.fad.fa-pipe-collar::after, .fa-duotone.fa-pipe-collar::after { + content: "\e437\e437"; } + +.fad.fa-lights-holiday::after, .fa-duotone.fa-lights-holiday::after { + content: "\f7b2\f7b2"; } + +.fad.fa-citrus::after, .fa-duotone.fa-citrus::after { + content: "\e2f4\e2f4"; } + +.fad.fa-flag-usa::after, .fa-duotone.fa-flag-usa::after { + content: "\f74d\f74d"; } + +.fad.fa-laptop-file::after, .fa-duotone.fa-laptop-file::after { + content: "\e51d\e51d"; } + +.fad.fa-tty::after, .fa-duotone.fa-tty::after { + content: "\f1e4\f1e4"; } + +.fad.fa-teletype::after, .fa-duotone.fa-teletype::after { + content: "\f1e4\f1e4"; } + +.fad.fa-chart-tree-map::after, .fa-duotone.fa-chart-tree-map::after { + content: "\e0ea\e0ea"; } + +.fad.fa-diagram-next::after, .fa-duotone.fa-diagram-next::after { + content: "\e476\e476"; } + +.fad.fa-person-rifle::after, .fa-duotone.fa-person-rifle::after { + content: "\e54e\e54e"; } + +.fad.fa-clock-five-thirty::after, .fa-duotone.fa-clock-five-thirty::after { + content: "\e34a\e34a"; } + +.fad.fa-pipe-valve::after, .fa-duotone.fa-pipe-valve::after { + content: "\e439\e439"; } + +.fad.fa-arrow-up-from-arc::after, .fa-duotone.fa-arrow-up-from-arc::after { + content: "\e4b4\e4b4"; } + +.fad.fa-face-spiral-eyes::after, .fa-duotone.fa-face-spiral-eyes::after { + content: "\e485\e485"; } + +.fad.fa-compress-wide::after, .fa-duotone.fa-compress-wide::after { + content: "\f326\f326"; } + +.fad.fa-circle-phone-hangup::after, .fa-duotone.fa-circle-phone-hangup::after { + content: "\e11d\e11d"; } + +.fad.fa-phone-circle-down::after, .fa-duotone.fa-phone-circle-down::after { + content: "\e11d\e11d"; } + +.fad.fa-gear-complex-code::after, .fa-duotone.fa-gear-complex-code::after { + content: "\e5eb\e5eb"; } + +.fad.fa-house-medical-circle-exclamation::after, .fa-duotone.fa-house-medical-circle-exclamation::after { + content: "\e512\e512"; } + +.fad.fa-badminton::after, .fa-duotone.fa-badminton::after { + content: "\e33a\e33a"; } + +.fad.fa-closed-captioning::after, .fa-duotone.fa-closed-captioning::after { + content: "\f20a\f20a"; } + +.fad.fa-person-hiking::after, .fa-duotone.fa-person-hiking::after { + content: "\f6ec\f6ec"; } + +.fad.fa-hiking::after, .fa-duotone.fa-hiking::after { + content: "\f6ec\f6ec"; } + +.fad.fa-right-from-line::after, .fa-duotone.fa-right-from-line::after { + content: "\f347\f347"; } + +.fad.fa-arrow-alt-from-left::after, .fa-duotone.fa-arrow-alt-from-left::after { + content: "\f347\f347"; } + +.fad.fa-venus-double::after, .fa-duotone.fa-venus-double::after { + content: "\f226\f226"; } + +.fad.fa-images::after, .fa-duotone.fa-images::after { + content: "\f302\f302"; } + +.fad.fa-calculator::after, .fa-duotone.fa-calculator::after { + content: "\f1ec\f1ec"; } + +.fad.fa-shuttlecock::after, .fa-duotone.fa-shuttlecock::after { + content: "\f45b\f45b"; } + +.fad.fa-user-hair::after, .fa-duotone.fa-user-hair::after { + content: "\e45a\e45a"; } + +.fad.fa-eye-evil::after, .fa-duotone.fa-eye-evil::after { + content: "\f6db\f6db"; } + +.fad.fa-people-pulling::after, .fa-duotone.fa-people-pulling::after { + content: "\e535\e535"; } + +.fad.fa-n::after, .fa-duotone.fa-n::after { + content: "\4e\4e"; } + +.fad.fa-swap::after, .fa-duotone.fa-swap::after { + content: "\e609\e609"; } + +.fad.fa-garage::after, .fa-duotone.fa-garage::after { + content: "\e009\e009"; } + +.fad.fa-cable-car::after, .fa-duotone.fa-cable-car::after { + content: "\f7da\f7da"; } + +.fad.fa-tram::after, .fa-duotone.fa-tram::after { + content: "\f7da\f7da"; } + +.fad.fa-shovel-snow::after, .fa-duotone.fa-shovel-snow::after { + content: "\f7c3\f7c3"; } + +.fad.fa-cloud-rain::after, .fa-duotone.fa-cloud-rain::after { + content: "\f73d\f73d"; } + +.fad.fa-face-lying::after, .fa-duotone.fa-face-lying::after { + content: "\e37e\e37e"; } + +.fad.fa-sprinkler::after, .fa-duotone.fa-sprinkler::after { + content: "\e035\e035"; } + +.fad.fa-building-circle-xmark::after, .fa-duotone.fa-building-circle-xmark::after { + content: "\e4d4\e4d4"; } + +.fad.fa-person-sledding::after, .fa-duotone.fa-person-sledding::after { + content: "\f7cb\f7cb"; } + +.fad.fa-sledding::after, .fa-duotone.fa-sledding::after { + content: "\f7cb\f7cb"; } + +.fad.fa-game-console-handheld::after, .fa-duotone.fa-game-console-handheld::after { + content: "\f8bb\f8bb"; } + +.fad.fa-ship::after, .fa-duotone.fa-ship::after { + content: "\f21a\f21a"; } + +.fad.fa-clock-six-thirty::after, .fa-duotone.fa-clock-six-thirty::after { + content: "\e353\e353"; } + +.fad.fa-battery-slash::after, .fa-duotone.fa-battery-slash::after { + content: "\f377\f377"; } + +.fad.fa-tugrik-sign::after, .fa-duotone.fa-tugrik-sign::after { + content: "\e2ba\e2ba"; } + +.fad.fa-arrows-down-to-line::after, .fa-duotone.fa-arrows-down-to-line::after { + content: "\e4b8\e4b8"; } + +.fad.fa-download::after, .fa-duotone.fa-download::after { + content: "\f019\f019"; } + +.fad.fa-angles-up-down::after, .fa-duotone.fa-angles-up-down::after { + content: "\e60d\e60d"; } + +.fad.fa-shelves::after, .fa-duotone.fa-shelves::after { + content: "\f480\f480"; } + +.fad.fa-inventory::after, .fa-duotone.fa-inventory::after { + content: "\f480\f480"; } + +.fad.fa-cloud-snow::after, .fa-duotone.fa-cloud-snow::after { + content: "\f742\f742"; } + +.fad.fa-face-grin::after, .fa-duotone.fa-face-grin::after { + content: "\f580\f580"; } + +.fad.fa-grin::after, .fa-duotone.fa-grin::after { + content: "\f580\f580"; } + +.fad.fa-delete-left::after, .fa-duotone.fa-delete-left::after { + content: "\f55a\f55a"; } + +.fad.fa-backspace::after, .fa-duotone.fa-backspace::after { + content: "\f55a\f55a"; } + +.fad.fa-oven::after, .fa-duotone.fa-oven::after { + content: "\e01d\e01d"; } + +.fad.fa-cloud-binary::after, .fa-duotone.fa-cloud-binary::after { + content: "\e601\e601"; } + +.fad.fa-eye-dropper::after, .fa-duotone.fa-eye-dropper::after { + content: "\f1fb\f1fb"; } + +.fad.fa-eye-dropper-empty::after, .fa-duotone.fa-eye-dropper-empty::after { + content: "\f1fb\f1fb"; } + +.fad.fa-eyedropper::after, .fa-duotone.fa-eyedropper::after { + content: "\f1fb\f1fb"; } + +.fad.fa-comment-captions::after, .fa-duotone.fa-comment-captions::after { + content: "\e146\e146"; } + +.fad.fa-comments-question::after, .fa-duotone.fa-comments-question::after { + content: "\e14e\e14e"; } + +.fad.fa-scribble::after, .fa-duotone.fa-scribble::after { + content: "\e23f\e23f"; } + +.fad.fa-rotate-exclamation::after, .fa-duotone.fa-rotate-exclamation::after { + content: "\e23c\e23c"; } + +.fad.fa-file-circle-check::after, .fa-duotone.fa-file-circle-check::after { + content: "\e5a0\e5a0"; } + +.fad.fa-glass::after, .fa-duotone.fa-glass::after { + content: "\f804\f804"; } + +.fad.fa-loader::after, .fa-duotone.fa-loader::after { + content: "\e1d4\e1d4"; } + +.fad.fa-forward::after, .fa-duotone.fa-forward::after { + content: "\f04e\f04e"; } + +.fad.fa-user-pilot::after, .fa-duotone.fa-user-pilot::after { + content: "\e2c0\e2c0"; } + +.fad.fa-mobile::after, .fa-duotone.fa-mobile::after { + content: "\f3ce\f3ce"; } + +.fad.fa-mobile-android::after, .fa-duotone.fa-mobile-android::after { + content: "\f3ce\f3ce"; } + +.fad.fa-mobile-phone::after, .fa-duotone.fa-mobile-phone::after { + content: "\f3ce\f3ce"; } + +.fad.fa-code-pull-request-closed::after, .fa-duotone.fa-code-pull-request-closed::after { + content: "\e3f9\e3f9"; } + +.fad.fa-face-meh::after, .fa-duotone.fa-face-meh::after { + content: "\f11a\f11a"; } + +.fad.fa-meh::after, .fa-duotone.fa-meh::after { + content: "\f11a\f11a"; } + +.fad.fa-align-center::after, .fa-duotone.fa-align-center::after { + content: "\f037\f037"; } + +.fad.fa-book-skull::after, .fa-duotone.fa-book-skull::after { + content: "\f6b7\f6b7"; } + +.fad.fa-book-dead::after, .fa-duotone.fa-book-dead::after { + content: "\f6b7\f6b7"; } + +.fad.fa-id-card::after, .fa-duotone.fa-id-card::after { + content: "\f2c2\f2c2"; } + +.fad.fa-drivers-license::after, .fa-duotone.fa-drivers-license::after { + content: "\f2c2\f2c2"; } + +.fad.fa-face-dotted::after, .fa-duotone.fa-face-dotted::after { + content: "\e47f\e47f"; } + +.fad.fa-face-worried::after, .fa-duotone.fa-face-worried::after { + content: "\e3a3\e3a3"; } + +.fad.fa-outdent::after, .fa-duotone.fa-outdent::after { + content: "\f03b\f03b"; } + +.fad.fa-dedent::after, .fa-duotone.fa-dedent::after { + content: "\f03b\f03b"; } + +.fad.fa-heart-circle-exclamation::after, .fa-duotone.fa-heart-circle-exclamation::after { + content: "\e4fe\e4fe"; } + +.fad.fa-house::after, .fa-duotone.fa-house::after { + content: "\f015\f015"; } + +.fad.fa-home::after, .fa-duotone.fa-home::after { + content: "\f015\f015"; } + +.fad.fa-home-alt::after, .fa-duotone.fa-home-alt::after { + content: "\f015\f015"; } + +.fad.fa-home-lg-alt::after, .fa-duotone.fa-home-lg-alt::after { + content: "\f015\f015"; } + +.fad.fa-vector-circle::after, .fa-duotone.fa-vector-circle::after { + content: "\e2c6\e2c6"; } + +.fad.fa-car-circle-bolt::after, .fa-duotone.fa-car-circle-bolt::after { + content: "\e342\e342"; } + +.fad.fa-calendar-week::after, .fa-duotone.fa-calendar-week::after { + content: "\f784\f784"; } + +.fad.fa-flying-disc::after, .fa-duotone.fa-flying-disc::after { + content: "\e3a9\e3a9"; } + +.fad.fa-laptop-medical::after, .fa-duotone.fa-laptop-medical::after { + content: "\f812\f812"; } + +.fad.fa-square-down-right::after, .fa-duotone.fa-square-down-right::after { + content: "\e26c\e26c"; } + +.fad.fa-b::after, .fa-duotone.fa-b::after { + content: "\42\42"; } + +.fad.fa-seat-airline::after, .fa-duotone.fa-seat-airline::after { + content: "\e244\e244"; } + +.fad.fa-moon-over-sun::after, .fa-duotone.fa-moon-over-sun::after { + content: "\f74a\f74a"; } + +.fad.fa-eclipse-alt::after, .fa-duotone.fa-eclipse-alt::after { + content: "\f74a\f74a"; } + +.fad.fa-pipe::after, .fa-duotone.fa-pipe::after { + content: "\7c\7c"; } + +.fad.fa-file-medical::after, .fa-duotone.fa-file-medical::after { + content: "\f477\f477"; } + +.fad.fa-potato::after, .fa-duotone.fa-potato::after { + content: "\e440\e440"; } + +.fad.fa-dice-one::after, .fa-duotone.fa-dice-one::after { + content: "\f525\f525"; } + +.fad.fa-circle-a::after, .fa-duotone.fa-circle-a::after { + content: "\e0f7\e0f7"; } + +.fad.fa-helmet-battle::after, .fa-duotone.fa-helmet-battle::after { + content: "\f6eb\f6eb"; } + +.fad.fa-butter::after, .fa-duotone.fa-butter::after { + content: "\e3e4\e3e4"; } + +.fad.fa-blanket-fire::after, .fa-duotone.fa-blanket-fire::after { + content: "\e3da\e3da"; } + +.fad.fa-kiwi-bird::after, .fa-duotone.fa-kiwi-bird::after { + content: "\f535\f535"; } + +.fad.fa-castle::after, .fa-duotone.fa-castle::after { + content: "\e0de\e0de"; } + +.fad.fa-golf-club::after, .fa-duotone.fa-golf-club::after { + content: "\f451\f451"; } + +.fad.fa-arrow-right-arrow-left::after, .fa-duotone.fa-arrow-right-arrow-left::after { + content: "\f0ec\f0ec"; } + +.fad.fa-exchange::after, .fa-duotone.fa-exchange::after { + content: "\f0ec\f0ec"; } + +.fad.fa-rotate-right::after, .fa-duotone.fa-rotate-right::after { + content: "\f2f9\f2f9"; } + +.fad.fa-redo-alt::after, .fa-duotone.fa-redo-alt::after { + content: "\f2f9\f2f9"; } + +.fad.fa-rotate-forward::after, .fa-duotone.fa-rotate-forward::after { + content: "\f2f9\f2f9"; } + +.fad.fa-utensils::after, .fa-duotone.fa-utensils::after { + content: "\f2e7\f2e7"; } + +.fad.fa-cutlery::after, .fa-duotone.fa-cutlery::after { + content: "\f2e7\f2e7"; } + +.fad.fa-arrow-up-wide-short::after, .fa-duotone.fa-arrow-up-wide-short::after { + content: "\f161\f161"; } + +.fad.fa-sort-amount-up::after, .fa-duotone.fa-sort-amount-up::after { + content: "\f161\f161"; } + +.fad.fa-chart-pie-simple-circle-dollar::after, .fa-duotone.fa-chart-pie-simple-circle-dollar::after { + content: "\e605\e605"; } + +.fad.fa-balloons::after, .fa-duotone.fa-balloons::after { + content: "\e2e4\e2e4"; } + +.fad.fa-mill-sign::after, .fa-duotone.fa-mill-sign::after { + content: "\e1ed\e1ed"; } + +.fad.fa-bowl-rice::after, .fa-duotone.fa-bowl-rice::after { + content: "\e2eb\e2eb"; } + +.fad.fa-timeline-arrow::after, .fa-duotone.fa-timeline-arrow::after { + content: "\e29d\e29d"; } + +.fad.fa-skull::after, .fa-duotone.fa-skull::after { + content: "\f54c\f54c"; } + +.fad.fa-game-board-simple::after, .fa-duotone.fa-game-board-simple::after { + content: "\f868\f868"; } + +.fad.fa-game-board-alt::after, .fa-duotone.fa-game-board-alt::after { + content: "\f868\f868"; } + +.fad.fa-circle-video::after, .fa-duotone.fa-circle-video::after { + content: "\e12b\e12b"; } + +.fad.fa-video-circle::after, .fa-duotone.fa-video-circle::after { + content: "\e12b\e12b"; } + +.fad.fa-chart-scatter-bubble::after, .fa-duotone.fa-chart-scatter-bubble::after { + content: "\e0e9\e0e9"; } + +.fad.fa-house-turret::after, .fa-duotone.fa-house-turret::after { + content: "\e1b4\e1b4"; } + +.fad.fa-banana::after, .fa-duotone.fa-banana::after { + content: "\e2e5\e2e5"; } + +.fad.fa-hand-holding-skull::after, .fa-duotone.fa-hand-holding-skull::after { + content: "\e1a4\e1a4"; } + +.fad.fa-people-dress::after, .fa-duotone.fa-people-dress::after { + content: "\e217\e217"; } + +.fad.fa-loveseat::after, .fa-duotone.fa-loveseat::after { + content: "\f4cc\f4cc"; } + +.fad.fa-couch-small::after, .fa-duotone.fa-couch-small::after { + content: "\f4cc\f4cc"; } + +.fad.fa-tower-broadcast::after, .fa-duotone.fa-tower-broadcast::after { + content: "\f519\f519"; } + +.fad.fa-broadcast-tower::after, .fa-duotone.fa-broadcast-tower::after { + content: "\f519\f519"; } + +.fad.fa-truck-pickup::after, .fa-duotone.fa-truck-pickup::after { + content: "\f63c\f63c"; } + +.fad.fa-block-quote::after, .fa-duotone.fa-block-quote::after { + content: "\e0b5\e0b5"; } + +.fad.fa-up-long::after, .fa-duotone.fa-up-long::after { + content: "\f30c\f30c"; } + +.fad.fa-long-arrow-alt-up::after, .fa-duotone.fa-long-arrow-alt-up::after { + content: "\f30c\f30c"; } + +.fad.fa-stop::after, .fa-duotone.fa-stop::after { + content: "\f04d\f04d"; } + +.fad.fa-code-merge::after, .fa-duotone.fa-code-merge::after { + content: "\f387\f387"; } + +.fad.fa-money-check-dollar-pen::after, .fa-duotone.fa-money-check-dollar-pen::after { + content: "\f873\f873"; } + +.fad.fa-money-check-edit-alt::after, .fa-duotone.fa-money-check-edit-alt::after { + content: "\f873\f873"; } + +.fad.fa-up-from-line::after, .fa-duotone.fa-up-from-line::after { + content: "\f346\f346"; } + +.fad.fa-arrow-alt-from-bottom::after, .fa-duotone.fa-arrow-alt-from-bottom::after { + content: "\f346\f346"; } + +.fad.fa-upload::after, .fa-duotone.fa-upload::after { + content: "\f093\f093"; } + +.fad.fa-hurricane::after, .fa-duotone.fa-hurricane::after { + content: "\f751\f751"; } + +.fad.fa-grid-round-2-plus::after, .fa-duotone.fa-grid-round-2-plus::after { + content: "\e5dc\e5dc"; } + +.fad.fa-people-pants::after, .fa-duotone.fa-people-pants::after { + content: "\e219\e219"; } + +.fad.fa-mound::after, .fa-duotone.fa-mound::after { + content: "\e52d\e52d"; } + +.fad.fa-windsock::after, .fa-duotone.fa-windsock::after { + content: "\f777\f777"; } + +.fad.fa-circle-half::after, .fa-duotone.fa-circle-half::after { + content: "\e110\e110"; } + +.fad.fa-brake-warning::after, .fa-duotone.fa-brake-warning::after { + content: "\e0c7\e0c7"; } + +.fad.fa-toilet-portable::after, .fa-duotone.fa-toilet-portable::after { + content: "\e583\e583"; } + +.fad.fa-compact-disc::after, .fa-duotone.fa-compact-disc::after { + content: "\f51f\f51f"; } + +.fad.fa-file-arrow-down::after, .fa-duotone.fa-file-arrow-down::after { + content: "\f56d\f56d"; } + +.fad.fa-file-download::after, .fa-duotone.fa-file-download::after { + content: "\f56d\f56d"; } + +.fad.fa-saxophone-fire::after, .fa-duotone.fa-saxophone-fire::after { + content: "\f8db\f8db"; } + +.fad.fa-sax-hot::after, .fa-duotone.fa-sax-hot::after { + content: "\f8db\f8db"; } + +.fad.fa-camera-web-slash::after, .fa-duotone.fa-camera-web-slash::after { + content: "\f833\f833"; } + +.fad.fa-webcam-slash::after, .fa-duotone.fa-webcam-slash::after { + content: "\f833\f833"; } + +.fad.fa-folder-medical::after, .fa-duotone.fa-folder-medical::after { + content: "\e18c\e18c"; } + +.fad.fa-folder-gear::after, .fa-duotone.fa-folder-gear::after { + content: "\e187\e187"; } + +.fad.fa-folder-cog::after, .fa-duotone.fa-folder-cog::after { + content: "\e187\e187"; } + +.fad.fa-hand-wave::after, .fa-duotone.fa-hand-wave::after { + content: "\e1a7\e1a7"; } + +.fad.fa-arrow-up-arrow-down::after, .fa-duotone.fa-arrow-up-arrow-down::after { + content: "\e099\e099"; } + +.fad.fa-sort-up-down::after, .fa-duotone.fa-sort-up-down::after { + content: "\e099\e099"; } + +.fad.fa-caravan::after, .fa-duotone.fa-caravan::after { + content: "\f8ff\f8ff"; } + +.fad.fa-shield-cat::after, .fa-duotone.fa-shield-cat::after { + content: "\e572\e572"; } + +.fad.fa-message-slash::after, .fa-duotone.fa-message-slash::after { + content: "\f4a9\f4a9"; } + +.fad.fa-comment-alt-slash::after, .fa-duotone.fa-comment-alt-slash::after { + content: "\f4a9\f4a9"; } + +.fad.fa-bolt::after, .fa-duotone.fa-bolt::after { + content: "\f0e7\f0e7"; } + +.fad.fa-zap::after, .fa-duotone.fa-zap::after { + content: "\f0e7\f0e7"; } + +.fad.fa-trash-can-check::after, .fa-duotone.fa-trash-can-check::after { + content: "\e2a9\e2a9"; } + +.fad.fa-glass-water::after, .fa-duotone.fa-glass-water::after { + content: "\e4f4\e4f4"; } + +.fad.fa-oil-well::after, .fa-duotone.fa-oil-well::after { + content: "\e532\e532"; } + +.fad.fa-person-simple::after, .fa-duotone.fa-person-simple::after { + content: "\e220\e220"; } + +.fad.fa-vault::after, .fa-duotone.fa-vault::after { + content: "\e2c5\e2c5"; } + +.fad.fa-mars::after, .fa-duotone.fa-mars::after { + content: "\f222\f222"; } + +.fad.fa-toilet::after, .fa-duotone.fa-toilet::after { + content: "\f7d8\f7d8"; } + +.fad.fa-plane-circle-xmark::after, .fa-duotone.fa-plane-circle-xmark::after { + content: "\e557\e557"; } + +.fad.fa-yen-sign::after, .fa-duotone.fa-yen-sign::after { + content: "\f157\f157"; } + +.fad.fa-cny::after, .fa-duotone.fa-cny::after { + content: "\f157\f157"; } + +.fad.fa-jpy::after, .fa-duotone.fa-jpy::after { + content: "\f157\f157"; } + +.fad.fa-rmb::after, .fa-duotone.fa-rmb::after { + content: "\f157\f157"; } + +.fad.fa-yen::after, .fa-duotone.fa-yen::after { + content: "\f157\f157"; } + +.fad.fa-gear-code::after, .fa-duotone.fa-gear-code::after { + content: "\e5e8\e5e8"; } + +.fad.fa-notes::after, .fa-duotone.fa-notes::after { + content: "\e202\e202"; } + +.fad.fa-ruble-sign::after, .fa-duotone.fa-ruble-sign::after { + content: "\f158\f158"; } + +.fad.fa-rouble::after, .fa-duotone.fa-rouble::after { + content: "\f158\f158"; } + +.fad.fa-rub::after, .fa-duotone.fa-rub::after { + content: "\f158\f158"; } + +.fad.fa-ruble::after, .fa-duotone.fa-ruble::after { + content: "\f158\f158"; } + +.fad.fa-trash-undo::after, .fa-duotone.fa-trash-undo::after { + content: "\f895\f895"; } + +.fad.fa-trash-arrow-turn-left::after, .fa-duotone.fa-trash-arrow-turn-left::after { + content: "\f895\f895"; } + +.fad.fa-champagne-glass::after, .fa-duotone.fa-champagne-glass::after { + content: "\f79e\f79e"; } + +.fad.fa-glass-champagne::after, .fa-duotone.fa-glass-champagne::after { + content: "\f79e\f79e"; } + +.fad.fa-objects-align-center-horizontal::after, .fa-duotone.fa-objects-align-center-horizontal::after { + content: "\e3bc\e3bc"; } + +.fad.fa-sun::after, .fa-duotone.fa-sun::after { + content: "\f185\f185"; } + +.fad.fa-trash-can-slash::after, .fa-duotone.fa-trash-can-slash::after { + content: "\e2ad\e2ad"; } + +.fad.fa-trash-alt-slash::after, .fa-duotone.fa-trash-alt-slash::after { + content: "\e2ad\e2ad"; } + +.fad.fa-screen-users::after, .fa-duotone.fa-screen-users::after { + content: "\f63d\f63d"; } + +.fad.fa-users-class::after, .fa-duotone.fa-users-class::after { + content: "\f63d\f63d"; } + +.fad.fa-guitar::after, .fa-duotone.fa-guitar::after { + content: "\f7a6\f7a6"; } + +.fad.fa-square-arrow-left::after, .fa-duotone.fa-square-arrow-left::after { + content: "\f33a\f33a"; } + +.fad.fa-arrow-square-left::after, .fa-duotone.fa-arrow-square-left::after { + content: "\f33a\f33a"; } + +.fad.fa-square-8::after, .fa-duotone.fa-square-8::after { + content: "\e25d\e25d"; } + +.fad.fa-face-smile-hearts::after, .fa-duotone.fa-face-smile-hearts::after { + content: "\e390\e390"; } + +.fad.fa-brackets-square::after, .fa-duotone.fa-brackets-square::after { + content: "\f7e9\f7e9"; } + +.fad.fa-brackets::after, .fa-duotone.fa-brackets::after { + content: "\f7e9\f7e9"; } + +.fad.fa-laptop-arrow-down::after, .fa-duotone.fa-laptop-arrow-down::after { + content: "\e1c6\e1c6"; } + +.fad.fa-hockey-stick-puck::after, .fa-duotone.fa-hockey-stick-puck::after { + content: "\e3ae\e3ae"; } + +.fad.fa-house-tree::after, .fa-duotone.fa-house-tree::after { + content: "\e1b3\e1b3"; } + +.fad.fa-signal-fair::after, .fa-duotone.fa-signal-fair::after { + content: "\f68d\f68d"; } + +.fad.fa-signal-2::after, .fa-duotone.fa-signal-2::after { + content: "\f68d\f68d"; } + +.fad.fa-face-laugh-wink::after, .fa-duotone.fa-face-laugh-wink::after { + content: "\f59c\f59c"; } + +.fad.fa-laugh-wink::after, .fa-duotone.fa-laugh-wink::after { + content: "\f59c\f59c"; } + +.fad.fa-circle-dollar::after, .fa-duotone.fa-circle-dollar::after { + content: "\f2e8\f2e8"; } + +.fad.fa-dollar-circle::after, .fa-duotone.fa-dollar-circle::after { + content: "\f2e8\f2e8"; } + +.fad.fa-usd-circle::after, .fa-duotone.fa-usd-circle::after { + content: "\f2e8\f2e8"; } + +.fad.fa-horse-head::after, .fa-duotone.fa-horse-head::after { + content: "\f7ab\f7ab"; } + +.fad.fa-arrows-repeat::after, .fa-duotone.fa-arrows-repeat::after { + content: "\f364\f364"; } + +.fad.fa-repeat-alt::after, .fa-duotone.fa-repeat-alt::after { + content: "\f364\f364"; } + +.fad.fa-bore-hole::after, .fa-duotone.fa-bore-hole::after { + content: "\e4c3\e4c3"; } + +.fad.fa-industry::after, .fa-duotone.fa-industry::after { + content: "\f275\f275"; } + +.fad.fa-image-polaroid::after, .fa-duotone.fa-image-polaroid::after { + content: "\f8c4\f8c4"; } + +.fad.fa-wave-triangle::after, .fa-duotone.fa-wave-triangle::after { + content: "\f89a\f89a"; } + +.fad.fa-person-running-fast::after, .fa-duotone.fa-person-running-fast::after { + content: "\e5ff\e5ff"; } + +.fad.fa-circle-down::after, .fa-duotone.fa-circle-down::after { + content: "\f358\f358"; } + +.fad.fa-arrow-alt-circle-down::after, .fa-duotone.fa-arrow-alt-circle-down::after { + content: "\f358\f358"; } + +.fad.fa-grill::after, .fa-duotone.fa-grill::after { + content: "\e5a3\e5a3"; } + +.fad.fa-arrows-turn-to-dots::after, .fa-duotone.fa-arrows-turn-to-dots::after { + content: "\e4c1\e4c1"; } + +.fad.fa-chart-mixed::after, .fa-duotone.fa-chart-mixed::after { + content: "\f643\f643"; } + +.fad.fa-analytics::after, .fa-duotone.fa-analytics::after { + content: "\f643\f643"; } + +.fad.fa-florin-sign::after, .fa-duotone.fa-florin-sign::after { + content: "\e184\e184"; } + +.fad.fa-arrow-down-short-wide::after, .fa-duotone.fa-arrow-down-short-wide::after { + content: "\f884\f884"; } + +.fad.fa-sort-amount-desc::after, .fa-duotone.fa-sort-amount-desc::after { + content: "\f884\f884"; } + +.fad.fa-sort-amount-down-alt::after, .fa-duotone.fa-sort-amount-down-alt::after { + content: "\f884\f884"; } + +.fad.fa-less-than::after, .fa-duotone.fa-less-than::after { + content: "\3c\3c"; } + +.fad.fa-display-code::after, .fa-duotone.fa-display-code::after { + content: "\e165\e165"; } + +.fad.fa-desktop-code::after, .fa-duotone.fa-desktop-code::after { + content: "\e165\e165"; } + +.fad.fa-face-drooling::after, .fa-duotone.fa-face-drooling::after { + content: "\e372\e372"; } + +.fad.fa-oil-temperature::after, .fa-duotone.fa-oil-temperature::after { + content: "\f614\f614"; } + +.fad.fa-oil-temp::after, .fa-duotone.fa-oil-temp::after { + content: "\f614\f614"; } + +.fad.fa-square-question::after, .fa-duotone.fa-square-question::after { + content: "\f2fd\f2fd"; } + +.fad.fa-question-square::after, .fa-duotone.fa-question-square::after { + content: "\f2fd\f2fd"; } + +.fad.fa-air-conditioner::after, .fa-duotone.fa-air-conditioner::after { + content: "\f8f4\f8f4"; } + +.fad.fa-angle-down::after, .fa-duotone.fa-angle-down::after { + content: "\f107\f107"; } + +.fad.fa-mountains::after, .fa-duotone.fa-mountains::after { + content: "\f6fd\f6fd"; } + +.fad.fa-omega::after, .fa-duotone.fa-omega::after { + content: "\f67a\f67a"; } + +.fad.fa-car-tunnel::after, .fa-duotone.fa-car-tunnel::after { + content: "\e4de\e4de"; } + +.fad.fa-person-dolly-empty::after, .fa-duotone.fa-person-dolly-empty::after { + content: "\f4d1\f4d1"; } + +.fad.fa-pan-food::after, .fa-duotone.fa-pan-food::after { + content: "\e42b\e42b"; } + +.fad.fa-head-side-cough::after, .fa-duotone.fa-head-side-cough::after { + content: "\e061\e061"; } + +.fad.fa-grip-lines::after, .fa-duotone.fa-grip-lines::after { + content: "\f7a4\f7a4"; } + +.fad.fa-thumbs-down::after, .fa-duotone.fa-thumbs-down::after { + content: "\f165\f165"; } + +.fad.fa-user-lock::after, .fa-duotone.fa-user-lock::after { + content: "\f502\f502"; } + +.fad.fa-arrow-right-long::after, .fa-duotone.fa-arrow-right-long::after { + content: "\f178\f178"; } + +.fad.fa-long-arrow-right::after, .fa-duotone.fa-long-arrow-right::after { + content: "\f178\f178"; } + +.fad.fa-tickets-airline::after, .fa-duotone.fa-tickets-airline::after { + content: "\e29b\e29b"; } + +.fad.fa-anchor-circle-xmark::after, .fa-duotone.fa-anchor-circle-xmark::after { + content: "\e4ac\e4ac"; } + +.fad.fa-ellipsis::after, .fa-duotone.fa-ellipsis::after { + content: "\f141\f141"; } + +.fad.fa-ellipsis-h::after, .fa-duotone.fa-ellipsis-h::after { + content: "\f141\f141"; } + +.fad.fa-nfc-slash::after, .fa-duotone.fa-nfc-slash::after { + content: "\e1fc\e1fc"; } + +.fad.fa-chess-pawn::after, .fa-duotone.fa-chess-pawn::after { + content: "\f443\f443"; } + +.fad.fa-kit-medical::after, .fa-duotone.fa-kit-medical::after { + content: "\f479\f479"; } + +.fad.fa-first-aid::after, .fa-duotone.fa-first-aid::after { + content: "\f479\f479"; } + +.fad.fa-grid-2-plus::after, .fa-duotone.fa-grid-2-plus::after { + content: "\e197\e197"; } + +.fad.fa-bells::after, .fa-duotone.fa-bells::after { + content: "\f77f\f77f"; } + +.fad.fa-person-through-window::after, .fa-duotone.fa-person-through-window::after { + content: "\e5a9\e5a9"; } + +.fad.fa-toolbox::after, .fa-duotone.fa-toolbox::after { + content: "\f552\f552"; } + +.fad.fa-envelope-dot::after, .fa-duotone.fa-envelope-dot::after { + content: "\e16f\e16f"; } + +.fad.fa-envelope-badge::after, .fa-duotone.fa-envelope-badge::after { + content: "\e16f\e16f"; } + +.fad.fa-hands-holding-circle::after, .fa-duotone.fa-hands-holding-circle::after { + content: "\e4fb\e4fb"; } + +.fad.fa-bug::after, .fa-duotone.fa-bug::after { + content: "\f188\f188"; } + +.fad.fa-bowl-chopsticks::after, .fa-duotone.fa-bowl-chopsticks::after { + content: "\e2e9\e2e9"; } + +.fad.fa-credit-card::after, .fa-duotone.fa-credit-card::after { + content: "\f09d\f09d"; } + +.fad.fa-credit-card-alt::after, .fa-duotone.fa-credit-card-alt::after { + content: "\f09d\f09d"; } + +.fad.fa-circle-s::after, .fa-duotone.fa-circle-s::after { + content: "\e121\e121"; } + +.fad.fa-box-ballot::after, .fa-duotone.fa-box-ballot::after { + content: "\f735\f735"; } + +.fad.fa-car::after, .fa-duotone.fa-car::after { + content: "\f1b9\f1b9"; } + +.fad.fa-automobile::after, .fa-duotone.fa-automobile::after { + content: "\f1b9\f1b9"; } + +.fad.fa-hand-holding-hand::after, .fa-duotone.fa-hand-holding-hand::after { + content: "\e4f7\e4f7"; } + +.fad.fa-user-tie-hair::after, .fa-duotone.fa-user-tie-hair::after { + content: "\e45f\e45f"; } + +.fad.fa-podium-star::after, .fa-duotone.fa-podium-star::after { + content: "\f758\f758"; } + +.fad.fa-user-hair-mullet::after, .fa-duotone.fa-user-hair-mullet::after { + content: "\e45c\e45c"; } + +.fad.fa-business-front::after, .fa-duotone.fa-business-front::after { + content: "\e45c\e45c"; } + +.fad.fa-party-back::after, .fa-duotone.fa-party-back::after { + content: "\e45c\e45c"; } + +.fad.fa-trian-balbot::after, .fa-duotone.fa-trian-balbot::after { + content: "\e45c\e45c"; } + +.fad.fa-microphone-stand::after, .fa-duotone.fa-microphone-stand::after { + content: "\f8cb\f8cb"; } + +.fad.fa-book-open-reader::after, .fa-duotone.fa-book-open-reader::after { + content: "\f5da\f5da"; } + +.fad.fa-book-reader::after, .fa-duotone.fa-book-reader::after { + content: "\f5da\f5da"; } + +.fad.fa-family-dress::after, .fa-duotone.fa-family-dress::after { + content: "\e301\e301"; } + +.fad.fa-circle-x::after, .fa-duotone.fa-circle-x::after { + content: "\e12e\e12e"; } + +.fad.fa-cabin::after, .fa-duotone.fa-cabin::after { + content: "\e46d\e46d"; } + +.fad.fa-mountain-sun::after, .fa-duotone.fa-mountain-sun::after { + content: "\e52f\e52f"; } + +.fad.fa-chart-simple-horizontal::after, .fa-duotone.fa-chart-simple-horizontal::after { + content: "\e474\e474"; } + +.fad.fa-arrows-left-right-to-line::after, .fa-duotone.fa-arrows-left-right-to-line::after { + content: "\e4ba\e4ba"; } + +.fad.fa-hand-back-point-left::after, .fa-duotone.fa-hand-back-point-left::after { + content: "\e19f\e19f"; } + +.fad.fa-message-dots::after, .fa-duotone.fa-message-dots::after { + content: "\f4a3\f4a3"; } + +.fad.fa-comment-alt-dots::after, .fa-duotone.fa-comment-alt-dots::after { + content: "\f4a3\f4a3"; } + +.fad.fa-messaging::after, .fa-duotone.fa-messaging::after { + content: "\f4a3\f4a3"; } + +.fad.fa-file-heart::after, .fa-duotone.fa-file-heart::after { + content: "\e176\e176"; } + +.fad.fa-beer-mug::after, .fa-duotone.fa-beer-mug::after { + content: "\e0b3\e0b3"; } + +.fad.fa-beer-foam::after, .fa-duotone.fa-beer-foam::after { + content: "\e0b3\e0b3"; } + +.fad.fa-dice-d20::after, .fa-duotone.fa-dice-d20::after { + content: "\f6cf\f6cf"; } + +.fad.fa-drone::after, .fa-duotone.fa-drone::after { + content: "\f85f\f85f"; } + +.fad.fa-truck-droplet::after, .fa-duotone.fa-truck-droplet::after { + content: "\e58c\e58c"; } + +.fad.fa-file-circle-xmark::after, .fa-duotone.fa-file-circle-xmark::after { + content: "\e5a1\e5a1"; } + +.fad.fa-temperature-arrow-up::after, .fa-duotone.fa-temperature-arrow-up::after { + content: "\e040\e040"; } + +.fad.fa-temperature-up::after, .fa-duotone.fa-temperature-up::after { + content: "\e040\e040"; } + +.fad.fa-medal::after, .fa-duotone.fa-medal::after { + content: "\f5a2\f5a2"; } + +.fad.fa-person-fairy::after, .fa-duotone.fa-person-fairy::after { + content: "\e608\e608"; } + +.fad.fa-bed::after, .fa-duotone.fa-bed::after { + content: "\f236\f236"; } + +.fad.fa-book-copy::after, .fa-duotone.fa-book-copy::after { + content: "\e0be\e0be"; } + +.fad.fa-square-h::after, .fa-duotone.fa-square-h::after { + content: "\f0fd\f0fd"; } + +.fad.fa-h-square::after, .fa-duotone.fa-h-square::after { + content: "\f0fd\f0fd"; } + +.fad.fa-square-c::after, .fa-duotone.fa-square-c::after { + content: "\e266\e266"; } + +.fad.fa-clock-two::after, .fa-duotone.fa-clock-two::after { + content: "\e35a\e35a"; } + +.fad.fa-square-ellipsis-vertical::after, .fa-duotone.fa-square-ellipsis-vertical::after { + content: "\e26f\e26f"; } + +.fad.fa-calendar-users::after, .fa-duotone.fa-calendar-users::after { + content: "\e5e2\e5e2"; } + +.fad.fa-podcast::after, .fa-duotone.fa-podcast::after { + content: "\f2ce\f2ce"; } + +.fad.fa-bee::after, .fa-duotone.fa-bee::after { + content: "\e0b2\e0b2"; } + +.fad.fa-temperature-full::after, .fa-duotone.fa-temperature-full::after { + content: "\f2c7\f2c7"; } + +.fad.fa-temperature-4::after, .fa-duotone.fa-temperature-4::after { + content: "\f2c7\f2c7"; } + +.fad.fa-thermometer-4::after, .fa-duotone.fa-thermometer-4::after { + content: "\f2c7\f2c7"; } + +.fad.fa-thermometer-full::after, .fa-duotone.fa-thermometer-full::after { + content: "\f2c7\f2c7"; } + +.fad.fa-bell::after, .fa-duotone.fa-bell::after { + content: "\f0f3\f0f3"; } + +.fad.fa-candy-bar::after, .fa-duotone.fa-candy-bar::after { + content: "\e3e8\e3e8"; } + +.fad.fa-chocolate-bar::after, .fa-duotone.fa-chocolate-bar::after { + content: "\e3e8\e3e8"; } + +.fad.fa-xmark-large::after, .fa-duotone.fa-xmark-large::after { + content: "\e59b\e59b"; } + +.fad.fa-pinata::after, .fa-duotone.fa-pinata::after { + content: "\e3c3\e3c3"; } + +.fad.fa-arrows-from-line::after, .fa-duotone.fa-arrows-from-line::after { + content: "\e0a4\e0a4"; } + +.fad.fa-superscript::after, .fa-duotone.fa-superscript::after { + content: "\f12b\f12b"; } + +.fad.fa-bowl-spoon::after, .fa-duotone.fa-bowl-spoon::after { + content: "\e3e0\e3e0"; } + +.fad.fa-hexagon-check::after, .fa-duotone.fa-hexagon-check::after { + content: "\e416\e416"; } + +.fad.fa-plug-circle-xmark::after, .fa-duotone.fa-plug-circle-xmark::after { + content: "\e560\e560"; } + +.fad.fa-star-of-life::after, .fa-duotone.fa-star-of-life::after { + content: "\f621\f621"; } + +.fad.fa-phone-slash::after, .fa-duotone.fa-phone-slash::after { + content: "\f3dd\f3dd"; } + +.fad.fa-traffic-light-stop::after, .fa-duotone.fa-traffic-light-stop::after { + content: "\f63a\f63a"; } + +.fad.fa-paint-roller::after, .fa-duotone.fa-paint-roller::after { + content: "\f5aa\f5aa"; } + +.fad.fa-accent-grave::after, .fa-duotone.fa-accent-grave::after { + content: "\60\60"; } + +.fad.fa-handshake-angle::after, .fa-duotone.fa-handshake-angle::after { + content: "\f4c4\f4c4"; } + +.fad.fa-hands-helping::after, .fa-duotone.fa-hands-helping::after { + content: "\f4c4\f4c4"; } + +.fad.fa-circle-0::after, .fa-duotone.fa-circle-0::after { + content: "\e0ed\e0ed"; } + +.fad.fa-dial-med-low::after, .fa-duotone.fa-dial-med-low::after { + content: "\e160\e160"; } + +.fad.fa-location-dot::after, .fa-duotone.fa-location-dot::after { + content: "\f3c5\f3c5"; } + +.fad.fa-map-marker-alt::after, .fa-duotone.fa-map-marker-alt::after { + content: "\f3c5\f3c5"; } + +.fad.fa-crab::after, .fa-duotone.fa-crab::after { + content: "\e3ff\e3ff"; } + +.fad.fa-box-open-full::after, .fa-duotone.fa-box-open-full::after { + content: "\f49c\f49c"; } + +.fad.fa-box-full::after, .fa-duotone.fa-box-full::after { + content: "\f49c\f49c"; } + +.fad.fa-file::after, .fa-duotone.fa-file::after { + content: "\f15b\f15b"; } + +.fad.fa-greater-than::after, .fa-duotone.fa-greater-than::after { + content: "\3e\3e"; } + +.fad.fa-quotes::after, .fa-duotone.fa-quotes::after { + content: "\e234\e234"; } + +.fad.fa-pretzel::after, .fa-duotone.fa-pretzel::after { + content: "\e441\e441"; } + +.fad.fa-person-swimming::after, .fa-duotone.fa-person-swimming::after { + content: "\f5c4\f5c4"; } + +.fad.fa-swimmer::after, .fa-duotone.fa-swimmer::after { + content: "\f5c4\f5c4"; } + +.fad.fa-arrow-down::after, .fa-duotone.fa-arrow-down::after { + content: "\f063\f063"; } + +.fad.fa-user-robot-xmarks::after, .fa-duotone.fa-user-robot-xmarks::after { + content: "\e4a7\e4a7"; } + +.fad.fa-message-quote::after, .fa-duotone.fa-message-quote::after { + content: "\e1e4\e1e4"; } + +.fad.fa-comment-alt-quote::after, .fa-duotone.fa-comment-alt-quote::after { + content: "\e1e4\e1e4"; } + +.fad.fa-candy-corn::after, .fa-duotone.fa-candy-corn::after { + content: "\f6bd\f6bd"; } + +.fad.fa-folder-magnifying-glass::after, .fa-duotone.fa-folder-magnifying-glass::after { + content: "\e18b\e18b"; } + +.fad.fa-folder-search::after, .fa-duotone.fa-folder-search::after { + content: "\e18b\e18b"; } + +.fad.fa-notebook::after, .fa-duotone.fa-notebook::after { + content: "\e201\e201"; } + +.fad.fa-droplet::after, .fa-duotone.fa-droplet::after { + content: "\f043\f043"; } + +.fad.fa-tint::after, .fa-duotone.fa-tint::after { + content: "\f043\f043"; } + +.fad.fa-bullseye-pointer::after, .fa-duotone.fa-bullseye-pointer::after { + content: "\f649\f649"; } + +.fad.fa-eraser::after, .fa-duotone.fa-eraser::after { + content: "\f12d\f12d"; } + +.fad.fa-hexagon-image::after, .fa-duotone.fa-hexagon-image::after { + content: "\e504\e504"; } + +.fad.fa-earth-americas::after, .fa-duotone.fa-earth-americas::after { + content: "\f57d\f57d"; } + +.fad.fa-earth::after, .fa-duotone.fa-earth::after { + content: "\f57d\f57d"; } + +.fad.fa-earth-america::after, .fa-duotone.fa-earth-america::after { + content: "\f57d\f57d"; } + +.fad.fa-globe-americas::after, .fa-duotone.fa-globe-americas::after { + content: "\f57d\f57d"; } + +.fad.fa-crate-apple::after, .fa-duotone.fa-crate-apple::after { + content: "\f6b1\f6b1"; } + +.fad.fa-apple-crate::after, .fa-duotone.fa-apple-crate::after { + content: "\f6b1\f6b1"; } + +.fad.fa-person-burst::after, .fa-duotone.fa-person-burst::after { + content: "\e53b\e53b"; } + +.fad.fa-game-board::after, .fa-duotone.fa-game-board::after { + content: "\f867\f867"; } + +.fad.fa-hat-chef::after, .fa-duotone.fa-hat-chef::after { + content: "\f86b\f86b"; } + +.fad.fa-hand-back-point-right::after, .fa-duotone.fa-hand-back-point-right::after { + content: "\e1a1\e1a1"; } + +.fad.fa-dove::after, .fa-duotone.fa-dove::after { + content: "\f4ba\f4ba"; } + +.fad.fa-snowflake-droplets::after, .fa-duotone.fa-snowflake-droplets::after { + content: "\e5c1\e5c1"; } + +.fad.fa-battery-empty::after, .fa-duotone.fa-battery-empty::after { + content: "\f244\f244"; } + +.fad.fa-battery-0::after, .fa-duotone.fa-battery-0::after { + content: "\f244\f244"; } + +.fad.fa-grid-4::after, .fa-duotone.fa-grid-4::after { + content: "\e198\e198"; } + +.fad.fa-socks::after, .fa-duotone.fa-socks::after { + content: "\f696\f696"; } + +.fad.fa-face-sunglasses::after, .fa-duotone.fa-face-sunglasses::after { + content: "\e398\e398"; } + +.fad.fa-inbox::after, .fa-duotone.fa-inbox::after { + content: "\f01c\f01c"; } + +.fad.fa-square-0::after, .fa-duotone.fa-square-0::after { + content: "\e255\e255"; } + +.fad.fa-section::after, .fa-duotone.fa-section::after { + content: "\e447\e447"; } + +.fad.fa-square-this-way-up::after, .fa-duotone.fa-square-this-way-up::after { + content: "\f49f\f49f"; } + +.fad.fa-box-up::after, .fa-duotone.fa-box-up::after { + content: "\f49f\f49f"; } + +.fad.fa-gauge-high::after, .fa-duotone.fa-gauge-high::after { + content: "\f625\f625"; } + +.fad.fa-tachometer-alt::after, .fa-duotone.fa-tachometer-alt::after { + content: "\f625\f625"; } + +.fad.fa-tachometer-alt-fast::after, .fa-duotone.fa-tachometer-alt-fast::after { + content: "\f625\f625"; } + +.fad.fa-square-ampersand::after, .fa-duotone.fa-square-ampersand::after { + content: "\e260\e260"; } + +.fad.fa-envelope-open-text::after, .fa-duotone.fa-envelope-open-text::after { + content: "\f658\f658"; } + +.fad.fa-lamp-desk::after, .fa-duotone.fa-lamp-desk::after { + content: "\e014\e014"; } + +.fad.fa-hospital::after, .fa-duotone.fa-hospital::after { + content: "\f0f8\f0f8"; } + +.fad.fa-hospital-alt::after, .fa-duotone.fa-hospital-alt::after { + content: "\f0f8\f0f8"; } + +.fad.fa-hospital-wide::after, .fa-duotone.fa-hospital-wide::after { + content: "\f0f8\f0f8"; } + +.fad.fa-poll-people::after, .fa-duotone.fa-poll-people::after { + content: "\f759\f759"; } + +.fad.fa-whiskey-glass-ice::after, .fa-duotone.fa-whiskey-glass-ice::after { + content: "\f7a1\f7a1"; } + +.fad.fa-glass-whiskey-rocks::after, .fa-duotone.fa-glass-whiskey-rocks::after { + content: "\f7a1\f7a1"; } + +.fad.fa-wine-bottle::after, .fa-duotone.fa-wine-bottle::after { + content: "\f72f\f72f"; } + +.fad.fa-chess-rook::after, .fa-duotone.fa-chess-rook::after { + content: "\f447\f447"; } + +.fad.fa-user-bounty-hunter::after, .fa-duotone.fa-user-bounty-hunter::after { + content: "\e2bf\e2bf"; } + +.fad.fa-bars-staggered::after, .fa-duotone.fa-bars-staggered::after { + content: "\f550\f550"; } + +.fad.fa-reorder::after, .fa-duotone.fa-reorder::after { + content: "\f550\f550"; } + +.fad.fa-stream::after, .fa-duotone.fa-stream::after { + content: "\f550\f550"; } + +.fad.fa-diagram-sankey::after, .fa-duotone.fa-diagram-sankey::after { + content: "\e158\e158"; } + +.fad.fa-cloud-hail-mixed::after, .fa-duotone.fa-cloud-hail-mixed::after { + content: "\f73a\f73a"; } + +.fad.fa-circle-up-left::after, .fa-duotone.fa-circle-up-left::after { + content: "\e128\e128"; } + +.fad.fa-dharmachakra::after, .fa-duotone.fa-dharmachakra::after { + content: "\f655\f655"; } + +.fad.fa-objects-align-left::after, .fa-duotone.fa-objects-align-left::after { + content: "\e3be\e3be"; } + +.fad.fa-oil-can-drip::after, .fa-duotone.fa-oil-can-drip::after { + content: "\e205\e205"; } + +.fad.fa-face-smiling-hands::after, .fa-duotone.fa-face-smiling-hands::after { + content: "\e396\e396"; } + +.fad.fa-broccoli::after, .fa-duotone.fa-broccoli::after { + content: "\e3e2\e3e2"; } + +.fad.fa-route-interstate::after, .fa-duotone.fa-route-interstate::after { + content: "\f61b\f61b"; } + +.fad.fa-ear-muffs::after, .fa-duotone.fa-ear-muffs::after { + content: "\f795\f795"; } + +.fad.fa-hotdog::after, .fa-duotone.fa-hotdog::after { + content: "\f80f\f80f"; } + +.fad.fa-transporter-empty::after, .fa-duotone.fa-transporter-empty::after { + content: "\e046\e046"; } + +.fad.fa-person-walking-with-cane::after, .fa-duotone.fa-person-walking-with-cane::after { + content: "\f29d\f29d"; } + +.fad.fa-blind::after, .fa-duotone.fa-blind::after { + content: "\f29d\f29d"; } + +.fad.fa-angle-90::after, .fa-duotone.fa-angle-90::after { + content: "\e08d\e08d"; } + +.fad.fa-rectangle-terminal::after, .fa-duotone.fa-rectangle-terminal::after { + content: "\e236\e236"; } + +.fad.fa-kite::after, .fa-duotone.fa-kite::after { + content: "\f6f4\f6f4"; } + +.fad.fa-drum::after, .fa-duotone.fa-drum::after { + content: "\f569\f569"; } + +.fad.fa-scrubber::after, .fa-duotone.fa-scrubber::after { + content: "\f2f8\f2f8"; } + +.fad.fa-ice-cream::after, .fa-duotone.fa-ice-cream::after { + content: "\f810\f810"; } + +.fad.fa-heart-circle-bolt::after, .fa-duotone.fa-heart-circle-bolt::after { + content: "\e4fc\e4fc"; } + +.fad.fa-fish-bones::after, .fa-duotone.fa-fish-bones::after { + content: "\e304\e304"; } + +.fad.fa-deer-rudolph::after, .fa-duotone.fa-deer-rudolph::after { + content: "\f78f\f78f"; } + +.fad.fa-fax::after, .fa-duotone.fa-fax::after { + content: "\f1ac\f1ac"; } + +.fad.fa-paragraph::after, .fa-duotone.fa-paragraph::after { + content: "\f1dd\f1dd"; } + +.fad.fa-head-side-heart::after, .fa-duotone.fa-head-side-heart::after { + content: "\e1aa\e1aa"; } + +.fad.fa-square-e::after, .fa-duotone.fa-square-e::after { + content: "\e26d\e26d"; } + +.fad.fa-meter-fire::after, .fa-duotone.fa-meter-fire::after { + content: "\e1eb\e1eb"; } + +.fad.fa-cloud-hail::after, .fa-duotone.fa-cloud-hail::after { + content: "\f739\f739"; } + +.fad.fa-check-to-slot::after, .fa-duotone.fa-check-to-slot::after { + content: "\f772\f772"; } + +.fad.fa-vote-yea::after, .fa-duotone.fa-vote-yea::after { + content: "\f772\f772"; } + +.fad.fa-money-from-bracket::after, .fa-duotone.fa-money-from-bracket::after { + content: "\e312\e312"; } + +.fad.fa-star-half::after, .fa-duotone.fa-star-half::after { + content: "\f089\f089"; } + +.fad.fa-car-bus::after, .fa-duotone.fa-car-bus::after { + content: "\f85a\f85a"; } + +.fad.fa-speaker::after, .fa-duotone.fa-speaker::after { + content: "\f8df\f8df"; } + +.fad.fa-timer::after, .fa-duotone.fa-timer::after { + content: "\e29e\e29e"; } + +.fad.fa-boxes-stacked::after, .fa-duotone.fa-boxes-stacked::after { + content: "\f468\f468"; } + +.fad.fa-boxes::after, .fa-duotone.fa-boxes::after { + content: "\f468\f468"; } + +.fad.fa-boxes-alt::after, .fa-duotone.fa-boxes-alt::after { + content: "\f468\f468"; } + +.fad.fa-grill-hot::after, .fa-duotone.fa-grill-hot::after { + content: "\e5a5\e5a5"; } + +.fad.fa-ballot-check::after, .fa-duotone.fa-ballot-check::after { + content: "\f733\f733"; } + +.fad.fa-link::after, .fa-duotone.fa-link::after { + content: "\f0c1\f0c1"; } + +.fad.fa-chain::after, .fa-duotone.fa-chain::after { + content: "\f0c1\f0c1"; } + +.fad.fa-ear-listen::after, .fa-duotone.fa-ear-listen::after { + content: "\f2a2\f2a2"; } + +.fad.fa-assistive-listening-systems::after, .fa-duotone.fa-assistive-listening-systems::after { + content: "\f2a2\f2a2"; } + +.fad.fa-file-minus::after, .fa-duotone.fa-file-minus::after { + content: "\f318\f318"; } + +.fad.fa-tree-city::after, .fa-duotone.fa-tree-city::after { + content: "\e587\e587"; } + +.fad.fa-play::after, .fa-duotone.fa-play::after { + content: "\f04b\f04b"; } + +.fad.fa-font::after, .fa-duotone.fa-font::after { + content: "\f031\f031"; } + +.fad.fa-cup-togo::after, .fa-duotone.fa-cup-togo::after { + content: "\f6c5\f6c5"; } + +.fad.fa-coffee-togo::after, .fa-duotone.fa-coffee-togo::after { + content: "\f6c5\f6c5"; } + +.fad.fa-square-down-left::after, .fa-duotone.fa-square-down-left::after { + content: "\e26b\e26b"; } + +.fad.fa-burger-lettuce::after, .fa-duotone.fa-burger-lettuce::after { + content: "\e3e3\e3e3"; } + +.fad.fa-rupiah-sign::after, .fa-duotone.fa-rupiah-sign::after { + content: "\e23d\e23d"; } + +.fad.fa-magnifying-glass::after, .fa-duotone.fa-magnifying-glass::after { + content: "\f002\f002"; } + +.fad.fa-search::after, .fa-duotone.fa-search::after { + content: "\f002\f002"; } + +.fad.fa-table-tennis-paddle-ball::after, .fa-duotone.fa-table-tennis-paddle-ball::after { + content: "\f45d\f45d"; } + +.fad.fa-ping-pong-paddle-ball::after, .fa-duotone.fa-ping-pong-paddle-ball::after { + content: "\f45d\f45d"; } + +.fad.fa-table-tennis::after, .fa-duotone.fa-table-tennis::after { + content: "\f45d\f45d"; } + +.fad.fa-person-dots-from-line::after, .fa-duotone.fa-person-dots-from-line::after { + content: "\f470\f470"; } + +.fad.fa-diagnoses::after, .fa-duotone.fa-diagnoses::after { + content: "\f470\f470"; } + +.fad.fa-chevrons-down::after, .fa-duotone.fa-chevrons-down::after { + content: "\f322\f322"; } + +.fad.fa-chevron-double-down::after, .fa-duotone.fa-chevron-double-down::after { + content: "\f322\f322"; } + +.fad.fa-trash-can-arrow-up::after, .fa-duotone.fa-trash-can-arrow-up::after { + content: "\f82a\f82a"; } + +.fad.fa-trash-restore-alt::after, .fa-duotone.fa-trash-restore-alt::after { + content: "\f82a\f82a"; } + +.fad.fa-signal-good::after, .fa-duotone.fa-signal-good::after { + content: "\f68e\f68e"; } + +.fad.fa-signal-3::after, .fa-duotone.fa-signal-3::after { + content: "\f68e\f68e"; } + +.fad.fa-location-question::after, .fa-duotone.fa-location-question::after { + content: "\f60b\f60b"; } + +.fad.fa-map-marker-question::after, .fa-duotone.fa-map-marker-question::after { + content: "\f60b\f60b"; } + +.fad.fa-floppy-disk-circle-xmark::after, .fa-duotone.fa-floppy-disk-circle-xmark::after { + content: "\e181\e181"; } + +.fad.fa-floppy-disk-times::after, .fa-duotone.fa-floppy-disk-times::after { + content: "\e181\e181"; } + +.fad.fa-save-circle-xmark::after, .fa-duotone.fa-save-circle-xmark::after { + content: "\e181\e181"; } + +.fad.fa-save-times::after, .fa-duotone.fa-save-times::after { + content: "\e181\e181"; } + +.fad.fa-naira-sign::after, .fa-duotone.fa-naira-sign::after { + content: "\e1f6\e1f6"; } + +.fad.fa-peach::after, .fa-duotone.fa-peach::after { + content: "\e20b\e20b"; } + +.fad.fa-taxi-bus::after, .fa-duotone.fa-taxi-bus::after { + content: "\e298\e298"; } + +.fad.fa-bracket-curly::after, .fa-duotone.fa-bracket-curly::after { + content: "\7b\7b"; } + +.fad.fa-bracket-curly-left::after, .fa-duotone.fa-bracket-curly-left::after { + content: "\7b\7b"; } + +.fad.fa-lobster::after, .fa-duotone.fa-lobster::after { + content: "\e421\e421"; } + +.fad.fa-cart-flatbed-empty::after, .fa-duotone.fa-cart-flatbed-empty::after { + content: "\f476\f476"; } + +.fad.fa-dolly-flatbed-empty::after, .fa-duotone.fa-dolly-flatbed-empty::after { + content: "\f476\f476"; } + +.fad.fa-colon::after, .fa-duotone.fa-colon::after { + content: "\3a\3a"; } + +.fad.fa-cart-arrow-down::after, .fa-duotone.fa-cart-arrow-down::after { + content: "\f218\f218"; } + +.fad.fa-wand::after, .fa-duotone.fa-wand::after { + content: "\f72a\f72a"; } + +.fad.fa-walkie-talkie::after, .fa-duotone.fa-walkie-talkie::after { + content: "\f8ef\f8ef"; } + +.fad.fa-file-pen::after, .fa-duotone.fa-file-pen::after { + content: "\f31c\f31c"; } + +.fad.fa-file-edit::after, .fa-duotone.fa-file-edit::after { + content: "\f31c\f31c"; } + +.fad.fa-receipt::after, .fa-duotone.fa-receipt::after { + content: "\f543\f543"; } + +.fad.fa-table-picnic::after, .fa-duotone.fa-table-picnic::after { + content: "\e32d\e32d"; } + +.fad.fa-square-pen::after, .fa-duotone.fa-square-pen::after { + content: "\f14b\f14b"; } + +.fad.fa-pen-square::after, .fa-duotone.fa-pen-square::after { + content: "\f14b\f14b"; } + +.fad.fa-pencil-square::after, .fa-duotone.fa-pencil-square::after { + content: "\f14b\f14b"; } + +.fad.fa-circle-microphone-lines::after, .fa-duotone.fa-circle-microphone-lines::after { + content: "\e117\e117"; } + +.fad.fa-microphone-circle-alt::after, .fa-duotone.fa-microphone-circle-alt::after { + content: "\e117\e117"; } + +.fad.fa-display-slash::after, .fa-duotone.fa-display-slash::after { + content: "\e2fa\e2fa"; } + +.fad.fa-desktop-slash::after, .fa-duotone.fa-desktop-slash::after { + content: "\e2fa\e2fa"; } + +.fad.fa-suitcase-rolling::after, .fa-duotone.fa-suitcase-rolling::after { + content: "\f5c1\f5c1"; } + +.fad.fa-person-circle-exclamation::after, .fa-duotone.fa-person-circle-exclamation::after { + content: "\e53f\e53f"; } + +.fad.fa-transporter-2::after, .fa-duotone.fa-transporter-2::after { + content: "\e044\e044"; } + +.fad.fa-hands-holding-diamond::after, .fa-duotone.fa-hands-holding-diamond::after { + content: "\f47c\f47c"; } + +.fad.fa-hand-receiving::after, .fa-duotone.fa-hand-receiving::after { + content: "\f47c\f47c"; } + +.fad.fa-money-bill-simple-wave::after, .fa-duotone.fa-money-bill-simple-wave::after { + content: "\e1f2\e1f2"; } + +.fad.fa-chevron-down::after, .fa-duotone.fa-chevron-down::after { + content: "\f078\f078"; } + +.fad.fa-battery-full::after, .fa-duotone.fa-battery-full::after { + content: "\f240\f240"; } + +.fad.fa-battery::after, .fa-duotone.fa-battery::after { + content: "\f240\f240"; } + +.fad.fa-battery-5::after, .fa-duotone.fa-battery-5::after { + content: "\f240\f240"; } + +.fad.fa-bell-plus::after, .fa-duotone.fa-bell-plus::after { + content: "\f849\f849"; } + +.fad.fa-book-arrow-right::after, .fa-duotone.fa-book-arrow-right::after { + content: "\e0b9\e0b9"; } + +.fad.fa-hospitals::after, .fa-duotone.fa-hospitals::after { + content: "\f80e\f80e"; } + +.fad.fa-club::after, .fa-duotone.fa-club::after { + content: "\f327\f327"; } + +.fad.fa-skull-crossbones::after, .fa-duotone.fa-skull-crossbones::after { + content: "\f714\f714"; } + +.fad.fa-droplet-degree::after, .fa-duotone.fa-droplet-degree::after { + content: "\f748\f748"; } + +.fad.fa-dewpoint::after, .fa-duotone.fa-dewpoint::after { + content: "\f748\f748"; } + +.fad.fa-code-compare::after, .fa-duotone.fa-code-compare::after { + content: "\e13a\e13a"; } + +.fad.fa-list-ul::after, .fa-duotone.fa-list-ul::after { + content: "\f0ca\f0ca"; } + +.fad.fa-list-dots::after, .fa-duotone.fa-list-dots::after { + content: "\f0ca\f0ca"; } + +.fad.fa-hand-holding-magic::after, .fa-duotone.fa-hand-holding-magic::after { + content: "\f6e5\f6e5"; } + +.fad.fa-watermelon-slice::after, .fa-duotone.fa-watermelon-slice::after { + content: "\e337\e337"; } + +.fad.fa-circle-ellipsis::after, .fa-duotone.fa-circle-ellipsis::after { + content: "\e10a\e10a"; } + +.fad.fa-school-lock::after, .fa-duotone.fa-school-lock::after { + content: "\e56f\e56f"; } + +.fad.fa-tower-cell::after, .fa-duotone.fa-tower-cell::after { + content: "\e585\e585"; } + +.fad.fa-sd-cards::after, .fa-duotone.fa-sd-cards::after { + content: "\e240\e240"; } + +.fad.fa-jug-bottle::after, .fa-duotone.fa-jug-bottle::after { + content: "\e5fb\e5fb"; } + +.fad.fa-down-long::after, .fa-duotone.fa-down-long::after { + content: "\f309\f309"; } + +.fad.fa-long-arrow-alt-down::after, .fa-duotone.fa-long-arrow-alt-down::after { + content: "\f309\f309"; } + +.fad.fa-envelopes::after, .fa-duotone.fa-envelopes::after { + content: "\e170\e170"; } + +.fad.fa-phone-office::after, .fa-duotone.fa-phone-office::after { + content: "\f67d\f67d"; } + +.fad.fa-ranking-star::after, .fa-duotone.fa-ranking-star::after { + content: "\e561\e561"; } + +.fad.fa-chess-king::after, .fa-duotone.fa-chess-king::after { + content: "\f43f\f43f"; } + +.fad.fa-nfc-pen::after, .fa-duotone.fa-nfc-pen::after { + content: "\e1fa\e1fa"; } + +.fad.fa-person-harassing::after, .fa-duotone.fa-person-harassing::after { + content: "\e549\e549"; } + +.fad.fa-hat-winter::after, .fa-duotone.fa-hat-winter::after { + content: "\f7a8\f7a8"; } + +.fad.fa-brazilian-real-sign::after, .fa-duotone.fa-brazilian-real-sign::after { + content: "\e46c\e46c"; } + +.fad.fa-landmark-dome::after, .fa-duotone.fa-landmark-dome::after { + content: "\f752\f752"; } + +.fad.fa-landmark-alt::after, .fa-duotone.fa-landmark-alt::after { + content: "\f752\f752"; } + +.fad.fa-bone-break::after, .fa-duotone.fa-bone-break::after { + content: "\f5d8\f5d8"; } + +.fad.fa-arrow-up::after, .fa-duotone.fa-arrow-up::after { + content: "\f062\f062"; } + +.fad.fa-down-from-dotted-line::after, .fa-duotone.fa-down-from-dotted-line::after { + content: "\e407\e407"; } + +.fad.fa-tv::after, .fa-duotone.fa-tv::after { + content: "\f26c\f26c"; } + +.fad.fa-television::after, .fa-duotone.fa-television::after { + content: "\f26c\f26c"; } + +.fad.fa-tv-alt::after, .fa-duotone.fa-tv-alt::after { + content: "\f26c\f26c"; } + +.fad.fa-border-left::after, .fa-duotone.fa-border-left::after { + content: "\f84f\f84f"; } + +.fad.fa-circle-divide::after, .fa-duotone.fa-circle-divide::after { + content: "\e106\e106"; } + +.fad.fa-shrimp::after, .fa-duotone.fa-shrimp::after { + content: "\e448\e448"; } + +.fad.fa-list-check::after, .fa-duotone.fa-list-check::after { + content: "\f0ae\f0ae"; } + +.fad.fa-tasks::after, .fa-duotone.fa-tasks::after { + content: "\f0ae\f0ae"; } + +.fad.fa-diagram-subtask::after, .fa-duotone.fa-diagram-subtask::after { + content: "\e479\e479"; } + +.fad.fa-jug-detergent::after, .fa-duotone.fa-jug-detergent::after { + content: "\e519\e519"; } + +.fad.fa-circle-user::after, .fa-duotone.fa-circle-user::after { + content: "\f2bd\f2bd"; } + +.fad.fa-user-circle::after, .fa-duotone.fa-user-circle::after { + content: "\f2bd\f2bd"; } + +.fad.fa-square-y::after, .fa-duotone.fa-square-y::after { + content: "\e287\e287"; } + +.fad.fa-user-doctor-hair::after, .fa-duotone.fa-user-doctor-hair::after { + content: "\e458\e458"; } + +.fad.fa-planet-ringed::after, .fa-duotone.fa-planet-ringed::after { + content: "\e020\e020"; } + +.fad.fa-mushroom::after, .fa-duotone.fa-mushroom::after { + content: "\e425\e425"; } + +.fad.fa-user-shield::after, .fa-duotone.fa-user-shield::after { + content: "\f505\f505"; } + +.fad.fa-megaphone::after, .fa-duotone.fa-megaphone::after { + content: "\f675\f675"; } + +.fad.fa-wreath-laurel::after, .fa-duotone.fa-wreath-laurel::after { + content: "\e5d2\e5d2"; } + +.fad.fa-circle-exclamation-check::after, .fa-duotone.fa-circle-exclamation-check::after { + content: "\e10d\e10d"; } + +.fad.fa-wind::after, .fa-duotone.fa-wind::after { + content: "\f72e\f72e"; } + +.fad.fa-box-dollar::after, .fa-duotone.fa-box-dollar::after { + content: "\f4a0\f4a0"; } + +.fad.fa-box-usd::after, .fa-duotone.fa-box-usd::after { + content: "\f4a0\f4a0"; } + +.fad.fa-car-burst::after, .fa-duotone.fa-car-burst::after { + content: "\f5e1\f5e1"; } + +.fad.fa-car-crash::after, .fa-duotone.fa-car-crash::after { + content: "\f5e1\f5e1"; } + +.fad.fa-y::after, .fa-duotone.fa-y::after { + content: "\59\59"; } + +.fad.fa-user-headset::after, .fa-duotone.fa-user-headset::after { + content: "\f82d\f82d"; } + +.fad.fa-arrows-retweet::after, .fa-duotone.fa-arrows-retweet::after { + content: "\f361\f361"; } + +.fad.fa-retweet-alt::after, .fa-duotone.fa-retweet-alt::after { + content: "\f361\f361"; } + +.fad.fa-person-snowboarding::after, .fa-duotone.fa-person-snowboarding::after { + content: "\f7ce\f7ce"; } + +.fad.fa-snowboarding::after, .fa-duotone.fa-snowboarding::after { + content: "\f7ce\f7ce"; } + +.fad.fa-square-chevron-right::after, .fa-duotone.fa-square-chevron-right::after { + content: "\f32b\f32b"; } + +.fad.fa-chevron-square-right::after, .fa-duotone.fa-chevron-square-right::after { + content: "\f32b\f32b"; } + +.fad.fa-lacrosse-stick-ball::after, .fa-duotone.fa-lacrosse-stick-ball::after { + content: "\e3b6\e3b6"; } + +.fad.fa-truck-fast::after, .fa-duotone.fa-truck-fast::after { + content: "\f48b\f48b"; } + +.fad.fa-shipping-fast::after, .fa-duotone.fa-shipping-fast::after { + content: "\f48b\f48b"; } + +.fad.fa-user-magnifying-glass::after, .fa-duotone.fa-user-magnifying-glass::after { + content: "\e5c5\e5c5"; } + +.fad.fa-star-sharp::after, .fa-duotone.fa-star-sharp::after { + content: "\e28b\e28b"; } + +.fad.fa-comment-heart::after, .fa-duotone.fa-comment-heart::after { + content: "\e5c8\e5c8"; } + +.fad.fa-circle-1::after, .fa-duotone.fa-circle-1::after { + content: "\e0ee\e0ee"; } + +.fad.fa-circle-star::after, .fa-duotone.fa-circle-star::after { + content: "\e123\e123"; } + +.fad.fa-star-circle::after, .fa-duotone.fa-star-circle::after { + content: "\e123\e123"; } + +.fad.fa-fish::after, .fa-duotone.fa-fish::after { + content: "\f578\f578"; } + +.fad.fa-cloud-fog::after, .fa-duotone.fa-cloud-fog::after { + content: "\f74e\f74e"; } + +.fad.fa-fog::after, .fa-duotone.fa-fog::after { + content: "\f74e\f74e"; } + +.fad.fa-waffle::after, .fa-duotone.fa-waffle::after { + content: "\e466\e466"; } + +.fad.fa-music-note::after, .fa-duotone.fa-music-note::after { + content: "\f8cf\f8cf"; } + +.fad.fa-music-alt::after, .fa-duotone.fa-music-alt::after { + content: "\f8cf\f8cf"; } + +.fad.fa-hexagon-exclamation::after, .fa-duotone.fa-hexagon-exclamation::after { + content: "\e417\e417"; } + +.fad.fa-cart-shopping-fast::after, .fa-duotone.fa-cart-shopping-fast::after { + content: "\e0dc\e0dc"; } + +.fad.fa-object-union::after, .fa-duotone.fa-object-union::after { + content: "\e49f\e49f"; } + +.fad.fa-user-graduate::after, .fa-duotone.fa-user-graduate::after { + content: "\f501\f501"; } + +.fad.fa-starfighter::after, .fa-duotone.fa-starfighter::after { + content: "\e037\e037"; } + +.fad.fa-circle-half-stroke::after, .fa-duotone.fa-circle-half-stroke::after { + content: "\f042\f042"; } + +.fad.fa-adjust::after, .fa-duotone.fa-adjust::after { + content: "\f042\f042"; } + +.fad.fa-arrow-right-long-to-line::after, .fa-duotone.fa-arrow-right-long-to-line::after { + content: "\e3d5\e3d5"; } + +.fad.fa-square-arrow-down::after, .fa-duotone.fa-square-arrow-down::after { + content: "\f339\f339"; } + +.fad.fa-arrow-square-down::after, .fa-duotone.fa-arrow-square-down::after { + content: "\f339\f339"; } + +.fad.fa-diamond-half-stroke::after, .fa-duotone.fa-diamond-half-stroke::after { + content: "\e5b8\e5b8"; } + +.fad.fa-clapperboard::after, .fa-duotone.fa-clapperboard::after { + content: "\e131\e131"; } + +.fad.fa-square-chevron-left::after, .fa-duotone.fa-square-chevron-left::after { + content: "\f32a\f32a"; } + +.fad.fa-chevron-square-left::after, .fa-duotone.fa-chevron-square-left::after { + content: "\f32a\f32a"; } + +.fad.fa-phone-intercom::after, .fa-duotone.fa-phone-intercom::after { + content: "\e434\e434"; } + +.fad.fa-link-horizontal::after, .fa-duotone.fa-link-horizontal::after { + content: "\e1cb\e1cb"; } + +.fad.fa-chain-horizontal::after, .fa-duotone.fa-chain-horizontal::after { + content: "\e1cb\e1cb"; } + +.fad.fa-mango::after, .fa-duotone.fa-mango::after { + content: "\e30f\e30f"; } + +.fad.fa-music-note-slash::after, .fa-duotone.fa-music-note-slash::after { + content: "\f8d0\f8d0"; } + +.fad.fa-music-alt-slash::after, .fa-duotone.fa-music-alt-slash::after { + content: "\f8d0\f8d0"; } + +.fad.fa-circle-radiation::after, .fa-duotone.fa-circle-radiation::after { + content: "\f7ba\f7ba"; } + +.fad.fa-radiation-alt::after, .fa-duotone.fa-radiation-alt::after { + content: "\f7ba\f7ba"; } + +.fad.fa-face-tongue-sweat::after, .fa-duotone.fa-face-tongue-sweat::after { + content: "\e39e\e39e"; } + +.fad.fa-globe-stand::after, .fa-duotone.fa-globe-stand::after { + content: "\f5f6\f5f6"; } + +.fad.fa-baseball::after, .fa-duotone.fa-baseball::after { + content: "\f433\f433"; } + +.fad.fa-baseball-ball::after, .fa-duotone.fa-baseball-ball::after { + content: "\f433\f433"; } + +.fad.fa-circle-p::after, .fa-duotone.fa-circle-p::after { + content: "\e11a\e11a"; } + +.fad.fa-award-simple::after, .fa-duotone.fa-award-simple::after { + content: "\e0ab\e0ab"; } + +.fad.fa-jet-fighter-up::after, .fa-duotone.fa-jet-fighter-up::after { + content: "\e518\e518"; } + +.fad.fa-diagram-project::after, .fa-duotone.fa-diagram-project::after { + content: "\f542\f542"; } + +.fad.fa-project-diagram::after, .fa-duotone.fa-project-diagram::after { + content: "\f542\f542"; } + +.fad.fa-pedestal::after, .fa-duotone.fa-pedestal::after { + content: "\e20d\e20d"; } + +.fad.fa-chart-pyramid::after, .fa-duotone.fa-chart-pyramid::after { + content: "\e0e6\e0e6"; } + +.fad.fa-sidebar::after, .fa-duotone.fa-sidebar::after { + content: "\e24e\e24e"; } + +.fad.fa-snowman-head::after, .fa-duotone.fa-snowman-head::after { + content: "\f79b\f79b"; } + +.fad.fa-frosty-head::after, .fa-duotone.fa-frosty-head::after { + content: "\f79b\f79b"; } + +.fad.fa-copy::after, .fa-duotone.fa-copy::after { + content: "\f0c5\f0c5"; } + +.fad.fa-burger-glass::after, .fa-duotone.fa-burger-glass::after { + content: "\e0ce\e0ce"; } + +.fad.fa-volume-xmark::after, .fa-duotone.fa-volume-xmark::after { + content: "\f6a9\f6a9"; } + +.fad.fa-volume-mute::after, .fa-duotone.fa-volume-mute::after { + content: "\f6a9\f6a9"; } + +.fad.fa-volume-times::after, .fa-duotone.fa-volume-times::after { + content: "\f6a9\f6a9"; } + +.fad.fa-hand-sparkles::after, .fa-duotone.fa-hand-sparkles::after { + content: "\e05d\e05d"; } + +.fad.fa-bars-filter::after, .fa-duotone.fa-bars-filter::after { + content: "\e0ad\e0ad"; } + +.fad.fa-paintbrush-pencil::after, .fa-duotone.fa-paintbrush-pencil::after { + content: "\e206\e206"; } + +.fad.fa-party-bell::after, .fa-duotone.fa-party-bell::after { + content: "\e31a\e31a"; } + +.fad.fa-user-vneck-hair::after, .fa-duotone.fa-user-vneck-hair::after { + content: "\e462\e462"; } + +.fad.fa-jack-o-lantern::after, .fa-duotone.fa-jack-o-lantern::after { + content: "\f30e\f30e"; } + +.fad.fa-grip::after, .fa-duotone.fa-grip::after { + content: "\f58d\f58d"; } + +.fad.fa-grip-horizontal::after, .fa-duotone.fa-grip-horizontal::after { + content: "\f58d\f58d"; } + +.fad.fa-share-from-square::after, .fa-duotone.fa-share-from-square::after { + content: "\f14d\f14d"; } + +.fad.fa-share-square::after, .fa-duotone.fa-share-square::after { + content: "\f14d\f14d"; } + +.fad.fa-keynote::after, .fa-duotone.fa-keynote::after { + content: "\f66c\f66c"; } + +.fad.fa-child-combatant::after, .fa-duotone.fa-child-combatant::after { + content: "\e4e0\e4e0"; } + +.fad.fa-child-rifle::after, .fa-duotone.fa-child-rifle::after { + content: "\e4e0\e4e0"; } + +.fad.fa-gun::after, .fa-duotone.fa-gun::after { + content: "\e19b\e19b"; } + +.fad.fa-square-phone::after, .fa-duotone.fa-square-phone::after { + content: "\f098\f098"; } + +.fad.fa-phone-square::after, .fa-duotone.fa-phone-square::after { + content: "\f098\f098"; } + +.fad.fa-hat-beach::after, .fa-duotone.fa-hat-beach::after { + content: "\e606\e606"; } + +.fad.fa-plus::after, .fa-duotone.fa-plus::after { + content: "\2b\2b"; } + +.fad.fa-add::after, .fa-duotone.fa-add::after { + content: "\2b\2b"; } + +.fad.fa-expand::after, .fa-duotone.fa-expand::after { + content: "\f065\f065"; } + +.fad.fa-computer::after, .fa-duotone.fa-computer::after { + content: "\e4e5\e4e5"; } + +.fad.fa-fort::after, .fa-duotone.fa-fort::after { + content: "\e486\e486"; } + +.fad.fa-cloud-check::after, .fa-duotone.fa-cloud-check::after { + content: "\e35c\e35c"; } + +.fad.fa-xmark::after, .fa-duotone.fa-xmark::after { + content: "\f00d\f00d"; } + +.fad.fa-close::after, .fa-duotone.fa-close::after { + content: "\f00d\f00d"; } + +.fad.fa-multiply::after, .fa-duotone.fa-multiply::after { + content: "\f00d\f00d"; } + +.fad.fa-remove::after, .fa-duotone.fa-remove::after { + content: "\f00d\f00d"; } + +.fad.fa-times::after, .fa-duotone.fa-times::after { + content: "\f00d\f00d"; } + +.fad.fa-face-smirking::after, .fa-duotone.fa-face-smirking::after { + content: "\e397\e397"; } + +.fad.fa-arrows-up-down-left-right::after, .fa-duotone.fa-arrows-up-down-left-right::after { + content: "\f047\f047"; } + +.fad.fa-arrows::after, .fa-duotone.fa-arrows::after { + content: "\f047\f047"; } + +.fad.fa-chalkboard-user::after, .fa-duotone.fa-chalkboard-user::after { + content: "\f51c\f51c"; } + +.fad.fa-chalkboard-teacher::after, .fa-duotone.fa-chalkboard-teacher::after { + content: "\f51c\f51c"; } + +.fad.fa-rhombus::after, .fa-duotone.fa-rhombus::after { + content: "\e23b\e23b"; } + +.fad.fa-claw-marks::after, .fa-duotone.fa-claw-marks::after { + content: "\f6c2\f6c2"; } + +.fad.fa-peso-sign::after, .fa-duotone.fa-peso-sign::after { + content: "\e222\e222"; } + +.fad.fa-face-smile-tongue::after, .fa-duotone.fa-face-smile-tongue::after { + content: "\e394\e394"; } + +.fad.fa-cart-circle-xmark::after, .fa-duotone.fa-cart-circle-xmark::after { + content: "\e3f4\e3f4"; } + +.fad.fa-building-shield::after, .fa-duotone.fa-building-shield::after { + content: "\e4d8\e4d8"; } + +.fad.fa-circle-phone-flip::after, .fa-duotone.fa-circle-phone-flip::after { + content: "\e11c\e11c"; } + +.fad.fa-phone-circle-alt::after, .fa-duotone.fa-phone-circle-alt::after { + content: "\e11c\e11c"; } + +.fad.fa-baby::after, .fa-duotone.fa-baby::after { + content: "\f77c\f77c"; } + +.fad.fa-users-line::after, .fa-duotone.fa-users-line::after { + content: "\e592\e592"; } + +.fad.fa-quote-left::after, .fa-duotone.fa-quote-left::after { + content: "\f10d\f10d"; } + +.fad.fa-quote-left-alt::after, .fa-duotone.fa-quote-left-alt::after { + content: "\f10d\f10d"; } + +.fad.fa-tractor::after, .fa-duotone.fa-tractor::after { + content: "\f722\f722"; } + +.fad.fa-key-skeleton::after, .fa-duotone.fa-key-skeleton::after { + content: "\f6f3\f6f3"; } + +.fad.fa-trash-arrow-up::after, .fa-duotone.fa-trash-arrow-up::after { + content: "\f829\f829"; } + +.fad.fa-trash-restore::after, .fa-duotone.fa-trash-restore::after { + content: "\f829\f829"; } + +.fad.fa-arrow-down-up-lock::after, .fa-duotone.fa-arrow-down-up-lock::after { + content: "\e4b0\e4b0"; } + +.fad.fa-arrow-down-to-bracket::after, .fa-duotone.fa-arrow-down-to-bracket::after { + content: "\e094\e094"; } + +.fad.fa-lines-leaning::after, .fa-duotone.fa-lines-leaning::after { + content: "\e51e\e51e"; } + +.fad.fa-square-q::after, .fa-duotone.fa-square-q::after { + content: "\e27b\e27b"; } + +.fad.fa-ruler-combined::after, .fa-duotone.fa-ruler-combined::after { + content: "\f546\f546"; } + +.fad.fa-symbols::after, .fa-duotone.fa-symbols::after { + content: "\f86e\f86e"; } + +.fad.fa-icons-alt::after, .fa-duotone.fa-icons-alt::after { + content: "\f86e\f86e"; } + +.fad.fa-copyright::after, .fa-duotone.fa-copyright::after { + content: "\f1f9\f1f9"; } + +.fad.fa-flask-gear::after, .fa-duotone.fa-flask-gear::after { + content: "\e5f1\e5f1"; } + +.fad.fa-highlighter-line::after, .fa-duotone.fa-highlighter-line::after { + content: "\e1af\e1af"; } + +.fad.fa-bracket-square::after, .fa-duotone.fa-bracket-square::after { + content: "\5b\5b"; } + +.fad.fa-bracket::after, .fa-duotone.fa-bracket::after { + content: "\5b\5b"; } + +.fad.fa-bracket-left::after, .fa-duotone.fa-bracket-left::after { + content: "\5b\5b"; } + +.fad.fa-island-tropical::after, .fa-duotone.fa-island-tropical::after { + content: "\f811\f811"; } + +.fad.fa-island-tree-palm::after, .fa-duotone.fa-island-tree-palm::after { + content: "\f811\f811"; } + +.fad.fa-arrow-right-from-line::after, .fa-duotone.fa-arrow-right-from-line::after { + content: "\f343\f343"; } + +.fad.fa-arrow-from-left::after, .fa-duotone.fa-arrow-from-left::after { + content: "\f343\f343"; } + +.fad.fa-h2::after, .fa-duotone.fa-h2::after { + content: "\f314\f314"; } + +.fad.fa-equals::after, .fa-duotone.fa-equals::after { + content: "\3d\3d"; } + +.fad.fa-cake-slice::after, .fa-duotone.fa-cake-slice::after { + content: "\e3e5\e3e5"; } + +.fad.fa-shortcake::after, .fa-duotone.fa-shortcake::after { + content: "\e3e5\e3e5"; } + +.fad.fa-peanut::after, .fa-duotone.fa-peanut::after { + content: "\e430\e430"; } + +.fad.fa-wrench-simple::after, .fa-duotone.fa-wrench-simple::after { + content: "\e2d1\e2d1"; } + +.fad.fa-blender::after, .fa-duotone.fa-blender::after { + content: "\f517\f517"; } + +.fad.fa-teeth::after, .fa-duotone.fa-teeth::after { + content: "\f62e\f62e"; } + +.fad.fa-tally-2::after, .fa-duotone.fa-tally-2::after { + content: "\e295\e295"; } + +.fad.fa-shekel-sign::after, .fa-duotone.fa-shekel-sign::after { + content: "\f20b\f20b"; } + +.fad.fa-ils::after, .fa-duotone.fa-ils::after { + content: "\f20b\f20b"; } + +.fad.fa-shekel::after, .fa-duotone.fa-shekel::after { + content: "\f20b\f20b"; } + +.fad.fa-sheqel::after, .fa-duotone.fa-sheqel::after { + content: "\f20b\f20b"; } + +.fad.fa-sheqel-sign::after, .fa-duotone.fa-sheqel-sign::after { + content: "\f20b\f20b"; } + +.fad.fa-cars::after, .fa-duotone.fa-cars::after { + content: "\f85b\f85b"; } + +.fad.fa-axe-battle::after, .fa-duotone.fa-axe-battle::after { + content: "\f6b3\f6b3"; } + +.fad.fa-user-hair-long::after, .fa-duotone.fa-user-hair-long::after { + content: "\e45b\e45b"; } + +.fad.fa-map::after, .fa-duotone.fa-map::after { + content: "\f279\f279"; } + +.fad.fa-arrow-left-from-arc::after, .fa-duotone.fa-arrow-left-from-arc::after { + content: "\e615\e615"; } + +.fad.fa-file-circle-info::after, .fa-duotone.fa-file-circle-info::after { + content: "\e493\e493"; } + +.fad.fa-face-disappointed::after, .fa-duotone.fa-face-disappointed::after { + content: "\e36f\e36f"; } + +.fad.fa-lasso-sparkles::after, .fa-duotone.fa-lasso-sparkles::after { + content: "\e1c9\e1c9"; } + +.fad.fa-clock-eleven::after, .fa-duotone.fa-clock-eleven::after { + content: "\e347\e347"; } + +.fad.fa-rocket::after, .fa-duotone.fa-rocket::after { + content: "\f135\f135"; } + +.fad.fa-siren-on::after, .fa-duotone.fa-siren-on::after { + content: "\e02e\e02e"; } + +.fad.fa-clock-ten::after, .fa-duotone.fa-clock-ten::after { + content: "\e354\e354"; } + +.fad.fa-candle-holder::after, .fa-duotone.fa-candle-holder::after { + content: "\f6bc\f6bc"; } + +.fad.fa-video-arrow-down-left::after, .fa-duotone.fa-video-arrow-down-left::after { + content: "\e2c8\e2c8"; } + +.fad.fa-photo-film::after, .fa-duotone.fa-photo-film::after { + content: "\f87c\f87c"; } + +.fad.fa-photo-video::after, .fa-duotone.fa-photo-video::after { + content: "\f87c\f87c"; } + +.fad.fa-floppy-disk-circle-arrow-right::after, .fa-duotone.fa-floppy-disk-circle-arrow-right::after { + content: "\e180\e180"; } + +.fad.fa-save-circle-arrow-right::after, .fa-duotone.fa-save-circle-arrow-right::after { + content: "\e180\e180"; } + +.fad.fa-folder-minus::after, .fa-duotone.fa-folder-minus::after { + content: "\f65d\f65d"; } + +.fad.fa-planet-moon::after, .fa-duotone.fa-planet-moon::after { + content: "\e01f\e01f"; } + +.fad.fa-face-eyes-xmarks::after, .fa-duotone.fa-face-eyes-xmarks::after { + content: "\e374\e374"; } + +.fad.fa-chart-scatter::after, .fa-duotone.fa-chart-scatter::after { + content: "\f7ee\f7ee"; } + +.fad.fa-display-arrow-down::after, .fa-duotone.fa-display-arrow-down::after { + content: "\e164\e164"; } + +.fad.fa-store::after, .fa-duotone.fa-store::after { + content: "\f54e\f54e"; } + +.fad.fa-arrow-trend-up::after, .fa-duotone.fa-arrow-trend-up::after { + content: "\e098\e098"; } + +.fad.fa-plug-circle-minus::after, .fa-duotone.fa-plug-circle-minus::after { + content: "\e55e\e55e"; } + +.fad.fa-olive-branch::after, .fa-duotone.fa-olive-branch::after { + content: "\e317\e317"; } + +.fad.fa-angle::after, .fa-duotone.fa-angle::after { + content: "\e08c\e08c"; } + +.fad.fa-vacuum-robot::after, .fa-duotone.fa-vacuum-robot::after { + content: "\e04e\e04e"; } + +.fad.fa-sign-hanging::after, .fa-duotone.fa-sign-hanging::after { + content: "\f4d9\f4d9"; } + +.fad.fa-sign::after, .fa-duotone.fa-sign::after { + content: "\f4d9\f4d9"; } + +.fad.fa-square-divide::after, .fa-duotone.fa-square-divide::after { + content: "\e26a\e26a"; } + +.fad.fa-signal-stream-slash::after, .fa-duotone.fa-signal-stream-slash::after { + content: "\e250\e250"; } + +.fad.fa-bezier-curve::after, .fa-duotone.fa-bezier-curve::after { + content: "\f55b\f55b"; } + +.fad.fa-eye-dropper-half::after, .fa-duotone.fa-eye-dropper-half::after { + content: "\e173\e173"; } + +.fad.fa-store-lock::after, .fa-duotone.fa-store-lock::after { + content: "\e4a6\e4a6"; } + +.fad.fa-bell-slash::after, .fa-duotone.fa-bell-slash::after { + content: "\f1f6\f1f6"; } + +.fad.fa-cloud-bolt-sun::after, .fa-duotone.fa-cloud-bolt-sun::after { + content: "\f76e\f76e"; } + +.fad.fa-thunderstorm-sun::after, .fa-duotone.fa-thunderstorm-sun::after { + content: "\f76e\f76e"; } + +.fad.fa-camera-slash::after, .fa-duotone.fa-camera-slash::after { + content: "\e0d9\e0d9"; } + +.fad.fa-comment-quote::after, .fa-duotone.fa-comment-quote::after { + content: "\e14c\e14c"; } + +.fad.fa-tablet::after, .fa-duotone.fa-tablet::after { + content: "\f3fb\f3fb"; } + +.fad.fa-tablet-android::after, .fa-duotone.fa-tablet-android::after { + content: "\f3fb\f3fb"; } + +.fad.fa-school-flag::after, .fa-duotone.fa-school-flag::after { + content: "\e56e\e56e"; } + +.fad.fa-message-code::after, .fa-duotone.fa-message-code::after { + content: "\e1df\e1df"; } + +.fad.fa-glass-half::after, .fa-duotone.fa-glass-half::after { + content: "\e192\e192"; } + +.fad.fa-glass-half-empty::after, .fa-duotone.fa-glass-half-empty::after { + content: "\e192\e192"; } + +.fad.fa-glass-half-full::after, .fa-duotone.fa-glass-half-full::after { + content: "\e192\e192"; } + +.fad.fa-fill::after, .fa-duotone.fa-fill::after { + content: "\f575\f575"; } + +.fad.fa-message-minus::after, .fa-duotone.fa-message-minus::after { + content: "\f4a7\f4a7"; } + +.fad.fa-comment-alt-minus::after, .fa-duotone.fa-comment-alt-minus::after { + content: "\f4a7\f4a7"; } + +.fad.fa-angle-up::after, .fa-duotone.fa-angle-up::after { + content: "\f106\f106"; } + +.fad.fa-dinosaur::after, .fa-duotone.fa-dinosaur::after { + content: "\e5fe\e5fe"; } + +.fad.fa-drumstick-bite::after, .fa-duotone.fa-drumstick-bite::after { + content: "\f6d7\f6d7"; } + +.fad.fa-link-horizontal-slash::after, .fa-duotone.fa-link-horizontal-slash::after { + content: "\e1cc\e1cc"; } + +.fad.fa-chain-horizontal-slash::after, .fa-duotone.fa-chain-horizontal-slash::after { + content: "\e1cc\e1cc"; } + +.fad.fa-holly-berry::after, .fa-duotone.fa-holly-berry::after { + content: "\f7aa\f7aa"; } + +.fad.fa-nose::after, .fa-duotone.fa-nose::after { + content: "\e5bd\e5bd"; } + +.fad.fa-arrow-left-to-arc::after, .fa-duotone.fa-arrow-left-to-arc::after { + content: "\e616\e616"; } + +.fad.fa-chevron-left::after, .fa-duotone.fa-chevron-left::after { + content: "\f053\f053"; } + +.fad.fa-bacteria::after, .fa-duotone.fa-bacteria::after { + content: "\e059\e059"; } + +.fad.fa-clouds::after, .fa-duotone.fa-clouds::after { + content: "\f744\f744"; } + +.fad.fa-money-bill-simple::after, .fa-duotone.fa-money-bill-simple::after { + content: "\e1f1\e1f1"; } + +.fad.fa-hand-lizard::after, .fa-duotone.fa-hand-lizard::after { + content: "\f258\f258"; } + +.fad.fa-table-pivot::after, .fa-duotone.fa-table-pivot::after { + content: "\e291\e291"; } + +.fad.fa-filter-slash::after, .fa-duotone.fa-filter-slash::after { + content: "\e17d\e17d"; } + +.fad.fa-trash-can-undo::after, .fa-duotone.fa-trash-can-undo::after { + content: "\f896\f896"; } + +.fad.fa-trash-can-arrow-turn-left::after, .fa-duotone.fa-trash-can-arrow-turn-left::after { + content: "\f896\f896"; } + +.fad.fa-trash-undo-alt::after, .fa-duotone.fa-trash-undo-alt::after { + content: "\f896\f896"; } + +.fad.fa-notdef::after, .fa-duotone.fa-notdef::after { + content: "\e1fe\e1fe"; } + +.fad.fa-disease::after, .fa-duotone.fa-disease::after { + content: "\f7fa\f7fa"; } + +.fad.fa-person-to-door::after, .fa-duotone.fa-person-to-door::after { + content: "\e433\e433"; } + +.fad.fa-turntable::after, .fa-duotone.fa-turntable::after { + content: "\f8e4\f8e4"; } + +.fad.fa-briefcase-medical::after, .fa-duotone.fa-briefcase-medical::after { + content: "\f469\f469"; } + +.fad.fa-genderless::after, .fa-duotone.fa-genderless::after { + content: "\f22d\f22d"; } + +.fad.fa-chevron-right::after, .fa-duotone.fa-chevron-right::after { + content: "\f054\f054"; } + +.fad.fa-signal-weak::after, .fa-duotone.fa-signal-weak::after { + content: "\f68c\f68c"; } + +.fad.fa-signal-1::after, .fa-duotone.fa-signal-1::after { + content: "\f68c\f68c"; } + +.fad.fa-clock-five::after, .fa-duotone.fa-clock-five::after { + content: "\e349\e349"; } + +.fad.fa-retweet::after, .fa-duotone.fa-retweet::after { + content: "\f079\f079"; } + +.fad.fa-car-rear::after, .fa-duotone.fa-car-rear::after { + content: "\f5de\f5de"; } + +.fad.fa-car-alt::after, .fa-duotone.fa-car-alt::after { + content: "\f5de\f5de"; } + +.fad.fa-pump-soap::after, .fa-duotone.fa-pump-soap::after { + content: "\e06b\e06b"; } + +.fad.fa-computer-classic::after, .fa-duotone.fa-computer-classic::after { + content: "\f8b1\f8b1"; } + +.fad.fa-frame::after, .fa-duotone.fa-frame::after { + content: "\e495\e495"; } + +.fad.fa-video-slash::after, .fa-duotone.fa-video-slash::after { + content: "\f4e2\f4e2"; } + +.fad.fa-battery-quarter::after, .fa-duotone.fa-battery-quarter::after { + content: "\f243\f243"; } + +.fad.fa-battery-2::after, .fa-duotone.fa-battery-2::after { + content: "\f243\f243"; } + +.fad.fa-ellipsis-stroke::after, .fa-duotone.fa-ellipsis-stroke::after { + content: "\f39b\f39b"; } + +.fad.fa-ellipsis-h-alt::after, .fa-duotone.fa-ellipsis-h-alt::after { + content: "\f39b\f39b"; } + +.fad.fa-radio::after, .fa-duotone.fa-radio::after { + content: "\f8d7\f8d7"; } + +.fad.fa-baby-carriage::after, .fa-duotone.fa-baby-carriage::after { + content: "\f77d\f77d"; } + +.fad.fa-carriage-baby::after, .fa-duotone.fa-carriage-baby::after { + content: "\f77d\f77d"; } + +.fad.fa-face-expressionless::after, .fa-duotone.fa-face-expressionless::after { + content: "\e373\e373"; } + +.fad.fa-down-to-dotted-line::after, .fa-duotone.fa-down-to-dotted-line::after { + content: "\e408\e408"; } + +.fad.fa-cloud-music::after, .fa-duotone.fa-cloud-music::after { + content: "\f8ae\f8ae"; } + +.fad.fa-traffic-light::after, .fa-duotone.fa-traffic-light::after { + content: "\f637\f637"; } + +.fad.fa-cloud-minus::after, .fa-duotone.fa-cloud-minus::after { + content: "\e35d\e35d"; } + +.fad.fa-thermometer::after, .fa-duotone.fa-thermometer::after { + content: "\f491\f491"; } + +.fad.fa-shield-minus::after, .fa-duotone.fa-shield-minus::after { + content: "\e249\e249"; } + +.fad.fa-vr-cardboard::after, .fa-duotone.fa-vr-cardboard::after { + content: "\f729\f729"; } + +.fad.fa-car-tilt::after, .fa-duotone.fa-car-tilt::after { + content: "\f5e5\f5e5"; } + +.fad.fa-gauge-circle-minus::after, .fa-duotone.fa-gauge-circle-minus::after { + content: "\e497\e497"; } + +.fad.fa-brightness-low::after, .fa-duotone.fa-brightness-low::after { + content: "\e0ca\e0ca"; } + +.fad.fa-hand-middle-finger::after, .fa-duotone.fa-hand-middle-finger::after { + content: "\f806\f806"; } + +.fad.fa-percent::after, .fa-duotone.fa-percent::after { + content: "\25\25"; } + +.fad.fa-percentage::after, .fa-duotone.fa-percentage::after { + content: "\25\25"; } + +.fad.fa-truck-moving::after, .fa-duotone.fa-truck-moving::after { + content: "\f4df\f4df"; } + +.fad.fa-glass-water-droplet::after, .fa-duotone.fa-glass-water-droplet::after { + content: "\e4f5\e4f5"; } + +.fad.fa-conveyor-belt::after, .fa-duotone.fa-conveyor-belt::after { + content: "\f46e\f46e"; } + +.fad.fa-location-check::after, .fa-duotone.fa-location-check::after { + content: "\f606\f606"; } + +.fad.fa-map-marker-check::after, .fa-duotone.fa-map-marker-check::after { + content: "\f606\f606"; } + +.fad.fa-coin-vertical::after, .fa-duotone.fa-coin-vertical::after { + content: "\e3fd\e3fd"; } + +.fad.fa-display::after, .fa-duotone.fa-display::after { + content: "\e163\e163"; } + +.fad.fa-person-sign::after, .fa-duotone.fa-person-sign::after { + content: "\f757\f757"; } + +.fad.fa-face-smile::after, .fa-duotone.fa-face-smile::after { + content: "\f118\f118"; } + +.fad.fa-smile::after, .fa-duotone.fa-smile::after { + content: "\f118\f118"; } + +.fad.fa-phone-hangup::after, .fa-duotone.fa-phone-hangup::after { + content: "\e225\e225"; } + +.fad.fa-signature-slash::after, .fa-duotone.fa-signature-slash::after { + content: "\e3cb\e3cb"; } + +.fad.fa-thumbtack::after, .fa-duotone.fa-thumbtack::after { + content: "\f08d\f08d"; } + +.fad.fa-thumb-tack::after, .fa-duotone.fa-thumb-tack::after { + content: "\f08d\f08d"; } + +.fad.fa-wheat-slash::after, .fa-duotone.fa-wheat-slash::after { + content: "\e339\e339"; } + +.fad.fa-trophy::after, .fa-duotone.fa-trophy::after { + content: "\f091\f091"; } + +.fad.fa-clouds-sun::after, .fa-duotone.fa-clouds-sun::after { + content: "\f746\f746"; } + +.fad.fa-person-praying::after, .fa-duotone.fa-person-praying::after { + content: "\f683\f683"; } + +.fad.fa-pray::after, .fa-duotone.fa-pray::after { + content: "\f683\f683"; } + +.fad.fa-hammer::after, .fa-duotone.fa-hammer::after { + content: "\f6e3\f6e3"; } + +.fad.fa-face-vomit::after, .fa-duotone.fa-face-vomit::after { + content: "\e3a0\e3a0"; } + +.fad.fa-speakers::after, .fa-duotone.fa-speakers::after { + content: "\f8e0\f8e0"; } + +.fad.fa-tty-answer::after, .fa-duotone.fa-tty-answer::after { + content: "\e2b9\e2b9"; } + +.fad.fa-teletype-answer::after, .fa-duotone.fa-teletype-answer::after { + content: "\e2b9\e2b9"; } + +.fad.fa-mug-tea-saucer::after, .fa-duotone.fa-mug-tea-saucer::after { + content: "\e1f5\e1f5"; } + +.fad.fa-diagram-lean-canvas::after, .fa-duotone.fa-diagram-lean-canvas::after { + content: "\e156\e156"; } + +.fad.fa-alt::after, .fa-duotone.fa-alt::after { + content: "\e08a\e08a"; } + +.fad.fa-dial::after, .fa-duotone.fa-dial::after { + content: "\e15b\e15b"; } + +.fad.fa-dial-med-high::after, .fa-duotone.fa-dial-med-high::after { + content: "\e15b\e15b"; } + +.fad.fa-hand-peace::after, .fa-duotone.fa-hand-peace::after { + content: "\f25b\f25b"; } + +.fad.fa-circle-trash::after, .fa-duotone.fa-circle-trash::after { + content: "\e126\e126"; } + +.fad.fa-trash-circle::after, .fa-duotone.fa-trash-circle::after { + content: "\e126\e126"; } + +.fad.fa-rotate::after, .fa-duotone.fa-rotate::after { + content: "\f2f1\f2f1"; } + +.fad.fa-sync-alt::after, .fa-duotone.fa-sync-alt::after { + content: "\f2f1\f2f1"; } + +.fad.fa-circle-quarters::after, .fa-duotone.fa-circle-quarters::after { + content: "\e3f8\e3f8"; } + +.fad.fa-spinner::after, .fa-duotone.fa-spinner::after { + content: "\f110\f110"; } + +.fad.fa-tower-control::after, .fa-duotone.fa-tower-control::after { + content: "\e2a2\e2a2"; } + +.fad.fa-arrow-up-triangle-square::after, .fa-duotone.fa-arrow-up-triangle-square::after { + content: "\f88a\f88a"; } + +.fad.fa-sort-shapes-up::after, .fa-duotone.fa-sort-shapes-up::after { + content: "\f88a\f88a"; } + +.fad.fa-whale::after, .fa-duotone.fa-whale::after { + content: "\f72c\f72c"; } + +.fad.fa-robot::after, .fa-duotone.fa-robot::after { + content: "\f544\f544"; } + +.fad.fa-peace::after, .fa-duotone.fa-peace::after { + content: "\f67c\f67c"; } + +.fad.fa-party-horn::after, .fa-duotone.fa-party-horn::after { + content: "\e31b\e31b"; } + +.fad.fa-gears::after, .fa-duotone.fa-gears::after { + content: "\f085\f085"; } + +.fad.fa-cogs::after, .fa-duotone.fa-cogs::after { + content: "\f085\f085"; } + +.fad.fa-sun-bright::after, .fa-duotone.fa-sun-bright::after { + content: "\e28f\e28f"; } + +.fad.fa-sun-alt::after, .fa-duotone.fa-sun-alt::after { + content: "\e28f\e28f"; } + +.fad.fa-warehouse::after, .fa-duotone.fa-warehouse::after { + content: "\f494\f494"; } + +.fad.fa-conveyor-belt-arm::after, .fa-duotone.fa-conveyor-belt-arm::after { + content: "\e5f8\e5f8"; } + +.fad.fa-lock-keyhole-open::after, .fa-duotone.fa-lock-keyhole-open::after { + content: "\f3c2\f3c2"; } + +.fad.fa-lock-open-alt::after, .fa-duotone.fa-lock-open-alt::after { + content: "\f3c2\f3c2"; } + +.fad.fa-square-fragile::after, .fa-duotone.fa-square-fragile::after { + content: "\f49b\f49b"; } + +.fad.fa-box-fragile::after, .fa-duotone.fa-box-fragile::after { + content: "\f49b\f49b"; } + +.fad.fa-square-wine-glass-crack::after, .fa-duotone.fa-square-wine-glass-crack::after { + content: "\f49b\f49b"; } + +.fad.fa-arrow-up-right-dots::after, .fa-duotone.fa-arrow-up-right-dots::after { + content: "\e4b7\e4b7"; } + +.fad.fa-square-n::after, .fa-duotone.fa-square-n::after { + content: "\e277\e277"; } + +.fad.fa-splotch::after, .fa-duotone.fa-splotch::after { + content: "\f5bc\f5bc"; } + +.fad.fa-face-grin-hearts::after, .fa-duotone.fa-face-grin-hearts::after { + content: "\f584\f584"; } + +.fad.fa-grin-hearts::after, .fa-duotone.fa-grin-hearts::after { + content: "\f584\f584"; } + +.fad.fa-meter::after, .fa-duotone.fa-meter::after { + content: "\e1e8\e1e8"; } + +.fad.fa-mandolin::after, .fa-duotone.fa-mandolin::after { + content: "\f6f9\f6f9"; } + +.fad.fa-dice-four::after, .fa-duotone.fa-dice-four::after { + content: "\f524\f524"; } + +.fad.fa-sim-card::after, .fa-duotone.fa-sim-card::after { + content: "\f7c4\f7c4"; } + +.fad.fa-transgender::after, .fa-duotone.fa-transgender::after { + content: "\f225\f225"; } + +.fad.fa-transgender-alt::after, .fa-duotone.fa-transgender-alt::after { + content: "\f225\f225"; } + +.fad.fa-mercury::after, .fa-duotone.fa-mercury::after { + content: "\f223\f223"; } + +.fad.fa-up-from-bracket::after, .fa-duotone.fa-up-from-bracket::after { + content: "\e590\e590"; } + +.fad.fa-knife-kitchen::after, .fa-duotone.fa-knife-kitchen::after { + content: "\f6f5\f6f5"; } + +.fad.fa-border-right::after, .fa-duotone.fa-border-right::after { + content: "\f852\f852"; } + +.fad.fa-arrow-turn-down::after, .fa-duotone.fa-arrow-turn-down::after { + content: "\f149\f149"; } + +.fad.fa-level-down::after, .fa-duotone.fa-level-down::after { + content: "\f149\f149"; } + +.fad.fa-spade::after, .fa-duotone.fa-spade::after { + content: "\f2f4\f2f4"; } + +.fad.fa-card-spade::after, .fa-duotone.fa-card-spade::after { + content: "\e3ec\e3ec"; } + +.fad.fa-line-columns::after, .fa-duotone.fa-line-columns::after { + content: "\f870\f870"; } + +.fad.fa-arrow-right-to-line::after, .fa-duotone.fa-arrow-right-to-line::after { + content: "\f340\f340"; } + +.fad.fa-arrow-to-right::after, .fa-duotone.fa-arrow-to-right::after { + content: "\f340\f340"; } + +.fad.fa-person-falling-burst::after, .fa-duotone.fa-person-falling-burst::after { + content: "\e547\e547"; } + +.fad.fa-flag-pennant::after, .fa-duotone.fa-flag-pennant::after { + content: "\f456\f456"; } + +.fad.fa-pennant::after, .fa-duotone.fa-pennant::after { + content: "\f456\f456"; } + +.fad.fa-conveyor-belt-empty::after, .fa-duotone.fa-conveyor-belt-empty::after { + content: "\e150\e150"; } + +.fad.fa-user-group-simple::after, .fa-duotone.fa-user-group-simple::after { + content: "\e603\e603"; } + +.fad.fa-award::after, .fa-duotone.fa-award::after { + content: "\f559\f559"; } + +.fad.fa-ticket-simple::after, .fa-duotone.fa-ticket-simple::after { + content: "\f3ff\f3ff"; } + +.fad.fa-ticket-alt::after, .fa-duotone.fa-ticket-alt::after { + content: "\f3ff\f3ff"; } + +.fad.fa-building::after, .fa-duotone.fa-building::after { + content: "\f1ad\f1ad"; } + +.fad.fa-angles-left::after, .fa-duotone.fa-angles-left::after { + content: "\f100\f100"; } + +.fad.fa-angle-double-left::after, .fa-duotone.fa-angle-double-left::after { + content: "\f100\f100"; } + +.fad.fa-camcorder::after, .fa-duotone.fa-camcorder::after { + content: "\f8a8\f8a8"; } + +.fad.fa-video-handheld::after, .fa-duotone.fa-video-handheld::after { + content: "\f8a8\f8a8"; } + +.fad.fa-pancakes::after, .fa-duotone.fa-pancakes::after { + content: "\e42d\e42d"; } + +.fad.fa-album-circle-user::after, .fa-duotone.fa-album-circle-user::after { + content: "\e48d\e48d"; } + +.fad.fa-subtitles-slash::after, .fa-duotone.fa-subtitles-slash::after { + content: "\e610\e610"; } + +.fad.fa-qrcode::after, .fa-duotone.fa-qrcode::after { + content: "\f029\f029"; } + +.fad.fa-dice-d10::after, .fa-duotone.fa-dice-d10::after { + content: "\f6cd\f6cd"; } + +.fad.fa-fireplace::after, .fa-duotone.fa-fireplace::after { + content: "\f79a\f79a"; } + +.fad.fa-browser::after, .fa-duotone.fa-browser::after { + content: "\f37e\f37e"; } + +.fad.fa-pen-paintbrush::after, .fa-duotone.fa-pen-paintbrush::after { + content: "\f618\f618"; } + +.fad.fa-pencil-paintbrush::after, .fa-duotone.fa-pencil-paintbrush::after { + content: "\f618\f618"; } + +.fad.fa-fish-cooked::after, .fa-duotone.fa-fish-cooked::after { + content: "\f7fe\f7fe"; } + +.fad.fa-chair-office::after, .fa-duotone.fa-chair-office::after { + content: "\f6c1\f6c1"; } + +.fad.fa-nesting-dolls::after, .fa-duotone.fa-nesting-dolls::after { + content: "\e3ba\e3ba"; } + +.fad.fa-clock-rotate-left::after, .fa-duotone.fa-clock-rotate-left::after { + content: "\f1da\f1da"; } + +.fad.fa-history::after, .fa-duotone.fa-history::after { + content: "\f1da\f1da"; } + +.fad.fa-trumpet::after, .fa-duotone.fa-trumpet::after { + content: "\f8e3\f8e3"; } + +.fad.fa-face-grin-beam-sweat::after, .fa-duotone.fa-face-grin-beam-sweat::after { + content: "\f583\f583"; } + +.fad.fa-grin-beam-sweat::after, .fa-duotone.fa-grin-beam-sweat::after { + content: "\f583\f583"; } + +.fad.fa-fire-smoke::after, .fa-duotone.fa-fire-smoke::after { + content: "\f74b\f74b"; } + +.fad.fa-phone-missed::after, .fa-duotone.fa-phone-missed::after { + content: "\e226\e226"; } + +.fad.fa-file-export::after, .fa-duotone.fa-file-export::after { + content: "\f56e\f56e"; } + +.fad.fa-arrow-right-from-file::after, .fa-duotone.fa-arrow-right-from-file::after { + content: "\f56e\f56e"; } + +.fad.fa-shield::after, .fa-duotone.fa-shield::after { + content: "\f132\f132"; } + +.fad.fa-shield-blank::after, .fa-duotone.fa-shield-blank::after { + content: "\f132\f132"; } + +.fad.fa-arrow-up-short-wide::after, .fa-duotone.fa-arrow-up-short-wide::after { + content: "\f885\f885"; } + +.fad.fa-sort-amount-up-alt::after, .fa-duotone.fa-sort-amount-up-alt::after { + content: "\f885\f885"; } + +.fad.fa-arrows-repeat-1::after, .fa-duotone.fa-arrows-repeat-1::after { + content: "\f366\f366"; } + +.fad.fa-repeat-1-alt::after, .fa-duotone.fa-repeat-1-alt::after { + content: "\f366\f366"; } + +.fad.fa-gun-slash::after, .fa-duotone.fa-gun-slash::after { + content: "\e19c\e19c"; } + +.fad.fa-avocado::after, .fa-duotone.fa-avocado::after { + content: "\e0aa\e0aa"; } + +.fad.fa-binary::after, .fa-duotone.fa-binary::after { + content: "\e33b\e33b"; } + +.fad.fa-glasses-round::after, .fa-duotone.fa-glasses-round::after { + content: "\f5f5\f5f5"; } + +.fad.fa-glasses-alt::after, .fa-duotone.fa-glasses-alt::after { + content: "\f5f5\f5f5"; } + +.fad.fa-phone-plus::after, .fa-duotone.fa-phone-plus::after { + content: "\f4d2\f4d2"; } + +.fad.fa-ditto::after, .fa-duotone.fa-ditto::after { + content: "\22\22"; } + +.fad.fa-person-seat::after, .fa-duotone.fa-person-seat::after { + content: "\e21e\e21e"; } + +.fad.fa-house-medical::after, .fa-duotone.fa-house-medical::after { + content: "\e3b2\e3b2"; } + +.fad.fa-golf-ball-tee::after, .fa-duotone.fa-golf-ball-tee::after { + content: "\f450\f450"; } + +.fad.fa-golf-ball::after, .fa-duotone.fa-golf-ball::after { + content: "\f450\f450"; } + +.fad.fa-circle-chevron-left::after, .fa-duotone.fa-circle-chevron-left::after { + content: "\f137\f137"; } + +.fad.fa-chevron-circle-left::after, .fa-duotone.fa-chevron-circle-left::after { + content: "\f137\f137"; } + +.fad.fa-house-chimney-window::after, .fa-duotone.fa-house-chimney-window::after { + content: "\e00d\e00d"; } + +.fad.fa-scythe::after, .fa-duotone.fa-scythe::after { + content: "\f710\f710"; } + +.fad.fa-pen-nib::after, .fa-duotone.fa-pen-nib::after { + content: "\f5ad\f5ad"; } + +.fad.fa-ban-parking::after, .fa-duotone.fa-ban-parking::after { + content: "\f616\f616"; } + +.fad.fa-parking-circle-slash::after, .fa-duotone.fa-parking-circle-slash::after { + content: "\f616\f616"; } + +.fad.fa-tent-arrow-turn-left::after, .fa-duotone.fa-tent-arrow-turn-left::after { + content: "\e580\e580"; } + +.fad.fa-face-diagonal-mouth::after, .fa-duotone.fa-face-diagonal-mouth::after { + content: "\e47e\e47e"; } + +.fad.fa-diagram-cells::after, .fa-duotone.fa-diagram-cells::after { + content: "\e475\e475"; } + +.fad.fa-cricket-bat-ball::after, .fa-duotone.fa-cricket-bat-ball::after { + content: "\f449\f449"; } + +.fad.fa-cricket::after, .fa-duotone.fa-cricket::after { + content: "\f449\f449"; } + +.fad.fa-tents::after, .fa-duotone.fa-tents::after { + content: "\e582\e582"; } + +.fad.fa-wand-magic::after, .fa-duotone.fa-wand-magic::after { + content: "\f0d0\f0d0"; } + +.fad.fa-magic::after, .fa-duotone.fa-magic::after { + content: "\f0d0\f0d0"; } + +.fad.fa-dog::after, .fa-duotone.fa-dog::after { + content: "\f6d3\f6d3"; } + +.fad.fa-pen-line::after, .fa-duotone.fa-pen-line::after { + content: "\e212\e212"; } + +.fad.fa-atom-simple::after, .fa-duotone.fa-atom-simple::after { + content: "\f5d3\f5d3"; } + +.fad.fa-atom-alt::after, .fa-duotone.fa-atom-alt::after { + content: "\f5d3\f5d3"; } + +.fad.fa-ampersand::after, .fa-duotone.fa-ampersand::after { + content: "\26\26"; } + +.fad.fa-carrot::after, .fa-duotone.fa-carrot::after { + content: "\f787\f787"; } + +.fad.fa-arrow-up-from-line::after, .fa-duotone.fa-arrow-up-from-line::after { + content: "\f342\f342"; } + +.fad.fa-arrow-from-bottom::after, .fa-duotone.fa-arrow-from-bottom::after { + content: "\f342\f342"; } + +.fad.fa-moon::after, .fa-duotone.fa-moon::after { + content: "\f186\f186"; } + +.fad.fa-pen-slash::after, .fa-duotone.fa-pen-slash::after { + content: "\e213\e213"; } + +.fad.fa-wine-glass-empty::after, .fa-duotone.fa-wine-glass-empty::after { + content: "\f5ce\f5ce"; } + +.fad.fa-wine-glass-alt::after, .fa-duotone.fa-wine-glass-alt::after { + content: "\f5ce\f5ce"; } + +.fad.fa-square-star::after, .fa-duotone.fa-square-star::after { + content: "\e27f\e27f"; } + +.fad.fa-cheese::after, .fa-duotone.fa-cheese::after { + content: "\f7ef\f7ef"; } + +.fad.fa-send-backward::after, .fa-duotone.fa-send-backward::after { + content: "\f87f\f87f"; } + +.fad.fa-yin-yang::after, .fa-duotone.fa-yin-yang::after { + content: "\f6ad\f6ad"; } + +.fad.fa-music::after, .fa-duotone.fa-music::after { + content: "\f001\f001"; } + +.fad.fa-compass-slash::after, .fa-duotone.fa-compass-slash::after { + content: "\f5e9\f5e9"; } + +.fad.fa-clock-one::after, .fa-duotone.fa-clock-one::after { + content: "\e34e\e34e"; } + +.fad.fa-file-music::after, .fa-duotone.fa-file-music::after { + content: "\f8b6\f8b6"; } + +.fad.fa-code-commit::after, .fa-duotone.fa-code-commit::after { + content: "\f386\f386"; } + +.fad.fa-temperature-low::after, .fa-duotone.fa-temperature-low::after { + content: "\f76b\f76b"; } + +.fad.fa-person-biking::after, .fa-duotone.fa-person-biking::after { + content: "\f84a\f84a"; } + +.fad.fa-biking::after, .fa-duotone.fa-biking::after { + content: "\f84a\f84a"; } + +.fad.fa-display-chart-up-circle-currency::after, .fa-duotone.fa-display-chart-up-circle-currency::after { + content: "\e5e5\e5e5"; } + +.fad.fa-skeleton::after, .fa-duotone.fa-skeleton::after { + content: "\f620\f620"; } + +.fad.fa-circle-g::after, .fa-duotone.fa-circle-g::after { + content: "\e10f\e10f"; } + +.fad.fa-circle-arrow-up-left::after, .fa-duotone.fa-circle-arrow-up-left::after { + content: "\e0fb\e0fb"; } + +.fad.fa-coin-blank::after, .fa-duotone.fa-coin-blank::after { + content: "\e3fb\e3fb"; } + +.fad.fa-broom::after, .fa-duotone.fa-broom::after { + content: "\f51a\f51a"; } + +.fad.fa-vacuum::after, .fa-duotone.fa-vacuum::after { + content: "\e04d\e04d"; } + +.fad.fa-shield-heart::after, .fa-duotone.fa-shield-heart::after { + content: "\e574\e574"; } + +.fad.fa-card-heart::after, .fa-duotone.fa-card-heart::after { + content: "\e3eb\e3eb"; } + +.fad.fa-lightbulb-cfl-on::after, .fa-duotone.fa-lightbulb-cfl-on::after { + content: "\e5a7\e5a7"; } + +.fad.fa-melon::after, .fa-duotone.fa-melon::after { + content: "\e310\e310"; } + +.fad.fa-gopuram::after, .fa-duotone.fa-gopuram::after { + content: "\f664\f664"; } + +.fad.fa-earth-oceania::after, .fa-duotone.fa-earth-oceania::after { + content: "\e47b\e47b"; } + +.fad.fa-globe-oceania::after, .fa-duotone.fa-globe-oceania::after { + content: "\e47b\e47b"; } + +.fad.fa-container-storage::after, .fa-duotone.fa-container-storage::after { + content: "\f4b7\f4b7"; } + +.fad.fa-face-pouting::after, .fa-duotone.fa-face-pouting::after { + content: "\e387\e387"; } + +.fad.fa-square-xmark::after, .fa-duotone.fa-square-xmark::after { + content: "\f2d3\f2d3"; } + +.fad.fa-times-square::after, .fa-duotone.fa-times-square::after { + content: "\f2d3\f2d3"; } + +.fad.fa-xmark-square::after, .fa-duotone.fa-xmark-square::after { + content: "\f2d3\f2d3"; } + +.fad.fa-face-explode::after, .fa-duotone.fa-face-explode::after { + content: "\e2fe\e2fe"; } + +.fad.fa-exploding-head::after, .fa-duotone.fa-exploding-head::after { + content: "\e2fe\e2fe"; } + +.fad.fa-hashtag::after, .fa-duotone.fa-hashtag::after { + content: "\23\23"; } + +.fad.fa-up-right-and-down-left-from-center::after, .fa-duotone.fa-up-right-and-down-left-from-center::after { + content: "\f424\f424"; } + +.fad.fa-expand-alt::after, .fa-duotone.fa-expand-alt::after { + content: "\f424\f424"; } + +.fad.fa-oil-can::after, .fa-duotone.fa-oil-can::after { + content: "\f613\f613"; } + +.fad.fa-t::after, .fa-duotone.fa-t::after { + content: "\54\54"; } + +.fad.fa-transformer-bolt::after, .fa-duotone.fa-transformer-bolt::after { + content: "\e2a4\e2a4"; } + +.fad.fa-hippo::after, .fa-duotone.fa-hippo::after { + content: "\f6ed\f6ed"; } + +.fad.fa-chart-column::after, .fa-duotone.fa-chart-column::after { + content: "\e0e3\e0e3"; } + +.fad.fa-cassette-vhs::after, .fa-duotone.fa-cassette-vhs::after { + content: "\f8ec\f8ec"; } + +.fad.fa-vhs::after, .fa-duotone.fa-vhs::after { + content: "\f8ec\f8ec"; } + +.fad.fa-infinity::after, .fa-duotone.fa-infinity::after { + content: "\f534\f534"; } + +.fad.fa-vial-circle-check::after, .fa-duotone.fa-vial-circle-check::after { + content: "\e596\e596"; } + +.fad.fa-chimney::after, .fa-duotone.fa-chimney::after { + content: "\f78b\f78b"; } + +.fad.fa-object-intersect::after, .fa-duotone.fa-object-intersect::after { + content: "\e49d\e49d"; } + +.fad.fa-person-arrow-down-to-line::after, .fa-duotone.fa-person-arrow-down-to-line::after { + content: "\e538\e538"; } + +.fad.fa-voicemail::after, .fa-duotone.fa-voicemail::after { + content: "\f897\f897"; } + +.fad.fa-block-brick::after, .fa-duotone.fa-block-brick::after { + content: "\e3db\e3db"; } + +.fad.fa-wall-brick::after, .fa-duotone.fa-wall-brick::after { + content: "\e3db\e3db"; } + +.fad.fa-fan::after, .fa-duotone.fa-fan::after { + content: "\f863\f863"; } + +.fad.fa-bags-shopping::after, .fa-duotone.fa-bags-shopping::after { + content: "\f847\f847"; } + +.fad.fa-paragraph-left::after, .fa-duotone.fa-paragraph-left::after { + content: "\f878\f878"; } + +.fad.fa-paragraph-rtl::after, .fa-duotone.fa-paragraph-rtl::after { + content: "\f878\f878"; } + +.fad.fa-person-walking-luggage::after, .fa-duotone.fa-person-walking-luggage::after { + content: "\e554\e554"; } + +.fad.fa-caravan-simple::after, .fa-duotone.fa-caravan-simple::after { + content: "\e000\e000"; } + +.fad.fa-caravan-alt::after, .fa-duotone.fa-caravan-alt::after { + content: "\e000\e000"; } + +.fad.fa-turtle::after, .fa-duotone.fa-turtle::after { + content: "\f726\f726"; } + +.fad.fa-pencil-mechanical::after, .fa-duotone.fa-pencil-mechanical::after { + content: "\e5ca\e5ca"; } + +.fad.fa-up-down::after, .fa-duotone.fa-up-down::after { + content: "\f338\f338"; } + +.fad.fa-arrows-alt-v::after, .fa-duotone.fa-arrows-alt-v::after { + content: "\f338\f338"; } + +.fad.fa-cloud-moon-rain::after, .fa-duotone.fa-cloud-moon-rain::after { + content: "\f73c\f73c"; } + +.fad.fa-booth-curtain::after, .fa-duotone.fa-booth-curtain::after { + content: "\f734\f734"; } + +.fad.fa-calendar::after, .fa-duotone.fa-calendar::after { + content: "\f133\f133"; } + +.fad.fa-box-heart::after, .fa-duotone.fa-box-heart::after { + content: "\f49d\f49d"; } + +.fad.fa-trailer::after, .fa-duotone.fa-trailer::after { + content: "\e041\e041"; } + +.fad.fa-user-doctor-message::after, .fa-duotone.fa-user-doctor-message::after { + content: "\f82e\f82e"; } + +.fad.fa-user-md-chat::after, .fa-duotone.fa-user-md-chat::after { + content: "\f82e\f82e"; } + +.fad.fa-bahai::after, .fa-duotone.fa-bahai::after { + content: "\f666\f666"; } + +.fad.fa-haykal::after, .fa-duotone.fa-haykal::after { + content: "\f666\f666"; } + +.fad.fa-lighthouse::after, .fa-duotone.fa-lighthouse::after { + content: "\e612\e612"; } + +.fad.fa-amp-guitar::after, .fa-duotone.fa-amp-guitar::after { + content: "\f8a1\f8a1"; } + +.fad.fa-sd-card::after, .fa-duotone.fa-sd-card::after { + content: "\f7c2\f7c2"; } + +.fad.fa-volume-slash::after, .fa-duotone.fa-volume-slash::after { + content: "\f2e2\f2e2"; } + +.fad.fa-border-bottom::after, .fa-duotone.fa-border-bottom::after { + content: "\f84d\f84d"; } + +.fad.fa-wifi-weak::after, .fa-duotone.fa-wifi-weak::after { + content: "\f6aa\f6aa"; } + +.fad.fa-wifi-1::after, .fa-duotone.fa-wifi-1::after { + content: "\f6aa\f6aa"; } + +.fad.fa-dragon::after, .fa-duotone.fa-dragon::after { + content: "\f6d5\f6d5"; } + +.fad.fa-shoe-prints::after, .fa-duotone.fa-shoe-prints::after { + content: "\f54b\f54b"; } + +.fad.fa-circle-plus::after, .fa-duotone.fa-circle-plus::after { + content: "\f055\f055"; } + +.fad.fa-plus-circle::after, .fa-duotone.fa-plus-circle::after { + content: "\f055\f055"; } + +.fad.fa-face-grin-tongue-wink::after, .fa-duotone.fa-face-grin-tongue-wink::after { + content: "\f58b\f58b"; } + +.fad.fa-grin-tongue-wink::after, .fa-duotone.fa-grin-tongue-wink::after { + content: "\f58b\f58b"; } + +.fad.fa-hand-holding::after, .fa-duotone.fa-hand-holding::after { + content: "\f4bd\f4bd"; } + +.fad.fa-plug-circle-exclamation::after, .fa-duotone.fa-plug-circle-exclamation::after { + content: "\e55d\e55d"; } + +.fad.fa-link-slash::after, .fa-duotone.fa-link-slash::after { + content: "\f127\f127"; } + +.fad.fa-chain-broken::after, .fa-duotone.fa-chain-broken::after { + content: "\f127\f127"; } + +.fad.fa-chain-slash::after, .fa-duotone.fa-chain-slash::after { + content: "\f127\f127"; } + +.fad.fa-unlink::after, .fa-duotone.fa-unlink::after { + content: "\f127\f127"; } + +.fad.fa-clone::after, .fa-duotone.fa-clone::after { + content: "\f24d\f24d"; } + +.fad.fa-person-walking-arrow-loop-left::after, .fa-duotone.fa-person-walking-arrow-loop-left::after { + content: "\e551\e551"; } + +.fad.fa-arrow-up-z-a::after, .fa-duotone.fa-arrow-up-z-a::after { + content: "\f882\f882"; } + +.fad.fa-sort-alpha-up-alt::after, .fa-duotone.fa-sort-alpha-up-alt::after { + content: "\f882\f882"; } + +.fad.fa-fire-flame-curved::after, .fa-duotone.fa-fire-flame-curved::after { + content: "\f7e4\f7e4"; } + +.fad.fa-fire-alt::after, .fa-duotone.fa-fire-alt::after { + content: "\f7e4\f7e4"; } + +.fad.fa-tornado::after, .fa-duotone.fa-tornado::after { + content: "\f76f\f76f"; } + +.fad.fa-file-circle-plus::after, .fa-duotone.fa-file-circle-plus::after { + content: "\e494\e494"; } + +.fad.fa-delete-right::after, .fa-duotone.fa-delete-right::after { + content: "\e154\e154"; } + +.fad.fa-book-quran::after, .fa-duotone.fa-book-quran::after { + content: "\f687\f687"; } + +.fad.fa-quran::after, .fa-duotone.fa-quran::after { + content: "\f687\f687"; } + +.fad.fa-circle-quarter::after, .fa-duotone.fa-circle-quarter::after { + content: "\e11f\e11f"; } + +.fad.fa-anchor::after, .fa-duotone.fa-anchor::after { + content: "\f13d\f13d"; } + +.fad.fa-border-all::after, .fa-duotone.fa-border-all::after { + content: "\f84c\f84c"; } + +.fad.fa-function::after, .fa-duotone.fa-function::after { + content: "\f661\f661"; } + +.fad.fa-face-angry::after, .fa-duotone.fa-face-angry::after { + content: "\f556\f556"; } + +.fad.fa-angry::after, .fa-duotone.fa-angry::after { + content: "\f556\f556"; } + +.fad.fa-people-simple::after, .fa-duotone.fa-people-simple::after { + content: "\e21b\e21b"; } + +.fad.fa-cookie-bite::after, .fa-duotone.fa-cookie-bite::after { + content: "\f564\f564"; } + +.fad.fa-arrow-trend-down::after, .fa-duotone.fa-arrow-trend-down::after { + content: "\e097\e097"; } + +.fad.fa-rss::after, .fa-duotone.fa-rss::after { + content: "\f09e\f09e"; } + +.fad.fa-feed::after, .fa-duotone.fa-feed::after { + content: "\f09e\f09e"; } + +.fad.fa-face-monocle::after, .fa-duotone.fa-face-monocle::after { + content: "\e380\e380"; } + +.fad.fa-draw-polygon::after, .fa-duotone.fa-draw-polygon::after { + content: "\f5ee\f5ee"; } + +.fad.fa-scale-balanced::after, .fa-duotone.fa-scale-balanced::after { + content: "\f24e\f24e"; } + +.fad.fa-balance-scale::after, .fa-duotone.fa-balance-scale::after { + content: "\f24e\f24e"; } + +.fad.fa-calendar-lines::after, .fa-duotone.fa-calendar-lines::after { + content: "\e0d5\e0d5"; } + +.fad.fa-calendar-note::after, .fa-duotone.fa-calendar-note::after { + content: "\e0d5\e0d5"; } + +.fad.fa-arrow-down-big-small::after, .fa-duotone.fa-arrow-down-big-small::after { + content: "\f88c\f88c"; } + +.fad.fa-sort-size-down::after, .fa-duotone.fa-sort-size-down::after { + content: "\f88c\f88c"; } + +.fad.fa-gauge-simple-high::after, .fa-duotone.fa-gauge-simple-high::after { + content: "\f62a\f62a"; } + +.fad.fa-tachometer::after, .fa-duotone.fa-tachometer::after { + content: "\f62a\f62a"; } + +.fad.fa-tachometer-fast::after, .fa-duotone.fa-tachometer-fast::after { + content: "\f62a\f62a"; } + +.fad.fa-do-not-enter::after, .fa-duotone.fa-do-not-enter::after { + content: "\f5ec\f5ec"; } + +.fad.fa-shower::after, .fa-duotone.fa-shower::after { + content: "\f2cc\f2cc"; } + +.fad.fa-dice-d8::after, .fa-duotone.fa-dice-d8::after { + content: "\f6d2\f6d2"; } + +.fad.fa-desktop::after, .fa-duotone.fa-desktop::after { + content: "\f390\f390"; } + +.fad.fa-desktop-alt::after, .fa-duotone.fa-desktop-alt::after { + content: "\f390\f390"; } + +.fad.fa-m::after, .fa-duotone.fa-m::after { + content: "\4d\4d"; } + +.fad.fa-grip-dots-vertical::after, .fa-duotone.fa-grip-dots-vertical::after { + content: "\e411\e411"; } + +.fad.fa-face-viewfinder::after, .fa-duotone.fa-face-viewfinder::after { + content: "\e2ff\e2ff"; } + +.fad.fa-soft-serve::after, .fa-duotone.fa-soft-serve::after { + content: "\e400\e400"; } + +.fad.fa-creemee::after, .fa-duotone.fa-creemee::after { + content: "\e400\e400"; } + +.fad.fa-h5::after, .fa-duotone.fa-h5::after { + content: "\e412\e412"; } + +.fad.fa-hand-back-point-down::after, .fa-duotone.fa-hand-back-point-down::after { + content: "\e19e\e19e"; } + +.fad.fa-table-list::after, .fa-duotone.fa-table-list::after { + content: "\f00b\f00b"; } + +.fad.fa-th-list::after, .fa-duotone.fa-th-list::after { + content: "\f00b\f00b"; } + +.fad.fa-comment-sms::after, .fa-duotone.fa-comment-sms::after { + content: "\f7cd\f7cd"; } + +.fad.fa-sms::after, .fa-duotone.fa-sms::after { + content: "\f7cd\f7cd"; } + +.fad.fa-rectangle::after, .fa-duotone.fa-rectangle::after { + content: "\f2fa\f2fa"; } + +.fad.fa-rectangle-landscape::after, .fa-duotone.fa-rectangle-landscape::after { + content: "\f2fa\f2fa"; } + +.fad.fa-clipboard-list-check::after, .fa-duotone.fa-clipboard-list-check::after { + content: "\f737\f737"; } + +.fad.fa-turkey::after, .fa-duotone.fa-turkey::after { + content: "\f725\f725"; } + +.fad.fa-book::after, .fa-duotone.fa-book::after { + content: "\f02d\f02d"; } + +.fad.fa-user-plus::after, .fa-duotone.fa-user-plus::after { + content: "\f234\f234"; } + +.fad.fa-ice-skate::after, .fa-duotone.fa-ice-skate::after { + content: "\f7ac\f7ac"; } + +.fad.fa-check::after, .fa-duotone.fa-check::after { + content: "\f00c\f00c"; } + +.fad.fa-battery-three-quarters::after, .fa-duotone.fa-battery-three-quarters::after { + content: "\f241\f241"; } + +.fad.fa-battery-4::after, .fa-duotone.fa-battery-4::after { + content: "\f241\f241"; } + +.fad.fa-tomato::after, .fa-duotone.fa-tomato::after { + content: "\e330\e330"; } + +.fad.fa-sword-laser::after, .fa-duotone.fa-sword-laser::after { + content: "\e03b\e03b"; } + +.fad.fa-house-circle-check::after, .fa-duotone.fa-house-circle-check::after { + content: "\e509\e509"; } + +.fad.fa-buildings::after, .fa-duotone.fa-buildings::after { + content: "\e0cc\e0cc"; } + +.fad.fa-angle-left::after, .fa-duotone.fa-angle-left::after { + content: "\f104\f104"; } + +.fad.fa-cart-flatbed-boxes::after, .fa-duotone.fa-cart-flatbed-boxes::after { + content: "\f475\f475"; } + +.fad.fa-dolly-flatbed-alt::after, .fa-duotone.fa-dolly-flatbed-alt::after { + content: "\f475\f475"; } + +.fad.fa-diagram-successor::after, .fa-duotone.fa-diagram-successor::after { + content: "\e47a\e47a"; } + +.fad.fa-truck-arrow-right::after, .fa-duotone.fa-truck-arrow-right::after { + content: "\e58b\e58b"; } + +.fad.fa-square-w::after, .fa-duotone.fa-square-w::after { + content: "\e285\e285"; } + +.fad.fa-arrows-split-up-and-left::after, .fa-duotone.fa-arrows-split-up-and-left::after { + content: "\e4bc\e4bc"; } + +.fad.fa-lamp::after, .fa-duotone.fa-lamp::after { + content: "\f4ca\f4ca"; } + +.fad.fa-airplay::after, .fa-duotone.fa-airplay::after { + content: "\e089\e089"; } + +.fad.fa-hand-fist::after, .fa-duotone.fa-hand-fist::after { + content: "\f6de\f6de"; } + +.fad.fa-fist-raised::after, .fa-duotone.fa-fist-raised::after { + content: "\f6de\f6de"; } + +.fad.fa-shield-quartered::after, .fa-duotone.fa-shield-quartered::after { + content: "\e575\e575"; } + +.fad.fa-slash-forward::after, .fa-duotone.fa-slash-forward::after { + content: "\2f\2f"; } + +.fad.fa-location-pen::after, .fa-duotone.fa-location-pen::after { + content: "\f607\f607"; } + +.fad.fa-map-marker-edit::after, .fa-duotone.fa-map-marker-edit::after { + content: "\f607\f607"; } + +.fad.fa-cloud-moon::after, .fa-duotone.fa-cloud-moon::after { + content: "\f6c3\f6c3"; } + +.fad.fa-pot-food::after, .fa-duotone.fa-pot-food::after { + content: "\e43f\e43f"; } + +.fad.fa-briefcase::after, .fa-duotone.fa-briefcase::after { + content: "\f0b1\f0b1"; } + +.fad.fa-person-falling::after, .fa-duotone.fa-person-falling::after { + content: "\e546\e546"; } + +.fad.fa-image-portrait::after, .fa-duotone.fa-image-portrait::after { + content: "\f3e0\f3e0"; } + +.fad.fa-portrait::after, .fa-duotone.fa-portrait::after { + content: "\f3e0\f3e0"; } + +.fad.fa-user-tag::after, .fa-duotone.fa-user-tag::after { + content: "\f507\f507"; } + +.fad.fa-rug::after, .fa-duotone.fa-rug::after { + content: "\e569\e569"; } + +.fad.fa-print-slash::after, .fa-duotone.fa-print-slash::after { + content: "\f686\f686"; } + +.fad.fa-earth-europe::after, .fa-duotone.fa-earth-europe::after { + content: "\f7a2\f7a2"; } + +.fad.fa-globe-europe::after, .fa-duotone.fa-globe-europe::after { + content: "\f7a2\f7a2"; } + +.fad.fa-cart-flatbed-suitcase::after, .fa-duotone.fa-cart-flatbed-suitcase::after { + content: "\f59d\f59d"; } + +.fad.fa-luggage-cart::after, .fa-duotone.fa-luggage-cart::after { + content: "\f59d\f59d"; } + +.fad.fa-hand-back-point-ribbon::after, .fa-duotone.fa-hand-back-point-ribbon::after { + content: "\e1a0\e1a0"; } + +.fad.fa-rectangle-xmark::after, .fa-duotone.fa-rectangle-xmark::after { + content: "\f410\f410"; } + +.fad.fa-rectangle-times::after, .fa-duotone.fa-rectangle-times::after { + content: "\f410\f410"; } + +.fad.fa-times-rectangle::after, .fa-duotone.fa-times-rectangle::after { + content: "\f410\f410"; } + +.fad.fa-window-close::after, .fa-duotone.fa-window-close::after { + content: "\f410\f410"; } + +.fad.fa-tire-rugged::after, .fa-duotone.fa-tire-rugged::after { + content: "\f634\f634"; } + +.fad.fa-lightbulb-dollar::after, .fa-duotone.fa-lightbulb-dollar::after { + content: "\f670\f670"; } + +.fad.fa-cowbell::after, .fa-duotone.fa-cowbell::after { + content: "\f8b3\f8b3"; } + +.fad.fa-baht-sign::after, .fa-duotone.fa-baht-sign::after { + content: "\e0ac\e0ac"; } + +.fad.fa-corner::after, .fa-duotone.fa-corner::after { + content: "\e3fe\e3fe"; } + +.fad.fa-chevrons-right::after, .fa-duotone.fa-chevrons-right::after { + content: "\f324\f324"; } + +.fad.fa-chevron-double-right::after, .fa-duotone.fa-chevron-double-right::after { + content: "\f324\f324"; } + +.fad.fa-book-open::after, .fa-duotone.fa-book-open::after { + content: "\f518\f518"; } + +.fad.fa-book-journal-whills::after, .fa-duotone.fa-book-journal-whills::after { + content: "\f66a\f66a"; } + +.fad.fa-journal-whills::after, .fa-duotone.fa-journal-whills::after { + content: "\f66a\f66a"; } + +.fad.fa-inhaler::after, .fa-duotone.fa-inhaler::after { + content: "\f5f9\f5f9"; } + +.fad.fa-handcuffs::after, .fa-duotone.fa-handcuffs::after { + content: "\e4f8\e4f8"; } + +.fad.fa-snake::after, .fa-duotone.fa-snake::after { + content: "\f716\f716"; } + +.fad.fa-triangle-exclamation::after, .fa-duotone.fa-triangle-exclamation::after { + content: "\f071\f071"; } + +.fad.fa-exclamation-triangle::after, .fa-duotone.fa-exclamation-triangle::after { + content: "\f071\f071"; } + +.fad.fa-warning::after, .fa-duotone.fa-warning::after { + content: "\f071\f071"; } + +.fad.fa-note-medical::after, .fa-duotone.fa-note-medical::after { + content: "\e200\e200"; } + +.fad.fa-database::after, .fa-duotone.fa-database::after { + content: "\f1c0\f1c0"; } + +.fad.fa-down-left::after, .fa-duotone.fa-down-left::after { + content: "\e16a\e16a"; } + +.fad.fa-share::after, .fa-duotone.fa-share::after { + content: "\f064\f064"; } + +.fad.fa-arrow-turn-right::after, .fa-duotone.fa-arrow-turn-right::after { + content: "\f064\f064"; } + +.fad.fa-mail-forward::after, .fa-duotone.fa-mail-forward::after { + content: "\f064\f064"; } + +.fad.fa-face-thinking::after, .fa-duotone.fa-face-thinking::after { + content: "\e39b\e39b"; } + +.fad.fa-turn-down-right::after, .fa-duotone.fa-turn-down-right::after { + content: "\e455\e455"; } + +.fad.fa-bottle-droplet::after, .fa-duotone.fa-bottle-droplet::after { + content: "\e4c4\e4c4"; } + +.fad.fa-mask-face::after, .fa-duotone.fa-mask-face::after { + content: "\e1d7\e1d7"; } + +.fad.fa-hill-rockslide::after, .fa-duotone.fa-hill-rockslide::after { + content: "\e508\e508"; } + +.fad.fa-scanner-keyboard::after, .fa-duotone.fa-scanner-keyboard::after { + content: "\f489\f489"; } + +.fad.fa-circle-o::after, .fa-duotone.fa-circle-o::after { + content: "\e119\e119"; } + +.fad.fa-grid-horizontal::after, .fa-duotone.fa-grid-horizontal::after { + content: "\e307\e307"; } + +.fad.fa-message-dollar::after, .fa-duotone.fa-message-dollar::after { + content: "\f650\f650"; } + +.fad.fa-comment-alt-dollar::after, .fa-duotone.fa-comment-alt-dollar::after { + content: "\f650\f650"; } + +.fad.fa-right-left::after, .fa-duotone.fa-right-left::after { + content: "\f362\f362"; } + +.fad.fa-exchange-alt::after, .fa-duotone.fa-exchange-alt::after { + content: "\f362\f362"; } + +.fad.fa-columns-3::after, .fa-duotone.fa-columns-3::after { + content: "\e361\e361"; } + +.fad.fa-paper-plane::after, .fa-duotone.fa-paper-plane::after { + content: "\f1d8\f1d8"; } + +.fad.fa-road-circle-exclamation::after, .fa-duotone.fa-road-circle-exclamation::after { + content: "\e565\e565"; } + +.fad.fa-dungeon::after, .fa-duotone.fa-dungeon::after { + content: "\f6d9\f6d9"; } + +.fad.fa-hand-holding-box::after, .fa-duotone.fa-hand-holding-box::after { + content: "\f47b\f47b"; } + +.fad.fa-input-text::after, .fa-duotone.fa-input-text::after { + content: "\e1bf\e1bf"; } + +.fad.fa-window-flip::after, .fa-duotone.fa-window-flip::after { + content: "\f40f\f40f"; } + +.fad.fa-window-alt::after, .fa-duotone.fa-window-alt::after { + content: "\f40f\f40f"; } + +.fad.fa-align-right::after, .fa-duotone.fa-align-right::after { + content: "\f038\f038"; } + +.fad.fa-scanner-gun::after, .fa-duotone.fa-scanner-gun::after { + content: "\f488\f488"; } + +.fad.fa-scanner::after, .fa-duotone.fa-scanner::after { + content: "\f488\f488"; } + +.fad.fa-tire::after, .fa-duotone.fa-tire::after { + content: "\f631\f631"; } + +.fad.fa-engine::after, .fa-duotone.fa-engine::after { + content: "\e16e\e16e"; } + +.fad.fa-money-bill-1-wave::after, .fa-duotone.fa-money-bill-1-wave::after { + content: "\f53b\f53b"; } + +.fad.fa-money-bill-wave-alt::after, .fa-duotone.fa-money-bill-wave-alt::after { + content: "\f53b\f53b"; } + +.fad.fa-life-ring::after, .fa-duotone.fa-life-ring::after { + content: "\f1cd\f1cd"; } + +.fad.fa-hands::after, .fa-duotone.fa-hands::after { + content: "\f2a7\f2a7"; } + +.fad.fa-sign-language::after, .fa-duotone.fa-sign-language::after { + content: "\f2a7\f2a7"; } + +.fad.fa-signing::after, .fa-duotone.fa-signing::after { + content: "\f2a7\f2a7"; } + +.fad.fa-circle-caret-right::after, .fa-duotone.fa-circle-caret-right::after { + content: "\f330\f330"; } + +.fad.fa-caret-circle-right::after, .fa-duotone.fa-caret-circle-right::after { + content: "\f330\f330"; } + +.fad.fa-wheat::after, .fa-duotone.fa-wheat::after { + content: "\f72d\f72d"; } + +.fad.fa-file-spreadsheet::after, .fa-duotone.fa-file-spreadsheet::after { + content: "\f65b\f65b"; } + +.fad.fa-audio-description-slash::after, .fa-duotone.fa-audio-description-slash::after { + content: "\e0a8\e0a8"; } + +.fad.fa-calendar-day::after, .fa-duotone.fa-calendar-day::after { + content: "\f783\f783"; } + +.fad.fa-water-ladder::after, .fa-duotone.fa-water-ladder::after { + content: "\f5c5\f5c5"; } + +.fad.fa-ladder-water::after, .fa-duotone.fa-ladder-water::after { + content: "\f5c5\f5c5"; } + +.fad.fa-swimming-pool::after, .fa-duotone.fa-swimming-pool::after { + content: "\f5c5\f5c5"; } + +.fad.fa-arrows-up-down::after, .fa-duotone.fa-arrows-up-down::after { + content: "\f07d\f07d"; } + +.fad.fa-arrows-v::after, .fa-duotone.fa-arrows-v::after { + content: "\f07d\f07d"; } + +.fad.fa-chess-pawn-piece::after, .fa-duotone.fa-chess-pawn-piece::after { + content: "\f444\f444"; } + +.fad.fa-chess-pawn-alt::after, .fa-duotone.fa-chess-pawn-alt::after { + content: "\f444\f444"; } + +.fad.fa-face-grimace::after, .fa-duotone.fa-face-grimace::after { + content: "\f57f\f57f"; } + +.fad.fa-grimace::after, .fa-duotone.fa-grimace::after { + content: "\f57f\f57f"; } + +.fad.fa-wheelchair-move::after, .fa-duotone.fa-wheelchair-move::after { + content: "\e2ce\e2ce"; } + +.fad.fa-wheelchair-alt::after, .fa-duotone.fa-wheelchair-alt::after { + content: "\e2ce\e2ce"; } + +.fad.fa-turn-down::after, .fa-duotone.fa-turn-down::after { + content: "\f3be\f3be"; } + +.fad.fa-level-down-alt::after, .fa-duotone.fa-level-down-alt::after { + content: "\f3be\f3be"; } + +.fad.fa-square-s::after, .fa-duotone.fa-square-s::after { + content: "\e27d\e27d"; } + +.fad.fa-rectangle-barcode::after, .fa-duotone.fa-rectangle-barcode::after { + content: "\f463\f463"; } + +.fad.fa-barcode-alt::after, .fa-duotone.fa-barcode-alt::after { + content: "\f463\f463"; } + +.fad.fa-person-walking-arrow-right::after, .fa-duotone.fa-person-walking-arrow-right::after { + content: "\e552\e552"; } + +.fad.fa-square-envelope::after, .fa-duotone.fa-square-envelope::after { + content: "\f199\f199"; } + +.fad.fa-envelope-square::after, .fa-duotone.fa-envelope-square::after { + content: "\f199\f199"; } + +.fad.fa-dice::after, .fa-duotone.fa-dice::after { + content: "\f522\f522"; } + +.fad.fa-unicorn::after, .fa-duotone.fa-unicorn::after { + content: "\f727\f727"; } + +.fad.fa-bowling-ball::after, .fa-duotone.fa-bowling-ball::after { + content: "\f436\f436"; } + +.fad.fa-pompebled::after, .fa-duotone.fa-pompebled::after { + content: "\e43d\e43d"; } + +.fad.fa-brain::after, .fa-duotone.fa-brain::after { + content: "\f5dc\f5dc"; } + +.fad.fa-watch-smart::after, .fa-duotone.fa-watch-smart::after { + content: "\e2cc\e2cc"; } + +.fad.fa-book-user::after, .fa-duotone.fa-book-user::after { + content: "\f7e7\f7e7"; } + +.fad.fa-sensor-cloud::after, .fa-duotone.fa-sensor-cloud::after { + content: "\e02c\e02c"; } + +.fad.fa-sensor-smoke::after, .fa-duotone.fa-sensor-smoke::after { + content: "\e02c\e02c"; } + +.fad.fa-clapperboard-play::after, .fa-duotone.fa-clapperboard-play::after { + content: "\e132\e132"; } + +.fad.fa-bandage::after, .fa-duotone.fa-bandage::after { + content: "\f462\f462"; } + +.fad.fa-band-aid::after, .fa-duotone.fa-band-aid::after { + content: "\f462\f462"; } + +.fad.fa-calendar-minus::after, .fa-duotone.fa-calendar-minus::after { + content: "\f272\f272"; } + +.fad.fa-circle-xmark::after, .fa-duotone.fa-circle-xmark::after { + content: "\f057\f057"; } + +.fad.fa-times-circle::after, .fa-duotone.fa-times-circle::after { + content: "\f057\f057"; } + +.fad.fa-xmark-circle::after, .fa-duotone.fa-xmark-circle::after { + content: "\f057\f057"; } + +.fad.fa-circle-4::after, .fa-duotone.fa-circle-4::after { + content: "\e0f1\e0f1"; } + +.fad.fa-gifts::after, .fa-duotone.fa-gifts::after { + content: "\f79c\f79c"; } + +.fad.fa-album-collection::after, .fa-duotone.fa-album-collection::after { + content: "\f8a0\f8a0"; } + +.fad.fa-hotel::after, .fa-duotone.fa-hotel::after { + content: "\f594\f594"; } + +.fad.fa-earth-asia::after, .fa-duotone.fa-earth-asia::after { + content: "\f57e\f57e"; } + +.fad.fa-globe-asia::after, .fa-duotone.fa-globe-asia::after { + content: "\f57e\f57e"; } + +.fad.fa-id-card-clip::after, .fa-duotone.fa-id-card-clip::after { + content: "\f47f\f47f"; } + +.fad.fa-id-card-alt::after, .fa-duotone.fa-id-card-alt::after { + content: "\f47f\f47f"; } + +.fad.fa-magnifying-glass-plus::after, .fa-duotone.fa-magnifying-glass-plus::after { + content: "\f00e\f00e"; } + +.fad.fa-search-plus::after, .fa-duotone.fa-search-plus::after { + content: "\f00e\f00e"; } + +.fad.fa-thumbs-up::after, .fa-duotone.fa-thumbs-up::after { + content: "\f164\f164"; } + +.fad.fa-cloud-showers::after, .fa-duotone.fa-cloud-showers::after { + content: "\f73f\f73f"; } + +.fad.fa-user-clock::after, .fa-duotone.fa-user-clock::after { + content: "\f4fd\f4fd"; } + +.fad.fa-onion::after, .fa-duotone.fa-onion::after { + content: "\e427\e427"; } + +.fad.fa-clock-twelve-thirty::after, .fa-duotone.fa-clock-twelve-thirty::after { + content: "\e359\e359"; } + +.fad.fa-arrow-down-to-dotted-line::after, .fa-duotone.fa-arrow-down-to-dotted-line::after { + content: "\e095\e095"; } + +.fad.fa-hand-dots::after, .fa-duotone.fa-hand-dots::after { + content: "\f461\f461"; } + +.fad.fa-allergies::after, .fa-duotone.fa-allergies::after { + content: "\f461\f461"; } + +.fad.fa-file-invoice::after, .fa-duotone.fa-file-invoice::after { + content: "\f570\f570"; } + +.fad.fa-window-minimize::after, .fa-duotone.fa-window-minimize::after { + content: "\f2d1\f2d1"; } + +.fad.fa-rectangle-wide::after, .fa-duotone.fa-rectangle-wide::after { + content: "\f2fc\f2fc"; } + +.fad.fa-comment-arrow-up::after, .fa-duotone.fa-comment-arrow-up::after { + content: "\e144\e144"; } + +.fad.fa-garlic::after, .fa-duotone.fa-garlic::after { + content: "\e40e\e40e"; } + +.fad.fa-mug-saucer::after, .fa-duotone.fa-mug-saucer::after { + content: "\f0f4\f0f4"; } + +.fad.fa-coffee::after, .fa-duotone.fa-coffee::after { + content: "\f0f4\f0f4"; } + +.fad.fa-brush::after, .fa-duotone.fa-brush::after { + content: "\f55d\f55d"; } + +.fad.fa-tree-decorated::after, .fa-duotone.fa-tree-decorated::after { + content: "\f7dc\f7dc"; } + +.fad.fa-mask::after, .fa-duotone.fa-mask::after { + content: "\f6fa\f6fa"; } + +.fad.fa-calendar-heart::after, .fa-duotone.fa-calendar-heart::after { + content: "\e0d3\e0d3"; } + +.fad.fa-magnifying-glass-minus::after, .fa-duotone.fa-magnifying-glass-minus::after { + content: "\f010\f010"; } + +.fad.fa-search-minus::after, .fa-duotone.fa-search-minus::after { + content: "\f010\f010"; } + +.fad.fa-flower::after, .fa-duotone.fa-flower::after { + content: "\f7ff\f7ff"; } + +.fad.fa-arrow-down-from-arc::after, .fa-duotone.fa-arrow-down-from-arc::after { + content: "\e614\e614"; } + +.fad.fa-right-left-large::after, .fa-duotone.fa-right-left-large::after { + content: "\e5e1\e5e1"; } + +.fad.fa-ruler-vertical::after, .fa-duotone.fa-ruler-vertical::after { + content: "\f548\f548"; } + +.fad.fa-circles-overlap::after, .fa-duotone.fa-circles-overlap::after { + content: "\e600\e600"; } + +.fad.fa-user-large::after, .fa-duotone.fa-user-large::after { + content: "\f406\f406"; } + +.fad.fa-user-alt::after, .fa-duotone.fa-user-alt::after { + content: "\f406\f406"; } + +.fad.fa-starship-freighter::after, .fa-duotone.fa-starship-freighter::after { + content: "\e03a\e03a"; } + +.fad.fa-train-tram::after, .fa-duotone.fa-train-tram::after { + content: "\e5b4\e5b4"; } + +.fad.fa-bridge-suspension::after, .fa-duotone.fa-bridge-suspension::after { + content: "\e4cd\e4cd"; } + +.fad.fa-trash-check::after, .fa-duotone.fa-trash-check::after { + content: "\e2af\e2af"; } + +.fad.fa-user-nurse::after, .fa-duotone.fa-user-nurse::after { + content: "\f82f\f82f"; } + +.fad.fa-boombox::after, .fa-duotone.fa-boombox::after { + content: "\f8a5\f8a5"; } + +.fad.fa-syringe::after, .fa-duotone.fa-syringe::after { + content: "\f48e\f48e"; } + +.fad.fa-cloud-sun::after, .fa-duotone.fa-cloud-sun::after { + content: "\f6c4\f6c4"; } + +.fad.fa-shield-exclamation::after, .fa-duotone.fa-shield-exclamation::after { + content: "\e247\e247"; } + +.fad.fa-stopwatch-20::after, .fa-duotone.fa-stopwatch-20::after { + content: "\e06f\e06f"; } + +.fad.fa-square-full::after, .fa-duotone.fa-square-full::after { + content: "\f45c\f45c"; } + +.fad.fa-grip-dots::after, .fa-duotone.fa-grip-dots::after { + content: "\e410\e410"; } + +.fad.fa-comment-exclamation::after, .fa-duotone.fa-comment-exclamation::after { + content: "\f4af\f4af"; } + +.fad.fa-pen-swirl::after, .fa-duotone.fa-pen-swirl::after { + content: "\e214\e214"; } + +.fad.fa-falafel::after, .fa-duotone.fa-falafel::after { + content: "\e40a\e40a"; } + +.fad.fa-circle-2::after, .fa-duotone.fa-circle-2::after { + content: "\e0ef\e0ef"; } + +.fad.fa-magnet::after, .fa-duotone.fa-magnet::after { + content: "\f076\f076"; } + +.fad.fa-jar::after, .fa-duotone.fa-jar::after { + content: "\e516\e516"; } + +.fad.fa-gramophone::after, .fa-duotone.fa-gramophone::after { + content: "\f8bd\f8bd"; } + +.fad.fa-dice-d12::after, .fa-duotone.fa-dice-d12::after { + content: "\f6ce\f6ce"; } + +.fad.fa-note-sticky::after, .fa-duotone.fa-note-sticky::after { + content: "\f249\f249"; } + +.fad.fa-sticky-note::after, .fa-duotone.fa-sticky-note::after { + content: "\f249\f249"; } + +.fad.fa-down::after, .fa-duotone.fa-down::after { + content: "\f354\f354"; } + +.fad.fa-arrow-alt-down::after, .fa-duotone.fa-arrow-alt-down::after { + content: "\f354\f354"; } + +.fad.fa-hundred-points::after, .fa-duotone.fa-hundred-points::after { + content: "\e41c\e41c"; } + +.fad.fa-100::after, .fa-duotone.fa-100::after { + content: "\e41c\e41c"; } + +.fad.fa-paperclip-vertical::after, .fa-duotone.fa-paperclip-vertical::after { + content: "\e3c2\e3c2"; } + +.fad.fa-wind-warning::after, .fa-duotone.fa-wind-warning::after { + content: "\f776\f776"; } + +.fad.fa-wind-circle-exclamation::after, .fa-duotone.fa-wind-circle-exclamation::after { + content: "\f776\f776"; } + +.fad.fa-location-pin-slash::after, .fa-duotone.fa-location-pin-slash::after { + content: "\f60c\f60c"; } + +.fad.fa-map-marker-slash::after, .fa-duotone.fa-map-marker-slash::after { + content: "\f60c\f60c"; } + +.fad.fa-face-sad-sweat::after, .fa-duotone.fa-face-sad-sweat::after { + content: "\e38a\e38a"; } + +.fad.fa-bug-slash::after, .fa-duotone.fa-bug-slash::after { + content: "\e490\e490"; } + +.fad.fa-cupcake::after, .fa-duotone.fa-cupcake::after { + content: "\e402\e402"; } + +.fad.fa-light-switch-off::after, .fa-duotone.fa-light-switch-off::after { + content: "\e018\e018"; } + +.fad.fa-toggle-large-off::after, .fa-duotone.fa-toggle-large-off::after { + content: "\e5b0\e5b0"; } + +.fad.fa-pen-fancy-slash::after, .fa-duotone.fa-pen-fancy-slash::after { + content: "\e210\e210"; } + +.fad.fa-truck-container::after, .fa-duotone.fa-truck-container::after { + content: "\f4dc\f4dc"; } + +.fad.fa-boot::after, .fa-duotone.fa-boot::after { + content: "\f782\f782"; } + +.fad.fa-arrow-up-from-water-pump::after, .fa-duotone.fa-arrow-up-from-water-pump::after { + content: "\e4b6\e4b6"; } + +.fad.fa-file-check::after, .fa-duotone.fa-file-check::after { + content: "\f316\f316"; } + +.fad.fa-bone::after, .fa-duotone.fa-bone::after { + content: "\f5d7\f5d7"; } + +.fad.fa-cards-blank::after, .fa-duotone.fa-cards-blank::after { + content: "\e4df\e4df"; } + +.fad.fa-circle-3::after, .fa-duotone.fa-circle-3::after { + content: "\e0f0\e0f0"; } + +.fad.fa-bench-tree::after, .fa-duotone.fa-bench-tree::after { + content: "\e2e7\e2e7"; } + +.fad.fa-keyboard-brightness-low::after, .fa-duotone.fa-keyboard-brightness-low::after { + content: "\e1c1\e1c1"; } + +.fad.fa-ski-boot-ski::after, .fa-duotone.fa-ski-boot-ski::after { + content: "\e3cd\e3cd"; } + +.fad.fa-brain-circuit::after, .fa-duotone.fa-brain-circuit::after { + content: "\e0c6\e0c6"; } + +.fad.fa-user-injured::after, .fa-duotone.fa-user-injured::after { + content: "\f728\f728"; } + +.fad.fa-block-brick-fire::after, .fa-duotone.fa-block-brick-fire::after { + content: "\e3dc\e3dc"; } + +.fad.fa-firewall::after, .fa-duotone.fa-firewall::after { + content: "\e3dc\e3dc"; } + +.fad.fa-face-sad-tear::after, .fa-duotone.fa-face-sad-tear::after { + content: "\f5b4\f5b4"; } + +.fad.fa-sad-tear::after, .fa-duotone.fa-sad-tear::after { + content: "\f5b4\f5b4"; } + +.fad.fa-plane::after, .fa-duotone.fa-plane::after { + content: "\f072\f072"; } + +.fad.fa-tent-arrows-down::after, .fa-duotone.fa-tent-arrows-down::after { + content: "\e581\e581"; } + +.fad.fa-exclamation::after, .fa-duotone.fa-exclamation::after { + content: "\21\21"; } + +.fad.fa-arrows-spin::after, .fa-duotone.fa-arrows-spin::after { + content: "\e4bb\e4bb"; } + +.fad.fa-face-smile-relaxed::after, .fa-duotone.fa-face-smile-relaxed::after { + content: "\e392\e392"; } + +.fad.fa-comment-xmark::after, .fa-duotone.fa-comment-xmark::after { + content: "\f4b5\f4b5"; } + +.fad.fa-comment-times::after, .fa-duotone.fa-comment-times::after { + content: "\f4b5\f4b5"; } + +.fad.fa-print::after, .fa-duotone.fa-print::after { + content: "\f02f\f02f"; } + +.fad.fa-turkish-lira-sign::after, .fa-duotone.fa-turkish-lira-sign::after { + content: "\e2bb\e2bb"; } + +.fad.fa-try::after, .fa-duotone.fa-try::after { + content: "\e2bb\e2bb"; } + +.fad.fa-turkish-lira::after, .fa-duotone.fa-turkish-lira::after { + content: "\e2bb\e2bb"; } + +.fad.fa-face-nose-steam::after, .fa-duotone.fa-face-nose-steam::after { + content: "\e382\e382"; } + +.fad.fa-circle-waveform-lines::after, .fa-duotone.fa-circle-waveform-lines::after { + content: "\e12d\e12d"; } + +.fad.fa-waveform-circle::after, .fa-duotone.fa-waveform-circle::after { + content: "\e12d\e12d"; } + +.fad.fa-dollar-sign::after, .fa-duotone.fa-dollar-sign::after { + content: "\24\24"; } + +.fad.fa-dollar::after, .fa-duotone.fa-dollar::after { + content: "\24\24"; } + +.fad.fa-usd::after, .fa-duotone.fa-usd::after { + content: "\24\24"; } + +.fad.fa-ferris-wheel::after, .fa-duotone.fa-ferris-wheel::after { + content: "\e174\e174"; } + +.fad.fa-computer-speaker::after, .fa-duotone.fa-computer-speaker::after { + content: "\f8b2\f8b2"; } + +.fad.fa-skull-cow::after, .fa-duotone.fa-skull-cow::after { + content: "\f8de\f8de"; } + +.fad.fa-x::after, .fa-duotone.fa-x::after { + content: "\58\58"; } + +.fad.fa-magnifying-glass-dollar::after, .fa-duotone.fa-magnifying-glass-dollar::after { + content: "\f688\f688"; } + +.fad.fa-search-dollar::after, .fa-duotone.fa-search-dollar::after { + content: "\f688\f688"; } + +.fad.fa-users-gear::after, .fa-duotone.fa-users-gear::after { + content: "\f509\f509"; } + +.fad.fa-users-cog::after, .fa-duotone.fa-users-cog::after { + content: "\f509\f509"; } + +.fad.fa-person-military-pointing::after, .fa-duotone.fa-person-military-pointing::after { + content: "\e54a\e54a"; } + +.fad.fa-building-columns::after, .fa-duotone.fa-building-columns::after { + content: "\f19c\f19c"; } + +.fad.fa-bank::after, .fa-duotone.fa-bank::after { + content: "\f19c\f19c"; } + +.fad.fa-institution::after, .fa-duotone.fa-institution::after { + content: "\f19c\f19c"; } + +.fad.fa-museum::after, .fa-duotone.fa-museum::after { + content: "\f19c\f19c"; } + +.fad.fa-university::after, .fa-duotone.fa-university::after { + content: "\f19c\f19c"; } + +.fad.fa-circle-t::after, .fa-duotone.fa-circle-t::after { + content: "\e124\e124"; } + +.fad.fa-sack::after, .fa-duotone.fa-sack::after { + content: "\f81c\f81c"; } + +.fad.fa-grid-2::after, .fa-duotone.fa-grid-2::after { + content: "\e196\e196"; } + +.fad.fa-camera-cctv::after, .fa-duotone.fa-camera-cctv::after { + content: "\f8ac\f8ac"; } + +.fad.fa-cctv::after, .fa-duotone.fa-cctv::after { + content: "\f8ac\f8ac"; } + +.fad.fa-umbrella::after, .fa-duotone.fa-umbrella::after { + content: "\f0e9\f0e9"; } + +.fad.fa-trowel::after, .fa-duotone.fa-trowel::after { + content: "\e589\e589"; } + +.fad.fa-horizontal-rule::after, .fa-duotone.fa-horizontal-rule::after { + content: "\f86c\f86c"; } + +.fad.fa-bed-front::after, .fa-duotone.fa-bed-front::after { + content: "\f8f7\f8f7"; } + +.fad.fa-bed-alt::after, .fa-duotone.fa-bed-alt::after { + content: "\f8f7\f8f7"; } + +.fad.fa-d::after, .fa-duotone.fa-d::after { + content: "\44\44"; } + +.fad.fa-stapler::after, .fa-duotone.fa-stapler::after { + content: "\e5af\e5af"; } + +.fad.fa-masks-theater::after, .fa-duotone.fa-masks-theater::after { + content: "\f630\f630"; } + +.fad.fa-theater-masks::after, .fa-duotone.fa-theater-masks::after { + content: "\f630\f630"; } + +.fad.fa-kip-sign::after, .fa-duotone.fa-kip-sign::after { + content: "\e1c4\e1c4"; } + +.fad.fa-face-woozy::after, .fa-duotone.fa-face-woozy::after { + content: "\e3a2\e3a2"; } + +.fad.fa-cloud-question::after, .fa-duotone.fa-cloud-question::after { + content: "\e492\e492"; } + +.fad.fa-pineapple::after, .fa-duotone.fa-pineapple::after { + content: "\e31f\e31f"; } + +.fad.fa-hand-point-left::after, .fa-duotone.fa-hand-point-left::after { + content: "\f0a5\f0a5"; } + +.fad.fa-gallery-thumbnails::after, .fa-duotone.fa-gallery-thumbnails::after { + content: "\e3aa\e3aa"; } + +.fad.fa-circle-j::after, .fa-duotone.fa-circle-j::after { + content: "\e112\e112"; } + +.fad.fa-eyes::after, .fa-duotone.fa-eyes::after { + content: "\e367\e367"; } + +.fad.fa-handshake-simple::after, .fa-duotone.fa-handshake-simple::after { + content: "\f4c6\f4c6"; } + +.fad.fa-handshake-alt::after, .fa-duotone.fa-handshake-alt::after { + content: "\f4c6\f4c6"; } + +.fad.fa-page-caret-up::after, .fa-duotone.fa-page-caret-up::after { + content: "\e42a\e42a"; } + +.fad.fa-file-caret-up::after, .fa-duotone.fa-file-caret-up::after { + content: "\e42a\e42a"; } + +.fad.fa-jet-fighter::after, .fa-duotone.fa-jet-fighter::after { + content: "\f0fb\f0fb"; } + +.fad.fa-fighter-jet::after, .fa-duotone.fa-fighter-jet::after { + content: "\f0fb\f0fb"; } + +.fad.fa-comet::after, .fa-duotone.fa-comet::after { + content: "\e003\e003"; } + +.fad.fa-square-share-nodes::after, .fa-duotone.fa-square-share-nodes::after { + content: "\f1e1\f1e1"; } + +.fad.fa-share-alt-square::after, .fa-duotone.fa-share-alt-square::after { + content: "\f1e1\f1e1"; } + +.fad.fa-shield-keyhole::after, .fa-duotone.fa-shield-keyhole::after { + content: "\e248\e248"; } + +.fad.fa-barcode::after, .fa-duotone.fa-barcode::after { + content: "\f02a\f02a"; } + +.fad.fa-plus-minus::after, .fa-duotone.fa-plus-minus::after { + content: "\e43c\e43c"; } + +.fad.fa-square-sliders-vertical::after, .fa-duotone.fa-square-sliders-vertical::after { + content: "\f3f2\f3f2"; } + +.fad.fa-sliders-v-square::after, .fa-duotone.fa-sliders-v-square::after { + content: "\f3f2\f3f2"; } + +.fad.fa-video::after, .fa-duotone.fa-video::after { + content: "\f03d\f03d"; } + +.fad.fa-video-camera::after, .fa-duotone.fa-video-camera::after { + content: "\f03d\f03d"; } + +.fad.fa-message-middle::after, .fa-duotone.fa-message-middle::after { + content: "\e1e1\e1e1"; } + +.fad.fa-comment-middle-alt::after, .fa-duotone.fa-comment-middle-alt::after { + content: "\e1e1\e1e1"; } + +.fad.fa-graduation-cap::after, .fa-duotone.fa-graduation-cap::after { + content: "\f19d\f19d"; } + +.fad.fa-mortar-board::after, .fa-duotone.fa-mortar-board::after { + content: "\f19d\f19d"; } + +.fad.fa-hand-holding-medical::after, .fa-duotone.fa-hand-holding-medical::after { + content: "\e05c\e05c"; } + +.fad.fa-person-circle-check::after, .fa-duotone.fa-person-circle-check::after { + content: "\e53e\e53e"; } + +.fad.fa-square-z::after, .fa-duotone.fa-square-z::after { + content: "\e288\e288"; } + +.fad.fa-message-text::after, .fa-duotone.fa-message-text::after { + content: "\e1e6\e1e6"; } + +.fad.fa-comment-alt-text::after, .fa-duotone.fa-comment-alt-text::after { + content: "\e1e6\e1e6"; } + +.fad.fa-turn-up::after, .fa-duotone.fa-turn-up::after { + content: "\f3bf\f3bf"; } + +.fad.fa-level-up-alt::after, .fa-duotone.fa-level-up-alt::after { + content: "\f3bf\f3bf"; } + + +.fak.fa-cairo::before, .fa-kit.fa-cairo::before { content: "\e000"; } +.fak.fa-circom::before, .fa-kit.fa-circom::before { content: "\e001"; } +.fak.fa-lexon::before, .fa-kit.fa-lexon::before { content: "\e004"; } +.fak.fa-solidity-mono::before, .fa-kit.fa-solidity-mono::before { content: "\e005"; } +.fak.fa-ts-logo::before, .fa-kit.fa-ts-logo::before { content: "\e003"; } +.fak.fa-vyper2::before, .fa-kit.fa-vyper2::before { content: "\e002"; } + +.fak, .fa-kit { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: var(--fa-display, inline-block); + font-style: normal; + font-variant: normal; + text-rendering: auto; + line-height: 1; + font-family: "Font Awesome Kit"; +} + +@font-face { + font-family: "Font Awesome Kit"; + font-style: normal; + font-display: block; + src: url("../webfonts/custom-icons.woff2") format("woff2"), url("../webfonts/custom-icons.ttf") format("truetype"); +} diff --git a/apps/remix-ide/src/assets/fontawesome/webfonts/custom-icons.ttf b/apps/remix-ide/src/assets/fontawesome/webfonts/custom-icons.ttf new file mode 100644 index 0000000000..bc7dd4f06a Binary files /dev/null and b/apps/remix-ide/src/assets/fontawesome/webfonts/custom-icons.ttf differ diff --git a/apps/remix-ide/src/assets/fontawesome/webfonts/custom-icons.woff2 b/apps/remix-ide/src/assets/fontawesome/webfonts/custom-icons.woff2 new file mode 100644 index 0000000000..b3576de9a9 Binary files /dev/null and b/apps/remix-ide/src/assets/fontawesome/webfonts/custom-icons.woff2 differ diff --git a/apps/remix-ide/src/assets/fontawesome/webfonts/fa-brands-400.ttf b/apps/remix-ide/src/assets/fontawesome/webfonts/fa-brands-400.ttf new file mode 100644 index 0000000000..5ce65d5278 Binary files /dev/null and b/apps/remix-ide/src/assets/fontawesome/webfonts/fa-brands-400.ttf differ diff --git a/apps/remix-ide/src/assets/fontawesome/webfonts/fa-brands-400.woff2 b/apps/remix-ide/src/assets/fontawesome/webfonts/fa-brands-400.woff2 new file mode 100644 index 0000000000..76fbd53382 Binary files /dev/null and b/apps/remix-ide/src/assets/fontawesome/webfonts/fa-brands-400.woff2 differ diff --git a/apps/remix-ide/src/assets/fontawesome/webfonts/fa-duotone-900.ttf b/apps/remix-ide/src/assets/fontawesome/webfonts/fa-duotone-900.ttf new file mode 100644 index 0000000000..36b99b27b4 Binary files /dev/null and b/apps/remix-ide/src/assets/fontawesome/webfonts/fa-duotone-900.ttf differ diff --git a/apps/remix-ide/src/assets/fontawesome/webfonts/fa-duotone-900.woff2 b/apps/remix-ide/src/assets/fontawesome/webfonts/fa-duotone-900.woff2 new file mode 100644 index 0000000000..84ece201fa Binary files /dev/null and b/apps/remix-ide/src/assets/fontawesome/webfonts/fa-duotone-900.woff2 differ diff --git a/apps/remix-ide/src/assets/fontawesome/webfonts/fa-light-300.ttf b/apps/remix-ide/src/assets/fontawesome/webfonts/fa-light-300.ttf new file mode 100644 index 0000000000..d93f252942 Binary files /dev/null and b/apps/remix-ide/src/assets/fontawesome/webfonts/fa-light-300.ttf differ diff --git a/apps/remix-ide/src/assets/fontawesome/webfonts/fa-light-300.woff2 b/apps/remix-ide/src/assets/fontawesome/webfonts/fa-light-300.woff2 new file mode 100644 index 0000000000..1f5e395d13 Binary files /dev/null and b/apps/remix-ide/src/assets/fontawesome/webfonts/fa-light-300.woff2 differ diff --git a/apps/remix-ide/src/assets/fontawesome/webfonts/fa-regular-400.ttf b/apps/remix-ide/src/assets/fontawesome/webfonts/fa-regular-400.ttf new file mode 100644 index 0000000000..3f6ddf725f Binary files /dev/null and b/apps/remix-ide/src/assets/fontawesome/webfonts/fa-regular-400.ttf differ diff --git a/apps/remix-ide/src/assets/fontawesome/webfonts/fa-regular-400.woff2 b/apps/remix-ide/src/assets/fontawesome/webfonts/fa-regular-400.woff2 new file mode 100644 index 0000000000..377777b767 Binary files /dev/null and b/apps/remix-ide/src/assets/fontawesome/webfonts/fa-regular-400.woff2 differ diff --git a/apps/remix-ide/src/assets/fontawesome/webfonts/fa-solid-900.ttf b/apps/remix-ide/src/assets/fontawesome/webfonts/fa-solid-900.ttf new file mode 100644 index 0000000000..875b8337dc Binary files /dev/null and b/apps/remix-ide/src/assets/fontawesome/webfonts/fa-solid-900.ttf differ diff --git a/apps/remix-ide/src/assets/fontawesome/webfonts/fa-solid-900.woff2 b/apps/remix-ide/src/assets/fontawesome/webfonts/fa-solid-900.woff2 new file mode 100644 index 0000000000..0fdabda469 Binary files /dev/null and b/apps/remix-ide/src/assets/fontawesome/webfonts/fa-solid-900.woff2 differ diff --git a/apps/remix-ide/src/assets/list.json b/apps/remix-ide/src/assets/list.json new file mode 100644 index 0000000000..7c75a856e5 --- /dev/null +++ b/apps/remix-ide/src/assets/list.json @@ -0,0 +1,1177 @@ +{ + "builds": [ + { + "path": "soljson-v0.3.6+commit.3fc68da5.js", + "version": "0.3.6", + "build": "commit.3fc68da5", + "longVersion": "0.3.6+commit.3fc68da5", + "keccak256": "0x4a1c2a6a4896edefd3a4178a6c3ed8f1de625bd7c00dd7cc5781a9f36236e7db", + "sha256": "0xee7ba01680ed3a1c1cda236189a51c1e6ff99f6dca602a580e5b16441772b50b", + "urls": [ + "bzzr://83e99aa35ae67e71bf77040e5b4686aeb3558919f172b6c28213a4dcd8d79e91", + "dweb:/ipfs/Qme9brfZS3XhbiRbbNDKhBpgFknyD92omMmYa7XSf56bJP" + ] + }, + { + "path": "soljson-v0.4.0+commit.acd334c9.js", + "version": "0.4.0", + "build": "commit.acd334c9", + "longVersion": "0.4.0+commit.acd334c9", + "keccak256": "0x07994ad8c59c498bf44ca8e84914e27b79be964d98a9556226db377819d67387", + "sha256": "0xb83d2025e0bbc7f7f0dc9e47f5aa22eacb548b42c55add8f5f6822c105163500", + "urls": [ + "bzzr://414fc715062f91971c8e0d9fbdf470dd24a8a35f4f96df0ba79980cdb0ae7eaa", + "dweb:/ipfs/QmcBZ6Q2iHmrf9omvD7Jyy8kgrqyPmZFwvKWqvVDaxo1Ta" + ] + }, + { + "path": "soljson-v0.4.1+commit.4fc6fc2c.js", + "version": "0.4.1", + "build": "commit.4fc6fc2c", + "longVersion": "0.4.1+commit.4fc6fc2c", + "keccak256": "0x4c358c2e90447ad9e7c1816b5be8edde1172f67dedf16755a6c7373ede46b245", + "sha256": "0x9825565e1f199dbed6de01d27e10f83a9180300acab80f8469bf427e3cf92e96", + "urls": [ + "bzzr://6ecbe30c4c8530b82d55ed6bec12e63efbab1cb16868b020d65399a8793599a6", + "dweb:/ipfs/QmcEK5gvWNeHUtjsF3B6j5AXb9uNoG3aHbPrCMJDx7C8TM" + ] + }, + { + "path": "soljson-v0.4.2+commit.af6afb04.js", + "version": "0.4.2", + "build": "commit.af6afb04", + "longVersion": "0.4.2+commit.af6afb04", + "keccak256": "0xb67df5c37e8255e0de7918b6d3261f0f29e277d121bf5f414b66157a5b1070cd", + "sha256": "0x67f8a94b60278cfb80d505c47a1a5e67ec2caf20167ef85f2bdf2a80a692bd1b", + "urls": [ + "bzzr://7ba69a10a4585d0a36e5843603476061e8b02878331fa580d5c2509ef01ddaa6", + "dweb:/ipfs/QmVumPvgQVFLZvDvQddcDGcdxjbVWTTzxoQvJAECBBZ6Ju" + ] + }, + { + "path": "soljson-v0.4.3+commit.2353da71.js", + "version": "0.4.3", + "build": "commit.2353da71", + "longVersion": "0.4.3+commit.2353da71", + "keccak256": "0x62a65d0a951617f022524fc844ca11d90266f64e693343a2f41107183bf364c1", + "sha256": "0x66da311056ec26c9c3fb501350ee22187c30e79c41bf2713eeff7d84479948c5", + "urls": [ + "bzzr://ccf4f1e05d942946bcca929e9263c541b2749bf1faf6dc6c211b4bf700344d71", + "dweb:/ipfs/QmXf2cKYJ26tXAU6A6tmUk2dn4tuX3CWNaXJVnGLuoe15y" + ] + }, + { + "path": "soljson-v0.4.4+commit.4633f3de.js", + "version": "0.4.4", + "build": "commit.4633f3de", + "longVersion": "0.4.4+commit.4633f3de", + "keccak256": "0x06afcb6dc23efb1482545b63c5e3983dded0c383ecc46c3ae319f7b868201e47", + "sha256": "0x9e386edb2ee759ad65792f7d62c10ae7edf65c5b874a5451f1e695e586b69eea", + "urls": [ + "bzzr://e93e97b9989cd59673bb1fd64a0f940e8729c3c40b819593b8590480cba24bea", + "dweb:/ipfs/QmSJFaZhpXQ2EPF2koyiTNAiiuJRykv1Q8yubhkmBhvYyu" + ] + }, + { + "path": "soljson-v0.4.5+commit.b318366e.js", + "version": "0.4.5", + "build": "commit.b318366e", + "longVersion": "0.4.5+commit.b318366e", + "keccak256": "0xcdf7c4d4c6b9331b755170fa927692019c94088f87f100d2c3c920bcc3740d0b", + "sha256": "0x7184dae0b761485a5dce66b50075e17857c5b55fe3fa71fe22d4d5acc0839741", + "urls": [ + "bzzr://e21d2bd58112fb165fa2c253504bf49ceca661ac1009d270a31cb996560cfa34", + "dweb:/ipfs/QmYJuZgMbeMiotHAFNWEXdxjTa5yi7GaV4UkgBYABomFpj" + ] + }, + { + "path": "soljson-v0.4.6+commit.2dabbdf0.js", + "version": "0.4.6", + "build": "commit.2dabbdf0", + "longVersion": "0.4.6+commit.2dabbdf0", + "keccak256": "0x52ca702b8ed4b1e6d43d8a006b3d27f6dba611bac118c523711bfd209fb1cc9d", + "sha256": "0x8db9466df3b91c52e3412cebd13176ea9fe16d3239d000828a081c34ce899337", + "urls": [ + "bzzr://24dc5536a4771b2336fa304f3cd38d5203b6ab49c78a3057ec578991f3fcf265", + "dweb:/ipfs/QmZZ9hNntBxJw3G7LGW3e8nXtnGxLnaSMM44K4BbLrkELs" + ] + }, + { + "path": "soljson-v0.4.7+commit.822622cf.js", + "version": "0.4.7", + "build": "commit.822622cf", + "longVersion": "0.4.7+commit.822622cf", + "keccak256": "0xcd8a6a8b2626de75ef6ff73fb724f3ad5693a8902f86e88290f048b56182e7cc", + "sha256": "0xd28a58fbc3ce56ff650d4daf3a1d8092e25cadf2a5b2769fd333b321dfc6a22d", + "urls": [ + "bzzr://6a5d22e366c35f184d5203f3e062131018d8a4d09cf770a0720cfaf4d7b49705", + "dweb:/ipfs/QmfHjv4nYKuv3yFpWZqBYyiYEYmkQGydQmFT5b6mJkFpWp" + ] + }, + { + "path": "soljson-v0.4.8+commit.60cc1668.js", + "version": "0.4.8", + "build": "commit.60cc1668", + "longVersion": "0.4.8+commit.60cc1668", + "keccak256": "0x43c96fc79cf288cecda12b23a17f30b1cf0427a19dc7c1c094bb461eabefe0df", + "sha256": "0x9af176f42b63eaec838999a07e80484f92f41a0fc497adefa65baf88d8fbecaf", + "urls": [ + "bzzr://fc0e644a61e43592754b66f8d911c91312538debb89da29ffda3d3fd81ff70d9", + "dweb:/ipfs/Qmf7WYJJ8y6oHr4RQ7HC4tXgFPGvsnp3Qf6TrMBdK52Y5Z" + ] + }, + { + "path": "soljson-v0.4.9+commit.364da425.js", + "version": "0.4.9", + "build": "commit.364da425", + "longVersion": "0.4.9+commit.364da425", + "keccak256": "0xbe94ff397be2a951cbeb6c9c1a60ddf531d0ce76f45d51755386b6fa42cc2e2c", + "sha256": "0x6ff1683eb76dc58c31043fea474be6da8535ec625d1cd8331a3daead84fd5564", + "urls": [ + "bzzr://6e134aa89a00a18d930924fc2fad2aa434f80b6a71085ff2ab379e3672c812e7", + "dweb:/ipfs/QmeBWFbK1aAxnB6muXWStZJWndrFvMJt4xfAzEJD7AqaY3" + ] + }, + { + "path": "soljson-v0.4.10+commit.f0d539ae.js", + "version": "0.4.10", + "build": "commit.f0d539ae", + "longVersion": "0.4.10+commit.f0d539ae", + "keccak256": "0x178e51ad0c6a350ec4ed6fd07675dfd4d2581ee07b14b4954dd0b0f6d8633ca5", + "sha256": "0xd70ca2f656a88a9be7a3f7d602f03b30149b3bda0d1057cfa3a3c5e3d6e07453", + "urls": [ + "bzzr://6e43013ff973198d7fcc4a43910041f2f07d0099f4252737a2a2545443b11105", + "dweb:/ipfs/QmarthW41sfbrdkMmCK6jicXFZDGgvALzdgzygtUqEauae" + ] + }, + { + "path": "soljson-v0.4.11+commit.68ef5810.js", + "version": "0.4.11", + "build": "commit.68ef5810", + "longVersion": "0.4.11+commit.68ef5810", + "keccak256": "0xb8c3f5654b323cea016c0cc1a4584069714cdf796489efe2496a13f8f83a0e63", + "sha256": "0xdeb3c274f8b840d657e2f9b1dba602e89f58b1bf3fd7178c48c9033310a1f006", + "urls": [ + "bzzr://084452a20ae520bba965ba0b863f3d6de0516d1f92ddb512a138fb787d841c55", + "dweb:/ipfs/QmNUf8dTW9xANAvJmV1ho279AyWSCCvDp6bXet1QTcS2z5" + ] + }, + { + "path": "soljson-v0.4.12+commit.194ff033.js", + "version": "0.4.12", + "build": "commit.194ff033", + "longVersion": "0.4.12+commit.194ff033", + "keccak256": "0x598af6fec02a6783d6a438a6bb0f7d3012716d003f7bf6c9ac5a4d2bc911941b", + "sha256": "0xd522b307a014a32ed5815b05045c4396abc047e70c8a53c1e3ef92e14daa61c6", + "urls": [ + "bzzr://cef259b97217a7526819155f6dd513768be5f8718324ec3a63c315071e2f7c70", + "dweb:/ipfs/QmWGK9FbQiNWNeqysvCNCBw3q7cR1dzpnD1EKtNija2zyK" + ] + }, + { + "path": "soljson-v0.4.13+commit.0fb4cb1a.js", + "version": "0.4.13", + "build": "commit.0fb4cb1a", + "longVersion": "0.4.13+commit.0fb4cb1a", + "keccak256": "0x93f7046d6e0ea2492ec5229936821b3b020dbe9eb2e1193953389293d64a190b", + "sha256": "0x68ace74ca809ff47b09449d4054c77907d9412f14f6003d5475b60f4fec13709", + "urls": [ + "bzzr://8943b9e6d4ec52bda1b8fbd65509168ba3388651a30cb495d5280cfbf35614d7", + "dweb:/ipfs/Qmco9fGHM6mdaPVYqeDQ11GB3BrCbwRcEzM5XzHpAdAVWc" + ] + }, + { + "path": "soljson-v0.4.14+commit.c2215d46.js", + "version": "0.4.14", + "build": "commit.c2215d46", + "longVersion": "0.4.14+commit.c2215d46", + "keccak256": "0x7def3c264883cbe6ffbfc54894e48f9a0d2984ddbd1145eb898758d2a41d1559", + "sha256": "0x54f3dc64f2ff5a5350410f6157a537d96fb4aeec90476e90a951ddfbd1fe4bca", + "urls": [ + "bzzr://3428015c422bb223c3fe8c3a85615081981c47ead375564c16701b261948f0f1", + "dweb:/ipfs/QmXyyuEWhexuez2rzAeFjunpiAhncD1AfcXitGNHxpRWha" + ] + }, + { + "path": "soljson-v0.4.15+commit.bbb8e64f.js", + "version": "0.4.15", + "build": "commit.bbb8e64f", + "longVersion": "0.4.15+commit.bbb8e64f", + "keccak256": "0x9ffa9ee890ec483580c0b4ed72270b16e92eb0b7a8a97fb00c257f8809aa4023", + "sha256": "0x3e64525797e0b2d9abaeb022688cc02d63fc5820327e382fc6574a7de650dc97", + "urls": [ + "bzzr://395f2d903c162ddc9b6ebd76db450ca6cb9cf8bb276c3d705aa462ae560d23ab", + "dweb:/ipfs/QmW2rPbEtiVAbWJxtizzDqTjwpRpXCxkpSR696g9GxAYKT" + ] + }, + { + "path": "soljson-v0.4.16+commit.d7661dd9.js", + "version": "0.4.16", + "build": "commit.d7661dd9", + "longVersion": "0.4.16+commit.d7661dd9", + "keccak256": "0xf0a6c32af3eaa2f8c6d9e6c8b90f3bac5e775c7f1c90a61c1e72b593fbb1528d", + "sha256": "0x0e6d842e941cd8b76280c59f28f6d020af1afdea8e4be9d9da677ac5dbe860c6", + "urls": [ + "bzzr://f44b067fda20d169321fd3616f68633fd7a4277b6340f42f74203f33dad4a472", + "dweb:/ipfs/QmSwumWbYwYe4xLcqpi38VNtw7xCgbNaUkRhiZro9EnqLt" + ] + }, + { + "path": "soljson-v0.4.17+commit.bdeb9e52.js", + "version": "0.4.17", + "build": "commit.bdeb9e52", + "longVersion": "0.4.17+commit.bdeb9e52", + "keccak256": "0xeb8c3c474b5fa792f9b1b2ac6be945c32f835ccdc059deb562da4e99a031eab9", + "sha256": "0x7fe677e8214d0486fa7164f797862fae0a0fefb7b72cf6ad8e728faa54f12b60", + "urls": [ + "bzzr://37026d0ee2865c52fff8f6311b67b94f96dbb52ce8af3f84c3a9aeb47b12bf47", + "dweb:/ipfs/QmbgEAtdmSoxH4cfRJXj7mVpKv9rT5Cq2YmXmAnjgsyqBC" + ] + }, + { + "path": "soljson-v0.4.18+commit.9cf6e910.js", + "version": "0.4.18", + "build": "commit.9cf6e910", + "longVersion": "0.4.18+commit.9cf6e910", + "keccak256": "0xf824e695e8e66079b4b6063622c7dd80ed056d29969c8c3babac4fb572f3dfec", + "sha256": "0x5bb50839ba5116bf31669f3de8dad72eaec298ba32a643be7d0dc2d1392c54d6", + "urls": [ + "bzzr://d847bc8f5d43cd348346c5bb253269de36f00810c2e189ca64a4becdb9e9312f", + "dweb:/ipfs/Qmf5RrLbWeMykvWJbCyyThCLQ9YVmU8uWagMdSp9nNzZMc" + ] + }, + { + "path": "soljson-v0.4.19+commit.c4cbbb05.js", + "version": "0.4.19", + "build": "commit.c4cbbb05", + "longVersion": "0.4.19+commit.c4cbbb05", + "keccak256": "0xa60eadfddbfda0daebb8a1b883b89d33b800cff7ce7e12458170ea17cd5ede58", + "sha256": "0x8c2a69fbab9bdf503538028c697e09e51a7e699323ae7100c375cb35c415a819", + "urls": [ + "bzzr://87e29a7298d49b8b52ed01d6146b05aa41c11a85d1b805dd48181ac2ed5e9b22", + "dweb:/ipfs/QmSZEQEGuVJ7hudg8FzfDMXKVtn5AVGKaxbhSSDXwpX73K" + ] + }, + { + "path": "soljson-v0.4.20+commit.3155dd80.js", + "version": "0.4.20", + "build": "commit.3155dd80", + "longVersion": "0.4.20+commit.3155dd80", + "keccak256": "0x6c6dfa967526b7060634474ef730761711e5be662abf5ee02dc05985abfadec9", + "sha256": "0x9852ad94048600cc5a1458b4a7ab625996844c809b314422693bdc81d953fcc0", + "urls": [ + "bzzr://3edc1542fb719d3e08138b492a5db06333fb36055a434c3b071b2dcb69e54fbc", + "dweb:/ipfs/QmcsCpg6kfp7Vea4y9qPtfDXcaQJbDidb65n3t9f2MFDpR" + ] + }, + { + "path": "soljson-v0.4.21+commit.dfe3193c.js", + "version": "0.4.21", + "build": "commit.dfe3193c", + "longVersion": "0.4.21+commit.dfe3193c", + "keccak256": "0xd0f9a689670184ad874ca6a2cb40dfe57e9cf539d9330ca3f2501951478eace8", + "sha256": "0x4197bb1cb0ea7e637ed8a0e7810f1bfe32c90d0151d6f423bb3dfeef9f6777c4", + "urls": [ + "bzzr://1abbc4967f3c6c5124f8876abe521d508c71b0d0d64dc066c1e7a1bfe6ba596d", + "dweb:/ipfs/QmY7UN95hdfFSD1jwFANegze5eLX8PgP5BfWFH1usTB8Sw" + ] + }, + { + "path": "soljson-v0.4.22+commit.4cb486ee.js", + "version": "0.4.22", + "build": "commit.4cb486ee", + "longVersion": "0.4.22+commit.4cb486ee", + "keccak256": "0x50972c5b966188341d133aa58fbf895c54655d7bd733fb5ad58852e85f9f9444", + "sha256": "0x73458d16a3e34fc7b489d2399b3680cccfc968d01abc9f1b61e438b6fb0c24a1", + "urls": [ + "bzzr://9eab5a9c94bde3d90eb76a1189febd5ae4d6c7bbc63cc1d76e8871e14e6e9b89", + "dweb:/ipfs/QmPUJNa1LYaThwLQsw6fF5DMYyDfEg57gmD5wCsazkLS8c" + ] + }, + { + "path": "soljson-v0.4.23+commit.124ca40d.js", + "version": "0.4.23", + "build": "commit.124ca40d", + "longVersion": "0.4.23+commit.124ca40d", + "keccak256": "0x74f927b4f520d8d31863996a100ebc7827f919c77f777f6d4d416c6e613a03c7", + "sha256": "0x98c350cc41f873af84a78d1e24cbc8449045ee54923af0a39440e4d84600dc50", + "urls": [ + "bzzr://a052dbfe589a766af66d85d4d797829241e867e0ead93fbf3d5e492c71b6434f", + "dweb:/ipfs/QmZbo5YkSbcenWrUDjiCvUZdQe4UrNBw9vtx9nbgcMdRAs" + ] + }, + { + "path": "soljson-v0.4.24+commit.e67f0147.js", + "version": "0.4.24", + "build": "commit.e67f0147", + "longVersion": "0.4.24+commit.e67f0147", + "keccak256": "0x4cc2bb4c8894ad4349a88f330ba74d7ea643030d3f68037d1c94c370b6a25dd7", + "sha256": "0xf83e8f7014ad6b8bc801dc3684c644e372673ed678425c35aea5d4b4fe37e922", + "urls": [ + "bzzr://2aae73578e361285488b6319e8e7b27e23b2736eeee3953cd65f1207cd849395", + "dweb:/ipfs/QmauztXLDUdwJitA4Uc9MQYCTttUcivR5foTZYgwt4aAeC" + ] + }, + { + "path": "soljson-v0.4.25+commit.59dbf8f1.js", + "version": "0.4.25", + "build": "commit.59dbf8f1", + "longVersion": "0.4.25+commit.59dbf8f1", + "keccak256": "0x92b9c5de10bd908527e9cfba3f04bbe637163b4a5313c5a69179ccddd5fa6685", + "sha256": "0x782a999d3e1227c86854e7e29954ee856c6ae684124b9facf09f4f1724dc4e85", + "urls": [ + "bzzr://fb1e9b951ce8abe575f8514bff6baa01417a988a399fab1dd27a252e7812d1bc", + "dweb:/ipfs/QmUtwmzqqCftcubfyGwAefLBQ8ffp8EFhW7HCEQfhaviFs" + ] + }, + { + "path": "soljson-v0.4.26+commit.4563c3fc.js", + "version": "0.4.26", + "build": "commit.4563c3fc", + "longVersion": "0.4.26+commit.4563c3fc", + "keccak256": "0xc9c60203789ef778b9104ae7a39e9090b3d1256b24983d49e40e7d1e3c3ed65d", + "sha256": "0x264d0d25e31cb32f4369f82ba3ad0b6a84a8a1975b10bd738123ddf947618840", + "urls": [ + "bzzr://335a6b94d26623dcaa4590ccd6d7529db1e153b65af3bf7def45fffaf9ee256a", + "dweb:/ipfs/QmRd1uRbHRvpybQk5TQ11zyqmG4wQqHnefgvYdJ14V5D8x" + ] + }, + { + "path": "soljson-v0.5.0+commit.1d4f565a.js", + "version": "0.5.0", + "build": "commit.1d4f565a", + "longVersion": "0.5.0+commit.1d4f565a", + "keccak256": "0x2921f518cf5a0627d96e07e8c3d2b5482dbbf14d7dc6bbb055481c46d98903f3", + "sha256": "0xaf811843add541705ff65f0c20fd864bd0387116544524fa1830cf67a14af6c4", + "urls": [ + "bzzr://31231abb33dc43d0478f03a4c8b15b161b172097c884307cf6cf64aeb83a6dc9", + "dweb:/ipfs/QmYLhaeGbq3tFdCUC2pvtA8QdGnCbA8kn24z3C741k5TUE" + ] + }, + { + "path": "soljson-v0.5.1+commit.c8a2cb62.js", + "version": "0.5.1", + "build": "commit.c8a2cb62", + "longVersion": "0.5.1+commit.c8a2cb62", + "keccak256": "0x1980cf8a81c6bd2b371bf7d9145c819a7fb2d72e9aa462aaff0c10b4eccd595c", + "sha256": "0x69cb1300b5f72eb128604507991d9ada97180d31afde7c59aa3fa3ae9ad5200d", + "urls": [ + "bzzr://7f35988e2c32ed2f3f1885fb81ace357b1555964d23085940980cacd29023da6", + "dweb:/ipfs/QmPfxPYsYysRR8HFkWr47FMQ8ardmfmtrmdYc2ogT9Gfp9" + ] + }, + { + "path": "soljson-v0.5.2+commit.1df8f40c.js", + "version": "0.5.2", + "build": "commit.1df8f40c", + "longVersion": "0.5.2+commit.1df8f40c", + "keccak256": "0x3efd0585a3c00a1a2c62e590e22a69aa981d1b5148af2ebdbe1610dff93cea78", + "sha256": "0xaff4ca62ac0b03cb4b9c50f8250e2e7307b5c75fefc9847f269bd05c20367148", + "urls": [ + "bzzr://e30e085b875fc291e5ee46ed7c88c28ec8e8c540ad8c799b106c365a52df9e97", + "dweb:/ipfs/QmaZrQSg8njYzFXH2PzwxHDLKxkBhKmYmLm43DJWnurPeJ" + ] + }, + { + "path": "soljson-v0.5.3+commit.10d17f24.js", + "version": "0.5.3", + "build": "commit.10d17f24", + "longVersion": "0.5.3+commit.10d17f24", + "keccak256": "0x9b7a39606c3c27a8619b3eb493efca512cbd26c5ab7fc95489564239aab32a50", + "sha256": "0x24b4cbc28d68bde8455c14a46b55e4f292c3c295271e09991b2176a487cb4487", + "urls": [ + "bzzr://3bccb9b8cee48b99b39f2f1296f7353bcd39c1ae61b1e19e5add7cedd0256cb2", + "dweb:/ipfs/QmQmkd5FGiKKg8eRmo3L7Cn62nuV1M6GRDUGiq5bAx4AWx" + ] + }, + { + "path": "soljson-v0.5.4+commit.9549d8ff.js", + "version": "0.5.4", + "build": "commit.9549d8ff", + "longVersion": "0.5.4+commit.9549d8ff", + "keccak256": "0x4a6244b03de1968f0a48800e75640921d62b7602d0301093e1c5c318d1effb36", + "sha256": "0x91ed0cf4390f33174a4aaf49d1ce7cd9c72e28b95d2f9422314a29b2144b2042", + "urls": [ + "bzzr://a5ab50564d82e6d55b462f4f85284d3fac294c78f2699b680544bc7efde2fb16", + "dweb:/ipfs/QmRPchg1b5ofkLnLTPuunfSMKnxbXcZyzSR4NkyJAYUTrR" + ] + }, + { + "path": "soljson-v0.5.5+commit.47a71e8f.js", + "version": "0.5.5", + "build": "commit.47a71e8f", + "longVersion": "0.5.5+commit.47a71e8f", + "keccak256": "0xf46cb35b3aefb9b3d59a1fb4c151eb23a0f0a05387b379b3e7fbed1c01c861df", + "sha256": "0xaf812445476c101ae5ef92941c79eaebf57b39d455bdfb54a6a86b4ab6ca498c", + "urls": [ + "bzzr://2e72b599d5a700cbd03d9f7ca082464b4823dbaabfc5e1031075b9631c005d35", + "dweb:/ipfs/QmPYEmgLWDjk7kPGovojurz7fzdGv8Ti3H66nEzRzdiGwh" + ] + }, + { + "path": "soljson-v0.5.6+commit.b259423e.js", + "version": "0.5.6", + "build": "commit.b259423e", + "longVersion": "0.5.6+commit.b259423e", + "keccak256": "0x66669372d2d958bfeb5129a387dbc3882a96e260fc12e2910a7eb148b8ea5dd6", + "sha256": "0x9ffc04d0aee2c817ae6a897b1ba5aaca2bcd860416aaddfaa4de553fc1ad6e8e", + "urls": [ + "bzzr://5f5dbf4ebe3be5dbe3e917a2de3908b3a9ed24207a6406a6e434e6f041e993c4", + "dweb:/ipfs/QmYWL8Z3yXfCuhrprimdLhYFkjR74TjFHULxcABbUipetv" + ] + }, + { + "path": "soljson-v0.5.7+commit.6da8b019.js", + "version": "0.5.7", + "build": "commit.6da8b019", + "longVersion": "0.5.7+commit.6da8b019", + "keccak256": "0x27e324f75dd52eb180569e7a8865048253e5fcdaacc52e7c998ecaeb78dcdabd", + "sha256": "0xfd7c4e652d5891c84d93b28c90b8ac58c9253d2a3677935883a337ee96087b8f", + "urls": [ + "bzzr://764a91ca290bfa564d890f3c1a5a88067b04e96398f223576cbdd17bbc1faee2", + "dweb:/ipfs/QmdEr1zJrD2UYawZzeE6zPuYiYaSHdpLtKeHYixHgRp9ko" + ] + }, + { + "path": "soljson-v0.5.8+commit.23d335f2.js", + "version": "0.5.8", + "build": "commit.23d335f2", + "longVersion": "0.5.8+commit.23d335f2", + "keccak256": "0x05c00863784c63220704197d8446ac1e277fe53c42b5264093960b7bb70b9792", + "sha256": "0x25cfdd733e9c780ab85373268fde7bfa2e4b22093af57422ca3b586c7af7cd60", + "urls": [ + "bzzr://18fc5b15154aef1640559c31bbd91ae267def62a2b86e434564184b6d3d283ce", + "dweb:/ipfs/QmSUakgiWEffZ82RrN7hgLaemdqtLSCD7pfGAKxGhDUJxB" + ] + }, + { + "path": "soljson-v0.5.9+commit.e560f70d.js", + "version": "0.5.9", + "build": "commit.e560f70d", + "longVersion": "0.5.9+commit.e560f70d", + "keccak256": "0x7c967d9dc0fdca0db88a7cee22cf5886f65e8fa8b4a145eccd910fc81a1c949d", + "sha256": "0x7d40c6325c0aa4635babdb8913626b7c4bac6a4f41e1c383de5f398e1fc98e1b", + "urls": [ + "bzzr://c1f03890d82592751d779ea2da8a690e15b0ccc5667314bf634c1f16ff4ed322", + "dweb:/ipfs/QmZcHLPfa2Dz8M3justKYyDmDnaNo4pseTgAeQbtJNYywe" + ] + }, + { + "path": "soljson-v0.5.10+commit.5a6ea5b1.js", + "version": "0.5.10", + "build": "commit.5a6ea5b1", + "longVersion": "0.5.10+commit.5a6ea5b1", + "keccak256": "0x012ae146ebdd510b31c1e44a8d60071a66cdebc77f0e743a6ebc2fe68e67d297", + "sha256": "0x566601442deff058d393359df59ed72b41e1f6a65b0aa371fab7f903c189b59d", + "urls": [ + "bzzr://47c24a09321abb781b5dbc05fffae84ece6844e41a295847dd68ad69633f60a4", + "dweb:/ipfs/Qmej9jEnSsD2LqGnL4jgbUvHTxTwiFiHqeMpqyuPLaX1uw" + ] + }, + { + "path": "soljson-v0.5.11+commit.c082d0b4.js", + "version": "0.5.11", + "build": "commit.c082d0b4", + "longVersion": "0.5.11+commit.c082d0b4", + "keccak256": "0x4ba5500559a9ad03e4c1d3866ba9d915cdb5d7f2e326b4cb1fa0fe7bdf90dc27", + "sha256": "0x89978dcef86244b8e7af95298abe26aaf4825df819d6c556e4323dc152c988ad", + "urls": [ + "bzzr://c609e5725e607a4d853f33c8d46064e0ab11b489f7a585134cfca570e29f447a", + "dweb:/ipfs/QmdgDj3bPSKU1xKMY8FRHj8E6z9BQefeuaVuF27RpvZMXJ" + ] + }, + { + "path": "soljson-v0.5.12+commit.7709ece9.js", + "version": "0.5.12", + "build": "commit.7709ece9", + "longVersion": "0.5.12+commit.7709ece9", + "keccak256": "0xcda83fe69ce2a319d0caa20c98b53ff36ea1886054ab3dab23fa80ede3dcdea0", + "sha256": "0x1784f89fcfffccddaa94273a58e452682f61dea05d142406775f099c6ef5d61f", + "urls": [ + "bzzr://5eacd00f2f132ea8fbb308baed9753579ade721a44e94067debb602e193b7ae2", + "dweb:/ipfs/QmPA1Uf4iwkr2ouguzxxFepVxaRg36XFXxiwqYUuwafQzQ" + ] + }, + { + "path": "soljson-v0.5.13+commit.5b0b510c.js", + "version": "0.5.13", + "build": "commit.5b0b510c", + "longVersion": "0.5.13+commit.5b0b510c", + "keccak256": "0x432dd5d662d88c2316b4df503f693ae9e6e8ed4216726db2fdb3e7f628523fe5", + "sha256": "0x6e095eefc48dfc21fec18d0b63f229e929f881b5d6e8a999e1622c6b707a7f54", + "urls": [ + "bzzr://1b3ef14eabfe47ff614c088337dfdf163c695612c193aeab9ac5a2af69d30334", + "dweb:/ipfs/QmSgJ8Ru6vraz9CyCDPMifVxpckkoooVSBj9vYcQqG4wG4" + ] + }, + { + "path": "soljson-v0.5.14+commit.01f1aaa4.js", + "version": "0.5.14", + "build": "commit.01f1aaa4", + "longVersion": "0.5.14+commit.01f1aaa4", + "keccak256": "0x98e1027fbf3acb279f740c3b38df69d79ad3f2e6171414508d50604dc2dfc13e", + "sha256": "0x43b85bc9941814b018065da5c6c8d40e2af49264d0d1f06bdefbfbe628e65ff8", + "urls": [ + "bzzr://b6283a40a65b321a0e88f61594fc8bed00fb21a53c7ac1bf5ae421706a372d01", + "dweb:/ipfs/QmeXatGB9MdWA2NBLSNQbcKvuZpa4Sxem51vCrqyQGfXnU" + ] + }, + { + "path": "soljson-v0.5.15+commit.6a57276f.js", + "version": "0.5.15", + "build": "commit.6a57276f", + "longVersion": "0.5.15+commit.6a57276f", + "keccak256": "0x6f9251f86fd798a3ae25688307ffc7a9984dcf0d809a1aef54f5c68b6cf9fb6a", + "sha256": "0x0d34e4ed048bbf67daacdf36cd5ce0f553a32962967b52edab6afccaa071878b", + "urls": [ + "bzzr://e866e6bdb31fea0646b44a8e57acc9505932ffe813028ce1330ca49fe3edc4d0", + "dweb:/ipfs/Qmdx3AHUB8bN6ZZs1XsTV3Gz9FV3gAB7x7JbYeUsn43Azu" + ] + }, + { + "path": "soljson-v0.5.16+commit.9c3226ce.js", + "version": "0.5.16", + "build": "commit.9c3226ce", + "longVersion": "0.5.16+commit.9c3226ce", + "keccak256": "0x6abf17bdb1b934d072739e0e083ecfd579c523d200d45184b8d3987924ca0454", + "sha256": "0xa09c9cc2672678d461dc71100600bb58802db87be4de9424769241712ccbec03", + "urls": [ + "bzzr://9b51780766b138ee36e2796cee7bdd4cb494da5d925c36cc6101202818d37e42", + "dweb:/ipfs/QmQjodGav6KhMDjuoyJ1ag8osgKLBsFC1E9LmaGP7qCRZ2" + ] + }, + { + "path": "soljson-v0.5.17+commit.d19bba13.js", + "version": "0.5.17", + "build": "commit.d19bba13", + "longVersion": "0.5.17+commit.d19bba13", + "keccak256": "0x936e6bfbf4ea9ac32997adb893b0aeecd050cfef8b475f297dca1add0a1ff934", + "sha256": "0x7fd1d3f1fddc615e117f7fb7586acabd60c649c390cf110c8fdc5ce159fa5734", + "urls": [ + "bzzr://949bfec63a83091f5d08d6d8df36fa34e674d75206e8a6476cc0ae18f3c57bb4", + "dweb:/ipfs/QmNrRJwVHaJSZ3aAQZWZKjV9o8BqWKFP3RPYL6hKU65PAE" + ] + }, + { + "path": "soljson-v0.6.0+commit.26b70077.js", + "version": "0.6.0", + "build": "commit.26b70077", + "longVersion": "0.6.0+commit.26b70077", + "keccak256": "0xea559c55bf7046cb48378fe9b43eaab6e345700aa22d701fcf946a42ec6b1008", + "sha256": "0xf22c63511a85230f7640ff5a77433db643d8d32be8b7c7f1dc24c1301a5158e9", + "urls": [ + "bzzr://471b0435c47963835dd0f70d67ec069fab5daadbe6c8bf760d2e50adfb839461", + "dweb:/ipfs/QmTQPQb6br2VEzKTiXBEE6z69xRXEk24xi2R2gn8EsvGD9" + ] + }, + { + "path": "soljson-v0.6.1+commit.e6f7d5a4.js", + "version": "0.6.1", + "build": "commit.e6f7d5a4", + "longVersion": "0.6.1+commit.e6f7d5a4", + "keccak256": "0xb2657b5ce7a9b405a65e4a88845a51216cd7371e8f84861eef9cb0cb20d78081", + "sha256": "0x3628fdefd6971ea9cc16acbf91e5f6d6cfb2079181784b47e4d24f4c5d92e4e4", + "urls": [ + "bzzr://7bc2dc95d81092991a4122b45aad03f9cc62bc98fa455f03fc9286445ef9de8e", + "dweb:/ipfs/QmYWAkYAJo59kc5dHWaLuQqEm7xusESdu5meDzjpxnyXKt" + ] + }, + { + "path": "soljson-v0.6.2+commit.bacdbe57.js", + "version": "0.6.2", + "build": "commit.bacdbe57", + "longVersion": "0.6.2+commit.bacdbe57", + "keccak256": "0x7dc96455c864b49abc7dd5f38ba6a47904709ad132ea36babbfce98d42e962e6", + "sha256": "0x25f564cbecc5bfe95d6d358e0e7543c31ece0ab1332c555ff323ca163711bd2b", + "urls": [ + "bzzr://f61230aa01565c8c24aa2ed50eec7dfd26195be35f5bbe4445c6a3efceaa4b7d", + "dweb:/ipfs/QmaLUM18c7ecA911ig5u2HY6fAu4AiUbhJpnZwwCMc9cWi" + ] + }, + { + "path": "soljson-v0.6.3+commit.8dda9521.js", + "version": "0.6.3", + "build": "commit.8dda9521", + "longVersion": "0.6.3+commit.8dda9521", + "keccak256": "0x39ae8b2f3ba05ed7d4a7c16f0a9f4f5118180a209379cfc9bdd2d4fb5d015dff", + "sha256": "0xf89514dedd8cfb3c4d351580ff80b8444acde702f8be0e5fad710fe6e906c687", + "urls": [ + "bzzr://1d6deff5623d883b8d0b3a3a5539e4604925ce4c1677defb86e0e37838ea70c5", + "dweb:/ipfs/Qmd9JfFpUXsUQrJad1u2QDuMxBMeVrcG8mrpfJVV9jiBXB" + ] + }, + { + "path": "soljson-v0.6.4+commit.1dca32f3.js", + "version": "0.6.4", + "build": "commit.1dca32f3", + "longVersion": "0.6.4+commit.1dca32f3", + "keccak256": "0x435820544c2598d4ffbfb6f11003364c883a0766c8ac2a03215dd73022b34679", + "sha256": "0xa4fd5bb021259cdde001b03dac0e66353a3b066b47eb2476acb58b2610a224ca", + "urls": [ + "bzzr://62ef2a9bf7dbb8fd596b7c6ca6848d9b1a6c8562d10239659f0a56ee27c110ce", + "dweb:/ipfs/QmTxzbPN4HwcK5YX7n3PNkb1BzKFiRwStsmBfgC9VwrtFt" + ] + }, + { + "path": "soljson-v0.6.5+commit.f956cc89.js", + "version": "0.6.5", + "build": "commit.f956cc89", + "longVersion": "0.6.5+commit.f956cc89", + "keccak256": "0x6262768243c1ceaf91418e52dc6f52d2ce94d19c6e1065d54499b7bc4d6e14dc", + "sha256": "0xf8f83757e73f33f44389d1fa72d013fb266454a8dd9bb6897c7776f8fc3b0231", + "urls": [ + "bzzr://ed91c1114615572c10a34f0ab28a3a159d2d433fabbcec9eae7253c25ecac8b4", + "dweb:/ipfs/QmRUoBQeA5zpun1NK7BvBhQk6pTT4uZw7Jn2wZnWQETH9W" + ] + }, + { + "path": "soljson-v0.6.6+commit.6c089d02.js", + "version": "0.6.6", + "build": "commit.6c089d02", + "longVersion": "0.6.6+commit.6c089d02", + "keccak256": "0x3c9cfccc78bf352f4c7901d7af76757bd228f93af2634af4cd16b4916c13e44e", + "sha256": "0x09f6098026622c5c334c7798c3ad2b8f7c0ebc62f87846c7d5e7e725c3d1cbc2", + "urls": [ + "bzzr://ab23bd0e01952ee485f0426c9c4e47fcf6a508bc4919e83be31c0f9ea6e396ca", + "dweb:/ipfs/QmRj2pxXxvmJ96i57maVjLMfs4DUtCuptM8vSVvvDweJ74" + ] + }, + { + "path": "soljson-v0.6.7+commit.b8d736ae.js", + "version": "0.6.7", + "build": "commit.b8d736ae", + "longVersion": "0.6.7+commit.b8d736ae", + "keccak256": "0xb463b6a61fc027247655a32cbfd50bf543eafa3a6b42ceacdda7293e3ada8866", + "sha256": "0xb795f1b20f065a0aee492c24071fc1efa1633c3caab77cff20278a9ae822f04e", + "urls": [ + "bzzr://c82fea785ae31fb4847f5640e6305edc05d1a5b0b47552f60325c25cce280f75", + "dweb:/ipfs/QmShUrNZf1dZFjziorJYE8fMGNUSMFsbaR3ipSvsCMvExM" + ] + }, + { + "path": "soljson-v0.6.8+commit.0bbfe453.js", + "version": "0.6.8", + "build": "commit.0bbfe453", + "longVersion": "0.6.8+commit.0bbfe453", + "keccak256": "0x537cefc0579dd9631ec952cae951b3df0a50a3e557b5638107a67275f7aacc07", + "sha256": "0x3e8b01cbd194e40971b41017ada7c8b2fa941b0458cb701bdfb6a82257ca971b", + "urls": [ + "bzzr://130bff47eed9546c6a4d019c6281896186cf2368b766b16bc49b3d489b6cdb92", + "dweb:/ipfs/Qmdq9AfwdmKfEGP8u7H9E4VYrKLVinRZPZD1EWRnXSn1oe" + ] + }, + { + "path": "soljson-v0.6.9+commit.3e3065ac.js", + "version": "0.6.9", + "build": "commit.3e3065ac", + "longVersion": "0.6.9+commit.3e3065ac", + "keccak256": "0xa2d4d3ebe5d52bfa7ddf1a1fcd9bfed81eaa8678e6a1dd5a1c84954dd064422c", + "sha256": "0xf1724fd46b7a353561b3f8d473b0dc8c855b6d84b5af559d7e3326ac79b9d758", + "urls": [ + "bzzr://2c5fff6b816edb78adb2220f175591c9f4f6d38cfd27a83afb1849191cf9a524", + "dweb:/ipfs/Qmad6iesaR5FQ45RRtMrt2Fa1EYDuq1oGoMJJB6beMHESn" + ] + }, + { + "path": "soljson-v0.6.10+commit.00c0fcaf.js", + "version": "0.6.10", + "build": "commit.00c0fcaf", + "longVersion": "0.6.10+commit.00c0fcaf", + "keccak256": "0x620163da7ee7b2622c9ee48b06110a52739f633189555148a3b5ecf767e60cfb", + "sha256": "0xfa27ce9d23bddaa76a4aefbafa48e48affde9a1ee7c8a5e8784cf8d4c390f655", + "urls": [ + "bzzr://823b4efe3ca2964d660348214fd1a44579e13e1e8ce69a81f447372a11d60316", + "dweb:/ipfs/QmUinsRZvs2zFNG6FMWy7ngTYUnZccXq7MRtgpj1dPfxu4" + ] + }, + { + "path": "soljson-v0.6.11+commit.5ef660b1.js", + "version": "0.6.11", + "build": "commit.5ef660b1", + "longVersion": "0.6.11+commit.5ef660b1", + "keccak256": "0xf0abd02c495a0b4c5c9a7ff20de8b932e11fc3066d0b754422035ecd96fcdbbc", + "sha256": "0x9778e4a7667d5fd7632caf3ef3791d390a7cc217f94f96e919a31e3be332386a", + "urls": [ + "bzzr://9f9244a3605543a67f5ff35f21e3d6d3331a6e1361f09b271c37f396b5b89bd5", + "dweb:/ipfs/QmXyjgFNMyFD4fdf8wt9uvUU92MGdDVGmcPdMZhNEo1g8N" + ] + }, + { + "path": "soljson-v0.6.12+commit.27d51765.js", + "version": "0.6.12", + "build": "commit.27d51765", + "longVersion": "0.6.12+commit.27d51765", + "keccak256": "0xe1412d909a0dae79b13c0066b9bf08831c522daec00b273bbc19a799af213d6a", + "sha256": "0x3e1956c550ca48e289044c7c0bd892403081b4b5e17e77ce707c815ce6c4228f", + "urls": [ + "bzzr://b69ab6704a1e42fddb326e91f331e35fdf071b158e8754e2c887c0e607aee7b0", + "dweb:/ipfs/QmTs8PnAGr1ijXtWvMjoWraefAtVv2Y5ZnwkArz6NqJ93w" + ] + }, + { + "path": "soljson-v0.7.0+commit.9e61f92b.js", + "version": "0.7.0", + "build": "commit.9e61f92b", + "longVersion": "0.7.0+commit.9e61f92b", + "keccak256": "0x0c7a4386781683c327fde95363535f377941e14feffad5bb1134c7aa7eba726f", + "sha256": "0xe7e1be3d0a67469f6a37cd676a22314c4faa8a22ff9d5ebde11302db754453eb", + "urls": [ + "bzzr://65dc33e3d9ef94defff1b24e66f093d9d15a92c59778c8eb26e76fd8b64bd3da", + "dweb:/ipfs/QmQFhTptWdDzhemjGpa7Q65HKWGphs4nKKS13nzkcVE8pM" + ] + }, + { + "path": "soljson-v0.7.1+commit.f4a555be.js", + "version": "0.7.1", + "build": "commit.f4a555be", + "longVersion": "0.7.1+commit.f4a555be", + "keccak256": "0x3502cf7933fbce9f1fe1d87a83d5b9df12eee36c03997c3b9821493ce03fcf3e", + "sha256": "0x7fcc983c5149840a47b946fc51fc14f1c21cda07c01d650e4a1f814319cb1423", + "urls": [ + "bzzr://617dff84fd7dc06b476f93a95c015a561662d9ff1d3356ac6a3e5f5b09a636f0", + "dweb:/ipfs/Qmdw9c3usmqgdV2w4JoNWJqscHzscKNVWsWtos1engJa1o" + ] + }, + { + "path": "soljson-v0.7.2+commit.51b20bc0.js", + "version": "0.7.2", + "build": "commit.51b20bc0", + "longVersion": "0.7.2+commit.51b20bc0", + "keccak256": "0x0c80a0bf9e17700249a04a80d7729ccb012a55a82cb0f9e412fa32cc14b09c2b", + "sha256": "0xdfa3f2bb4589bdc9c054292173c82ee70e65af8d1971598f6e13b9b79ba94185", + "urls": [ + "bzzr://a45264806fb74fd38c19704070c83053972270b63bf7b09ddff3c3e15cd1baa0", + "dweb:/ipfs/QmTNWY4vkVLgtNdfGXyH6CY8URmzr33VzMJNN37z5dsAgu" + ] + }, + { + "path": "soljson-v0.7.3+commit.9bfce1f6.js", + "version": "0.7.3", + "build": "commit.9bfce1f6", + "longVersion": "0.7.3+commit.9bfce1f6", + "keccak256": "0xcf099e7057d6c3d5acac1f4e349798ad5a581b6cb7ffcebdf5b37b86eac4872d", + "sha256": "0xcaf4b1f3e01fcf946aad2d22bbe046b9dc4fd50049a05c3458ff239e2c93a785", + "urls": [ + "bzzr://2f8ec45d2d7298ab1fa49f3568ada6c6e030c7dd7f490a1505ed9d4713d86dc8", + "dweb:/ipfs/QmQMH2o7Nz3DaQ31hNYyHVAgejqTyZouvA35Zzzwe2UBPt" + ] + }, + { + "path": "soljson-v0.7.4+commit.3f05b770.js", + "version": "0.7.4", + "build": "commit.3f05b770", + "longVersion": "0.7.4+commit.3f05b770", + "keccak256": "0x300330ecd127756b824aa13e843cb1f43c473cb22eaf3750d5fb9c99279af8c3", + "sha256": "0x2b55ed5fec4d9625b6c7b3ab1abd2b7fb7dd2a9c68543bf0323db2c7e2d55af2", + "urls": [ + "bzzr://16c5f09109c793db99fe35f037c6092b061bd39260ee7a677c8a97f18c955ab1", + "dweb:/ipfs/QmTLs5MuLEWXQkths41HiACoXDiH8zxyqBHGFDRSzVE5CS" + ] + }, + { + "path": "soljson-v0.7.5+commit.eb77ed08.js", + "version": "0.7.5", + "build": "commit.eb77ed08", + "longVersion": "0.7.5+commit.eb77ed08", + "keccak256": "0xfe223dd264421f9b96c3dd3c835a3d0d4d9cfa4c61f75ca0761860c9ae8906ca", + "sha256": "0x2ee1c6434a32a40b137ac28be12ceeba64701bfad5e80239690803d9c139908e", + "urls": [ + "bzzr://d67cf500345ceca523e9bbe55dab9399e27321fd9005704a5b16bab82185260c", + "dweb:/ipfs/Qmf5fpJmeHdwgmSjQPqdu25XtA9akTotakkNmrh4axgo8N" + ] + }, + { + "path": "soljson-v0.7.6+commit.7338295f.js", + "version": "0.7.6", + "build": "commit.7338295f", + "longVersion": "0.7.6+commit.7338295f", + "keccak256": "0xc68517effed7163db0c7f4559931a4c5530fe6f2a8a20596361640d9d7eff655", + "sha256": "0xb94e69dfb056b3e26080f805ab43b668afbc0ac70bf124bfb7391ecfc0172ad2", + "urls": [ + "bzzr://523852f3e01b02ce947771e0279ffb6154d12700f809ba3606d908ba6271431c", + "dweb:/ipfs/QmWjG6PLzF5M6kxkHujhEMg5znQCgf2m1cM1UptKA719Hy" + ] + }, + { + "path": "soljson-v0.8.0+commit.c7dfd78e.js", + "version": "0.8.0", + "build": "commit.c7dfd78e", + "longVersion": "0.8.0+commit.c7dfd78e", + "keccak256": "0x08dd57a5cf5fd59accbd5b601909ffa22d28da756b5367c29b523ff17bbc2f99", + "sha256": "0xc596765f9b3dce486cf596ea35676f37124d54f3ada0fcbc02f094c392066a59", + "urls": [ + "bzzr://7047ade6879aab4c825594dab0914b8ec673bb907eecc6dfbd68f63086e5a36e", + "dweb:/ipfs/QmYh5C2rgDAx452f7HyHA8soLhnoL1GeeNNEWEuw9jKY8w" + ] + }, + { + "path": "soljson-v0.8.1+commit.df193b15.js", + "version": "0.8.1", + "build": "commit.df193b15", + "longVersion": "0.8.1+commit.df193b15", + "keccak256": "0x84a0e9282047512eeec499d55c83dbb6981430b08692d81d6c09730bb18e6cd8", + "sha256": "0xf77f141e5fed9594b28342e2c630ac6d48f2a724e4383a457881acd7fa62b1cf", + "urls": [ + "bzzr://da8c5ea3f2ecd33d3f83ac2c276871f4ee41370fb55ae62c6c29835c9376bdec", + "dweb:/ipfs/QmQ6W5VedQpZAwuGTtp1BhmNkvVheLnJq4xwN9Qmt9bAbH" + ] + }, + { + "path": "soljson-v0.8.2+commit.661d1103.js", + "version": "0.8.2", + "build": "commit.661d1103", + "longVersion": "0.8.2+commit.661d1103", + "keccak256": "0xd0c15275c5b0d03871332719def9b0f17e8860c7db60e0e71f18b971458a7391", + "sha256": "0x015e83fb0b72ccdafb0c217961b21a0321adb2d3f2ad992f5e79635c2086e6dd", + "urls": [ + "bzzr://629ae5ad84c45c248144b5eec7827a9cd5b2f2779ef84ab251c8cd876347a098", + "dweb:/ipfs/QmdfVfa2mhyosaJVeV7rbfnvQ95GTHPeRPzmvxcds7RYej" + ] + }, + { + "path": "soljson-v0.8.3+commit.8d00100c.js", + "version": "0.8.3", + "build": "commit.8d00100c", + "longVersion": "0.8.3+commit.8d00100c", + "keccak256": "0x51777116af58223a41aa3016d0bf733bbb0f78ad9ba4bcc36487eba175f65015", + "sha256": "0xb5cedfa8de5f9421fbdaccf9fd5038652c2632344b3b68e5278de81e9aeac210", + "urls": [ + "bzzr://c7d43da1bc5529d2cc311e00579c36dcff258c42b8ed240b6c4e97bd85492a64", + "dweb:/ipfs/QmWbNMzJryhiZmyifLDQteGPwN4aTgXQB6barBvXYVw975" + ] + }, + { + "path": "soljson-v0.8.4+commit.c7e474f2.js", + "version": "0.8.4", + "build": "commit.c7e474f2", + "longVersion": "0.8.4+commit.c7e474f2", + "keccak256": "0x7e0bca960d11fb095798ff65d029436f23358ac060b25a0938acfcb4652da2ec", + "sha256": "0x4a14c7bcaf0d988a829db2174b8f7731898aa8633216490603ad74bff64eca3c", + "urls": [ + "bzzr://7f33fe204160253c7ec23cb0ac83224bde3aca9f91a7a686cb67d99248c5fbb6", + "dweb:/ipfs/QmPYDf4qYtZLNEAicW7hcvpUJ69FoHiXmUypipDpTKo9hU" + ] + }, + { + "path": "soljson-v0.8.5+commit.a4f2e591.js", + "version": "0.8.5", + "build": "commit.a4f2e591", + "longVersion": "0.8.5+commit.a4f2e591", + "keccak256": "0x6d6d75b033717aae0a728e527005d8d2cc7dbd0a835c8873c630a2a9689a2976", + "sha256": "0x4af595f976235d33a22ffe223e9e3210b4ca510f6a93f153b3daed60f2b11fbc", + "urls": [ + "bzzr://d501ee8c460db75379b5716bcb5ae10e3e32625d6c9b08e319822a110f178906", + "dweb:/ipfs/QmNWkyirqXy3gDHNXpPuVUbExMGWjMqPR82Xzs64RzgQzy" + ] + }, + { + "path": "soljson-v0.8.6+commit.11564f7e.js", + "version": "0.8.6", + "build": "commit.11564f7e", + "longVersion": "0.8.6+commit.11564f7e", + "keccak256": "0x070e41c7f761ff1a8383a2c0d54c22aab0f115ca8c3790ecea27d6dde11611ca", + "sha256": "0x06a671efd8865a6ecc0ad648076177b35abcd06a7059888ea65111272e33a57f", + "urls": [ + "bzzr://e4f8176cdb3a0f3ba0b7061079dd9d3495f6a2288bd724780337cacd96515148", + "dweb:/ipfs/QmQre11ZPgWSx79Jzca1tkTYFyMbXz8H4kcrhfpWSj4qs8" + ] + }, + { + "path": "soljson-v0.8.7+commit.e28d00a7.js", + "version": "0.8.7", + "build": "commit.e28d00a7", + "longVersion": "0.8.7+commit.e28d00a7", + "keccak256": "0x8d6be9e58c33d265b5a8b1132a27fce126067419f3f4f15d3ef6b7147593b61d", + "sha256": "0x663ba99f7c7ee907f0f03227502d48a78256c3c292ace3b79a5d3eb510665306", + "urls": [ + "bzzr://0bdbad1bdcc3a9775f16f20a35556be4baa0e6c9a9b9d820e8e2cdea80667c6a", + "dweb:/ipfs/QmYv3Rsi9pL6PZAtc4XLHezPqti8yCRGEdDBqzEsQv57GV" + ] + }, + { + "path": "soljson-v0.8.8+commit.dddeac2f.js", + "version": "0.8.8", + "build": "commit.dddeac2f", + "longVersion": "0.8.8+commit.dddeac2f", + "keccak256": "0x56cb2f6978bf1213982ef217ee76b39dc97b6e66c92a7be7a1b44079c0236e5c", + "sha256": "0x534b7d4079d13bb4cd10b7559dc105c2adec625df4105f20ebce47e6da60bfda", + "urls": [ + "bzzr://7543aa16521848b06a1359afcb9dbd7be1dd09a36f4ca53edd3ed3a512a475e9", + "dweb:/ipfs/QmZaSrn3TPvPVoShtjSonQLFd3BV6RdgRMqw8GTzhnKYpm" + ] + }, + { + "path": "soljson-v0.8.9+commit.e5eed63a.js", + "version": "0.8.9", + "build": "commit.e5eed63a", + "longVersion": "0.8.9+commit.e5eed63a", + "keccak256": "0xbc470ab3442e78bb4d3f16c01c39b2f160f4f34eb4373efed11c234e1c7f6ca0", + "sha256": "0x5b25f987aae32a0275fdc6c1be36cc47cf126024a04dafd8e4be39a1d1d1422c", + "urls": [ + "bzzr://83bf64f11a09845a6eb732da08283a58f877e9227190f489c9852f790c81d0c4", + "dweb:/ipfs/QmfFq3MvisCSUJy8N8EVsBribgPbdpTZb7tQ2eHYw7dwag" + ] + }, + { + "path": "soljson-v0.8.10+commit.fc410830.js", + "version": "0.8.10", + "build": "commit.fc410830", + "longVersion": "0.8.10+commit.fc410830", + "keccak256": "0x3820aae0de50f10f62819d65f0b5a236ccffed11ab465a3295a5408fa47e24f5", + "sha256": "0x5eaee3240a06891abf5ac70c75caf9a0c33ebe9a2736abdaa22a337f86c22933", + "urls": [ + "bzzr://5124a21890d6b0ae70bfd031f741d7edc74cff70a26ca74750d446b15a8efb06", + "dweb:/ipfs/QmcsfYpEWbPXfVptzi1YvGokxi2FYCUzUr8rQYJCc5fEiB" + ] + }, + { + "path": "soljson-v0.8.11+commit.d7f03943.js", + "version": "0.8.11", + "build": "commit.d7f03943", + "longVersion": "0.8.11+commit.d7f03943", + "keccak256": "0x798b23086ce1339e3d47b3648a1f3ae40561e2c9f66ffcc98e71fc14a7f77584", + "sha256": "0x64117d4b13bfc5bc6e5f80823519b140e753a0c09e99edd756772dc3029bc1f8", + "urls": [ + "bzzr://0fd1c8db6338b2143ab0e49a33edaa133108ba77f1238408018b5b2a0ecdeb62", + "dweb:/ipfs/QmNQTFQmfnjxnDmbguVSnZ5DiHGFQHCsffccW5c2DMcSsT" + ] + }, + { + "path": "soljson-v0.8.12+commit.f00d7308.js", + "version": "0.8.12", + "build": "commit.f00d7308", + "longVersion": "0.8.12+commit.f00d7308", + "keccak256": "0xdd4ae95607655404b769fab5f949ac95c6a1a506330f512aef0d92974c390431", + "sha256": "0xc2c4738c96ad329cbb9baea615ed50ffb5a53d93fed8e00785e47242581d3c60", + "urls": [ + "bzzr://38f396377d5a5a60d0b9d8c4dc1343485517ff31bcd281d531f98534dc79d811", + "dweb:/ipfs/QmVdW2ygaT2vecoSUog3HUn8hZqXU4XXQZvuRSdpV6DJPL" + ] + }, + { + "path": "soljson-v0.8.13+commit.abaa5c0e.js", + "version": "0.8.13", + "build": "commit.abaa5c0e", + "longVersion": "0.8.13+commit.abaa5c0e", + "keccak256": "0x9afa714859d1c8f8ed2fded497b83a7a420474282494d25d4c9f592667729f21", + "sha256": "0x387343bcf8f2b77fe4cdcddcaa84361fabf8e1c3508f874fbbcbb9c313542f56", + "urls": [ + "bzzr://ade0fd040981c4e8c7adfe366296e452687c7bb6421de8546a0678be4add016a", + "dweb:/ipfs/Qma9V9dJwmkim98H6DQX4f7RH395vsUuqHCDxbKetcbj18" + ] + }, + { + "path": "soljson-v0.8.14+commit.80d49f37.js", + "version": "0.8.14", + "build": "commit.80d49f37", + "longVersion": "0.8.14+commit.80d49f37", + "keccak256": "0xb0f7f19a8590e5c0aaf779019c1deaafed170d8c26bec9bfd782d212e097619e", + "sha256": "0x7c3b3d0066fd381283b1d8d9a86153b2ddb5c01da14a1ae015c05cfa484e81b6", + "urls": [ + "bzzr://fa438d41ed52c9e0cca556efee61486fc77e60df06081921abb0a0f19b602d35", + "dweb:/ipfs/QmcM1TcDB4ta8ttNLWZ4d24M4Qs35rc91sQkdNmJMNbuvV" + ] + }, + { + "path": "soljson-v0.8.15+commit.e14f2714.js", + "version": "0.8.15", + "build": "commit.e14f2714", + "longVersion": "0.8.15+commit.e14f2714", + "keccak256": "0x4f6cdc0f25e734bcb977bb6a3e22fa41d8a82cbd5f220a2e4238c2d233526d1a", + "sha256": "0x71135e459d691767ce3453bab4564ef4a640dd50182da36517cbc1f96c1d4c7c", + "urls": [ + "bzzr://ac5baefba32f4779a03d1207d9f1ed69365280c702fd73002a729b7a3d52c425", + "dweb:/ipfs/QmPiBrYZxxpNZPQ98GNyL7Xa1F9Dq7uHtdt9ESwhPNkHhc" + ] + }, + { + "path": "soljson-v0.8.16+commit.07a7930e.js", + "version": "0.8.16", + "build": "commit.07a7930e", + "longVersion": "0.8.16+commit.07a7930e", + "keccak256": "0x331f4bc6de3d44d87b68629e83f711105325b482da7e9ca9bdbdd01371fee438", + "sha256": "0x27b2820ef93805a65c76b7945a49432582d306fd17a28985709a51e6403677c2", + "urls": [ + "bzzr://af0d70945c85865298732ac2bfdacdf2774fb4daf793c94fafe135b839a60a5c", + "dweb:/ipfs/QmWzBJ8gdccvRSSB5YsMKiF2qt3RFmAP2X25QEWqqQnR4y" + ] + }, + { + "path": "soljson-v0.8.17+commit.8df45f5f.js", + "version": "0.8.17", + "build": "commit.8df45f5f", + "longVersion": "0.8.17+commit.8df45f5f", + "keccak256": "0x3f2be218cf4545b4d2e380417c6da1e008fdc4255ab38c9ee12f64c0e3f55ea9", + "sha256": "0x617828e63be485c7cc2dbcbdd5a22b582b40fafaa41016ad595637b83c90656c", + "urls": [ + "bzzr://fe8da5b2531d31e4b67acdce09c81eccba1100550a7222722152ffdb16ea85ef", + "dweb:/ipfs/QmTedx1wBKSUaLatuqXYngjfKQLD2cGqPKjdLYCnbMYwiz" + ] + }, + { + "path": "soljson-v0.8.18+commit.87f61d96.js", + "version": "0.8.18", + "build": "commit.87f61d96", + "longVersion": "0.8.18+commit.87f61d96", + "keccak256": "0x9a8fa4183ef95496045189b80dfb39f745db89a903b398e40131f500953e5d57", + "sha256": "0xd82bdcba2c386d60b33aca148a9cfdf097551f68c5e45d8ec01aebbafacf5075", + "urls": [ + "bzzr://338117c2130fcb6bce3006330712b6e7ee99875b56ce4bb6182312f76e4a6bac", + "dweb:/ipfs/QmcKzrqRBy7PeFQxzJDs1AZZzNHKaKbJces6zUDysXZofJ" + ] + }, + { + "path": "soljson-v0.8.19+commit.7dd6d404.js", + "version": "0.8.19", + "build": "commit.7dd6d404", + "longVersion": "0.8.19+commit.7dd6d404", + "keccak256": "0x6be35b86f5656c06ae897ef311c28da375bdcbded68c4a81e124f2cb36adf830", + "sha256": "0xe0b74e0a16e783a35169f74d1a615ecb48d07c30f97346b83cd587949268681e", + "urls": [ + "bzzr://434c17a0cc3bf371e5b9baa7f804b37ffd2dc141a98c59b2ba6021fc419a39c0", + "dweb:/ipfs/QmPnhNtzrEBeWWQMXdAByQTDPoKXXV9NFXLk3YL4QbghMP" + ] + }, + { + "path": "soljson-v0.8.20+commit.a1b79de6.js", + "version": "0.8.20", + "build": "commit.a1b79de6", + "longVersion": "0.8.20+commit.a1b79de6", + "keccak256": "0x3a420fa9963772eee5b9221ebb8cf9548eea8f88b09537390960ea9b440f333c", + "sha256": "0x5c509f760dc110a695c8b39bbc21e08c17dee431aa14d606f59e623d7c3cc657", + "urls": [ + "bzzr://fdc05062e4c7ec85ed18ab17b6f04f3274a4b7caf0be483eb86007d708825fb0", + "dweb:/ipfs/QmciAxUX2kfuoxitmMdkKSfWn2SfxQdieLRa3S5S2munot" + ] + }, + { + "path": "soljson-v0.8.21+commit.d9974bed.js", + "version": "0.8.21", + "build": "commit.d9974bed", + "longVersion": "0.8.21+commit.d9974bed", + "keccak256": "0x370efd28e2d28b6d0ba55e20d8994f3d286c3772552ed63586b5fe157c0d3c57", + "sha256": "0x45bea352b41d04039e19439962ddef1d3e10cf2bc9526feba39f2cc79e3c5a17", + "urls": [ + "bzzr://5e66947c220c91a6cd39bc22965dcf861015b8613a6e09aa7fb7dc10f367b5d7", + "dweb:/ipfs/QmXLgy6oexvCBWYS5pTpJWohsDNGqgdNFLRKX7JrE3NxYt" + ] + }, + { + "path": "soljson-v0.8.22+commit.4fc1097e.js", + "version": "0.8.22", + "build": "commit.4fc1097e", + "longVersion": "0.8.22+commit.4fc1097e", + "keccak256": "0x907eeba6e6e0d6977ac5a8f50e4dd2762539ca827ceab1afb1f5a4f0f3ce3e0c", + "sha256": "0x92d283c545395b91a656fa1ec94d567a464bca55aebcdbb99debf42b43026845", + "urls": [ + "bzzr://63ec828814e2b57db2a7a146061a96cc39797ba39a0063a7b664421a48f21c00", + "dweb:/ipfs/Qma6o4e57YtWj8cQLQs12r2Enx9qmRA7VHtupCauXjYTAk" + ] + }, + { + "path": "soljson-v0.8.23+commit.f704f362.js", + "version": "0.8.23", + "build": "commit.f704f362", + "longVersion": "0.8.23+commit.f704f362", + "keccak256": "0x743aaafac24d9740a0b71215f55a132f89336a662487944767ca4bfd66400769", + "sha256": "0x9c681b165c8647867589c0a5ecdc8692637a935928a2b1bbea2ff4a1f4976985", + "urls": [ + "bzzr://6e70fe6bfe8c3fc63f8a3eba733731aab129e6e58828b78058e53bb50440709b", + "dweb:/ipfs/QmZy5ho8W943FMGwppXZFS1WFrVwV3UXhUUwcD7oH5vrYe" + ] + } + ], + "releases": { + "0.8.23": "soljson-v0.8.23+commit.f704f362.js", + "0.8.22": "soljson-v0.8.22+commit.4fc1097e.js", + "0.8.21": "soljson-v0.8.21+commit.d9974bed.js", + "0.8.20": "soljson-v0.8.20+commit.a1b79de6.js", + "0.8.19": "soljson-v0.8.19+commit.7dd6d404.js", + "0.8.18": "soljson-v0.8.18+commit.87f61d96.js", + "0.8.17": "soljson-v0.8.17+commit.8df45f5f.js", + "0.8.16": "soljson-v0.8.16+commit.07a7930e.js", + "0.8.15": "soljson-v0.8.15+commit.e14f2714.js", + "0.8.14": "soljson-v0.8.14+commit.80d49f37.js", + "0.8.13": "soljson-v0.8.13+commit.abaa5c0e.js", + "0.8.12": "soljson-v0.8.12+commit.f00d7308.js", + "0.8.11": "soljson-v0.8.11+commit.d7f03943.js", + "0.8.10": "soljson-v0.8.10+commit.fc410830.js", + "0.8.9": "soljson-v0.8.9+commit.e5eed63a.js", + "0.8.8": "soljson-v0.8.8+commit.dddeac2f.js", + "0.8.7": "soljson-v0.8.7+commit.e28d00a7.js", + "0.8.6": "soljson-v0.8.6+commit.11564f7e.js", + "0.8.5": "soljson-v0.8.5+commit.a4f2e591.js", + "0.8.4": "soljson-v0.8.4+commit.c7e474f2.js", + "0.8.3": "soljson-v0.8.3+commit.8d00100c.js", + "0.8.2": "soljson-v0.8.2+commit.661d1103.js", + "0.8.1": "soljson-v0.8.1+commit.df193b15.js", + "0.8.0": "soljson-v0.8.0+commit.c7dfd78e.js", + "0.7.6": "soljson-v0.7.6+commit.7338295f.js", + "0.7.5": "soljson-v0.7.5+commit.eb77ed08.js", + "0.7.4": "soljson-v0.7.4+commit.3f05b770.js", + "0.7.3": "soljson-v0.7.3+commit.9bfce1f6.js", + "0.7.2": "soljson-v0.7.2+commit.51b20bc0.js", + "0.7.1": "soljson-v0.7.1+commit.f4a555be.js", + "0.7.0": "soljson-v0.7.0+commit.9e61f92b.js", + "0.6.12": "soljson-v0.6.12+commit.27d51765.js", + "0.6.11": "soljson-v0.6.11+commit.5ef660b1.js", + "0.6.10": "soljson-v0.6.10+commit.00c0fcaf.js", + "0.6.9": "soljson-v0.6.9+commit.3e3065ac.js", + "0.6.8": "soljson-v0.6.8+commit.0bbfe453.js", + "0.6.7": "soljson-v0.6.7+commit.b8d736ae.js", + "0.6.6": "soljson-v0.6.6+commit.6c089d02.js", + "0.6.5": "soljson-v0.6.5+commit.f956cc89.js", + "0.6.4": "soljson-v0.6.4+commit.1dca32f3.js", + "0.6.3": "soljson-v0.6.3+commit.8dda9521.js", + "0.6.2": "soljson-v0.6.2+commit.bacdbe57.js", + "0.6.1": "soljson-v0.6.1+commit.e6f7d5a4.js", + "0.6.0": "soljson-v0.6.0+commit.26b70077.js", + "0.5.17": "soljson-v0.5.17+commit.d19bba13.js", + "0.5.16": "soljson-v0.5.16+commit.9c3226ce.js", + "0.5.15": "soljson-v0.5.15+commit.6a57276f.js", + "0.5.14": "soljson-v0.5.14+commit.01f1aaa4.js", + "0.5.13": "soljson-v0.5.13+commit.5b0b510c.js", + "0.5.12": "soljson-v0.5.12+commit.7709ece9.js", + "0.5.11": "soljson-v0.5.11+commit.c082d0b4.js", + "0.5.10": "soljson-v0.5.10+commit.5a6ea5b1.js", + "0.5.9": "soljson-v0.5.9+commit.e560f70d.js", + "0.5.8": "soljson-v0.5.8+commit.23d335f2.js", + "0.5.7": "soljson-v0.5.7+commit.6da8b019.js", + "0.5.6": "soljson-v0.5.6+commit.b259423e.js", + "0.5.5": "soljson-v0.5.5+commit.47a71e8f.js", + "0.5.4": "soljson-v0.5.4+commit.9549d8ff.js", + "0.5.3": "soljson-v0.5.3+commit.10d17f24.js", + "0.5.2": "soljson-v0.5.2+commit.1df8f40c.js", + "0.5.1": "soljson-v0.5.1+commit.c8a2cb62.js", + "0.5.0": "soljson-v0.5.0+commit.1d4f565a.js", + "0.4.26": "soljson-v0.4.26+commit.4563c3fc.js", + "0.4.25": "soljson-v0.4.25+commit.59dbf8f1.js", + "0.4.24": "soljson-v0.4.24+commit.e67f0147.js", + "0.4.23": "soljson-v0.4.23+commit.124ca40d.js", + "0.4.22": "soljson-v0.4.22+commit.4cb486ee.js", + "0.4.21": "soljson-v0.4.21+commit.dfe3193c.js", + "0.4.20": "soljson-v0.4.20+commit.3155dd80.js", + "0.4.19": "soljson-v0.4.19+commit.c4cbbb05.js", + "0.4.18": "soljson-v0.4.18+commit.9cf6e910.js", + "0.4.17": "soljson-v0.4.17+commit.bdeb9e52.js", + "0.4.16": "soljson-v0.4.16+commit.d7661dd9.js", + "0.4.15": "soljson-v0.4.15+commit.bbb8e64f.js", + "0.4.14": "soljson-v0.4.14+commit.c2215d46.js", + "0.4.13": "soljson-v0.4.13+commit.0fb4cb1a.js", + "0.4.12": "soljson-v0.4.12+commit.194ff033.js", + "0.4.11": "soljson-v0.4.11+commit.68ef5810.js", + "0.4.10": "soljson-v0.4.10+commit.f0d539ae.js", + "0.4.9": "soljson-v0.4.9+commit.364da425.js", + "0.4.8": "soljson-v0.4.8+commit.60cc1668.js", + "0.4.7": "soljson-v0.4.7+commit.822622cf.js", + "0.4.6": "soljson-v0.4.6+commit.2dabbdf0.js", + "0.4.5": "soljson-v0.4.5+commit.b318366e.js", + "0.4.4": "soljson-v0.4.4+commit.4633f3de.js", + "0.4.3": "soljson-v0.4.3+commit.2353da71.js", + "0.4.2": "soljson-v0.4.2+commit.af6afb04.js", + "0.4.1": "soljson-v0.4.1+commit.4fc6fc2c.js", + "0.4.0": "soljson-v0.4.0+commit.acd334c9.js", + "0.3.6": "soljson-v0.3.6+commit.3fc68da5.js" + }, + "latestRelease": "0.8.23" +} \ No newline at end of file diff --git a/apps/remix-ide/src/index.html b/apps/remix-ide/src/index.html index ee0f9f81a8..826b145f72 100644 --- a/apps/remix-ide/src/index.html +++ b/apps/remix-ide/src/index.html @@ -27,19 +27,16 @@ Remix - Ethereum IDE - - + + -
- diff --git a/apps/remix-ide/src/index.tsx b/apps/remix-ide/src/index.tsx index 75b6880c76..1ab6212ba3 100644 --- a/apps/remix-ide/src/index.tsx +++ b/apps/remix-ide/src/index.tsx @@ -1,12 +1,14 @@ // eslint-disable-next-line no-use-before-define import React from 'react' -import {render} from 'react-dom' import './index.css' import {ThemeModule} from './app/tabs/theme-module' import {Preload} from './app/components/preload' import Config from './config' -import Registry from './app/state/registry' +import {Registry} from '@remix-project/remix-lib' import {Storage} from '@remix-project/remix-lib' + +import { createRoot } from 'react-dom/client' + ;(async function () { try { const configStorage = new Storage('config-v0.8:') @@ -15,11 +17,10 @@ import {Storage} from '@remix-project/remix-lib' } catch (e) {} const theme = new ThemeModule() theme.initTheme() - - render( - - - , - document.getElementById('root') - ) + + const container = document.getElementById('root'); + const root = createRoot(container) + if (container) { + root.render(); + } })() diff --git a/apps/remix-ide/src/remixAppManager.js b/apps/remix-ide/src/remixAppManager.js index eaaf59cce6..51ebfbf418 100644 --- a/apps/remix-ide/src/remixAppManager.js +++ b/apps/remix-ide/src/remixAppManager.js @@ -2,10 +2,12 @@ import {PluginManager} from '@remixproject/engine' import {EventEmitter} from 'events' import {QueryParams} from '@remix-project/remix-lib' import {IframePlugin} from '@remixproject/engine-web' +import {Registry} from '@remix-project/remix-lib' + const _paq = (window._paq = window._paq || []) // requiredModule removes the plugin from the plugin manager list on UI -const requiredModules = [ // services + layout views + system views +let requiredModules = [ // services + layout views + system views 'manager', 'config', 'compilerArtefacts', @@ -80,6 +82,8 @@ const requiredModules = [ // services + layout views + system views 'doc-gen' ] + + // dependentModules shouldn't be manually activated (e.g hardhat is activated by remixd) const dependentModules = ['foundry', 'hardhat', 'truffle', 'slither'] @@ -144,6 +148,10 @@ export class RemixAppManager extends PluginManager { this.event = new EventEmitter() this.pluginsDirectory = 'https://raw.githubusercontent.com/ethereum/remix-plugins-directory/master/build/metadata.json' this.pluginLoader = new PluginLoader() + if (Registry.getInstance().get('platform').api.isDesktop()) { + requiredModules = [...requiredModules, 'fs', 'electronTemplates', 'isogit', 'remix-templates', 'electronconfig', 'xterm', 'compilerloader', 'ripgrep'] + } + } async canActivatePlugin(from, to) { @@ -269,7 +277,8 @@ export class RemixAppManager extends PluginManager { } } - return plugins.map((plugin) => { + return plugins.map(plugin => { + if (plugin.name === 'dgit' && Registry.getInstance().get('platform').api.isDesktop()) { plugin.url = 'https://dgit4-76cc9.web.app/' } // temporary fix if (plugin.name === testPluginName) plugin.url = testPluginUrl return new IframePlugin(plugin) }) @@ -320,6 +329,30 @@ export class RemixAppManager extends PluginManager { sticky: true, group: 7 }) + if (Registry.getInstance().get('platform').api.isDesktop()) { + await this.call('filePanel', 'registerContextMenuItem', { + id: 'fs', + name: 'revealInExplorer', + label: navigator.userAgentData.platform.indexOf('mac') > -1 ? 'Reveal in Finder' : 'Reveal in Explorer', + type: ['folder', 'file'], + extension: [], + path: [], + pattern: [], + sticky: true, + group: 8 + }) + await this.call('filePanel', 'registerContextMenuItem', { + id: 'fs', + name: 'openInVSCode', + label: 'Open in VSCode', + type: ['folder', 'file'], + extension: [], + path: [], + pattern: [], + sticky: true, + group: 8 + }) + } } } diff --git a/apps/remix-ide/src/remixEngine.js b/apps/remix-ide/src/remixEngine.js index cc277997c4..5c0657ce22 100644 --- a/apps/remix-ide/src/remixEngine.js +++ b/apps/remix-ide/src/remixEngine.js @@ -20,7 +20,10 @@ export class RemixEngine extends Engine { if (name === 'fetchAndCompile') return { queueTimeout: 60000 * 4 } if (name === 'walletconnect') return { queueTimeout: 60000 * 4 } if (name === 'udapp') return { queueTimeout: 60000 * 4 } + if (name === 'fs') return { queueTimeout: 60000 * 4 } + if (name === 'isogit') return { queueTimeout: 60000 * 4 } if (name === 'circuit-compiler') return { queueTimeout: 60000 * 4 } + if (name === 'compilerloader') return { queueTimeout: 60000 * 4 } if (name === 'filePanel') return { queueTimeout: 60000 * 20 } if (name === 'openaigpt') return { queueTimeout: 60000 * 2 } if (name === 'cookbookdev') return { queueTimeout: 60000 * 2 } diff --git a/apps/remix-ide/webpack.config.js b/apps/remix-ide/webpack.config.js index d326428341..48d2c4eda1 100644 --- a/apps/remix-ide/webpack.config.js +++ b/apps/remix-ide/webpack.config.js @@ -15,25 +15,27 @@ const versionData = { } const loadLocalSolJson = async () => { - // execute apps/remix-ide/ci/downloadsoljson.sh - const child = require('child_process').execSync('bash ./apps/remix-ide/ci/downloadsoljson.sh', {encoding: 'utf8', cwd: process.cwd(), shell: true}) + //execute apps/remix-ide/ci/downloadsoljson.sh + const child = require('child_process').execSync('bash ' + __dirname + '/ci/downloadsoljson.sh', { encoding: 'utf8', cwd: process.cwd(), shell: true }) // show output - console.log(child) + //console.log(child) } -fs.writeFileSync('./apps/remix-ide/src/assets/version.json', JSON.stringify(versionData)) +fs.writeFileSync(__dirname + '/src/assets/version.json', JSON.stringify(versionData)) + loadLocalSolJson() -const project = fs.readFileSync('./apps/remix-ide/project.json', 'utf8') +const project = fs.readFileSync(__dirname + '/project.json', 'utf8') const implicitDependencies = JSON.parse(project).implicitDependencies const copyPatterns = implicitDependencies.map((dep) => { try { fs.statSync(__dirname + `/../../dist/apps/${dep}`).isDirectory() - return {from: `../../dist/apps/${dep}`, to: `plugins/${dep}`} - } catch (e) { + return { from: __dirname + `/../../dist/apps/${dep}`, to: `plugins/${dep}` } + } + catch (e) { console.log('error', e) return false } @@ -75,8 +77,21 @@ module.exports = composePlugins(withNx(), withReact(), (config) => { solc: 'solc' } + // uncomment this to enable react profiling + /* + config.resolve.alias = { + ...config.resolve.alias, + 'react-dom$': 'react-dom/profiling', + } + */ + + // add public path - config.output.publicPath = '/' + if(process.env.NX_DESKTOP_FROM_DIST){ + config.output.publicPath = './' + }else{ + config.output.publicPath = '/' + } // set filename config.output.filename = `[name].${versionData.version}.${versionData.timestamp}.js` @@ -127,12 +142,17 @@ module.exports = composePlugins(withNx(), withReact(), (config) => { new CssMinimizerPlugin() ] + // minify code + if(process.env.NX_DESKTOP_FROM_DIST) + config.optimization.minimize = true + config.watchOptions = { ignored: /node_modules/ } - return config -}) + console.log('config', process.env.NX_DESKTOP_FROM_DIST) + return config; +}); class CopyFileAfterBuild { apply(compiler) { diff --git a/apps/remixdesktop/README.md b/apps/remixdesktop/README.md new file mode 100644 index 0000000000..692b5b3c4d --- /dev/null +++ b/apps/remixdesktop/README.md @@ -0,0 +1,22 @@ +# REMIX DESKTOP + +## Development + +In the main repo yarn, then run yarn serve +In this directory apps/remixdesktop, yarn, then run: yarn start:dev to boot the electron app +In chrome chrome://inspect/#devices you can add localhost:5858 to the network targets and then you will see an inspect button electron/js2c/browser_init +file:/// +You can use that to inspect the output of the electron app + +If you run into issues with yarn when native node modules are being rebuilt you need +- Windows: install Visual Studio Tools with Desktop Development C++ enabled in the Workloads +- MacOS: install Xcode or Xcode Command Line Tools +- Linux: unknown, probably a C++ compiler + +## Builds + +Builds can be found in the artefacts of CI. + +## CI + +CI will only run the builds is the branch is master or contains the word: desktop \ No newline at end of file diff --git a/apps/remixdesktop/assets/icon.icns b/apps/remixdesktop/assets/icon.icns new file mode 100644 index 0000000000..7cd9b0dafb Binary files /dev/null and b/apps/remixdesktop/assets/icon.icns differ diff --git a/apps/remixdesktop/assets/icon.png b/apps/remixdesktop/assets/icon.png new file mode 100644 index 0000000000..75103918e6 Binary files /dev/null and b/apps/remixdesktop/assets/icon.png differ diff --git a/apps/remixdesktop/package.json b/apps/remixdesktop/package.json new file mode 100644 index 0000000000..31734e09f6 --- /dev/null +++ b/apps/remixdesktop/package.json @@ -0,0 +1,120 @@ +{ + "name": "remixdesktop", + "version": "0.0.11-Alpha", + "main": "build/main.js", + "license": "MIT", + "type": "commonjs", + "description": "Remix IDE Desktop", + "repository": { + "type": "git", + "url": "git+https://github.com/bunsenstraat/remix-desktop.git" + }, + "author": { + "name": "Remix Team", + "email": "remix@ethereum.org" + }, + "bugs": { + "url": "https://github.com/ethereum/remix-project/issues" + }, + "homepage": "https://github.com/ethereum/remix-project#readme", + "appId": "org.ethereum.remixdesktop", + "mac": { + "category": "public.app-category.productivity" + }, + "scripts": { + "start:dev": "tsc && cp -R node_modules/yarn build/tools/ && cross-env NODE_ENV=development electron --inspect=5858 .", + "start:production": "tsc && && cp -R node_modules/yarn build/tools/ && cross-env NODE_ENV=production electron .", + "dist": "tsc && cp -R node_modules/yarn build/tools/ && electron-builder", + "installRipGrepMacOXx64": "rm -rf node_modules/@vscode/ripgrep/bin && npm_config_arch=x64 node node_modules/@vscode/ripgrep/lib/postinstall.js", + "installRipGrepMacOXarm64": "rm -rf node_modules/@vscode/ripgrep/bin && npm_config_arch=arm64 node node_modules/@vscode/ripgrep/lib/postinstall.js", + "postinstall": "electron-builder install-app-deps" + }, + "devDependencies": { + "@electron/rebuild": "^3.2.13", + "@types/byline": "^4.2.35", + "@types/express": "^4.17.21", + "cross-env": "^7.0.3", + "electron": "^25.0.1", + "electron-builder": "^23.6.0", + "electron-devtools-installer": "^3.2.0", + "typescript": "^5.1.3", + "yarn": "^1.22.21" + }, + "dependencies": { + "@remix-project/remix-url-resolver": "^0.0.65", + "@remixproject/engine": "0.3.41", + "@remixproject/engine-electron": "0.3.41", + "@remixproject/plugin": "0.3.41", + "@remixproject/plugin-api": "^0.3.38", + "@remixproject/plugin-electron": "0.3.41", + "@vscode/ripgrep": "^1.15.6", + "add": "^2.0.6", + "axios": "^1.6.1", + "byline": "^5.0.0", + "chokidar": "^3.5.3", + "express": "^4.18.2", + "isomorphic-git": "^1.24.2", + "node-pty": "^0.10.1", + "semver": "^7.5.4" + }, + "optionalDependencies": { + "@remix-project/remix-ws-templates": "^1.0.27" + }, + "build": { + "productName": "Remix IDE", + "appId": "org.ethereum.remix-ide", + "asar": true, + "generateUpdatesFilesForAllChannels": true, + "icon": "assets", + "files": [ + "build/**/*" + ], + "publish": [{ + "provider": "github", + "owner": "bunsenstraat", + "repo": "remix-desktop", + "releaseType": "draft", + "publishAutoUpdate": true + }], + "mac": { + "category": "public.app-category.productivity", + "target": [ + { + "target": "dmg", + "arch": [ + "x64", + "arm64" + ] + } + ], + "icon": "assets/icon.png", + "darkModeSupport": true + }, + "dmg": { + "writeUpdateInfo": false + }, + "nsis": { + "createDesktopShortcut": "always", + "allowToChangeInstallationDirectory": true, + "oneClick": false, + "shortcutName": "Remix IDE", + "differentialPackage": false + }, + "win": { + "target": [ + "nsis" + ], + "icon": "assets/icon.png" + }, + "linux": { + "target": [ + "deb" + ], + "category": "WebBrowser", + "icon": "assets" + }, + "directories": { + "output": "release" + } + } +} diff --git a/apps/remixdesktop/src/engine.ts b/apps/remixdesktop/src/engine.ts new file mode 100644 index 0000000000..004f2d13e1 --- /dev/null +++ b/apps/remixdesktop/src/engine.ts @@ -0,0 +1,71 @@ +import { Engine, PluginManager } from '@remixproject/engine'; +import { ipcMain } from 'electron'; +import { FSPlugin } from './plugins/fsPlugin'; +import { app } from 'electron'; +import { XtermPlugin } from './plugins/xtermPlugin'; +import git from 'isomorphic-git' +import { IsoGitPlugin } from './plugins/isoGitPlugin'; +import { ConfigPlugin } from './plugins/configPlugin'; +import { TemplatesPlugin } from './plugins/templates'; +import { RipgrepPlugin } from './plugins/ripgrepPlugin'; +import { CompilerLoaderPlugin } from './plugins/compilerLoader'; + +const engine = new Engine() +const appManager = new PluginManager() +const fsPlugin = new FSPlugin() +const xtermPlugin = new XtermPlugin() +const isoGitPlugin = new IsoGitPlugin() +const configPlugin = new ConfigPlugin() +const templatesPlugin = new TemplatesPlugin() +const ripgrepPlugin = new RipgrepPlugin() +const compilerLoaderPlugin = new CompilerLoaderPlugin() + +engine.register(appManager) +engine.register(fsPlugin) +engine.register(xtermPlugin) +engine.register(isoGitPlugin) +engine.register(configPlugin) +engine.register(templatesPlugin) +engine.register(ripgrepPlugin) +engine.register(compilerLoaderPlugin) + +appManager.activatePlugin('electronconfig') +appManager.activatePlugin('fs') + +ipcMain.handle('manager:activatePlugin', async (event, plugin) => { + return await appManager.call(plugin, 'createClient', event.sender.id) +}) + +ipcMain.on('fs:openFolder', async (event, path?) => { + fsPlugin.openFolder(event, path) +}) + + +ipcMain.on('terminal:new', async (event) => { + xtermPlugin.new(event) +}) + +ipcMain.on('template:open', async (event) => { + templatesPlugin.openTemplate(event) +}) + +ipcMain.on('git:startclone', async (event) => { + isoGitPlugin.startClone(event) +}) + +ipcMain.on('terminal:new', async (event) => { + console.log('new terminal') + xtermPlugin.new(event) +}) + + +ipcMain.handle('getWebContentsID', (event, message) => { + return event.sender.id +}) + + +app.on('before-quit', async (event) => { + await appManager.call('fs', 'removeCloseListener') + await appManager.call('fs', 'closeWatch') + await appManager.call('xterm', 'closeTerminals') +}) diff --git a/apps/remixdesktop/src/lib/databatcher.ts b/apps/remixdesktop/src/lib/databatcher.ts new file mode 100644 index 0000000000..6957505f6d --- /dev/null +++ b/apps/remixdesktop/src/lib/databatcher.ts @@ -0,0 +1,57 @@ +import {EventEmitter} from 'events'; +import { StringDecoder } from 'string_decoder'; +// Max duration to batch session data before sending it to the renderer process. +const BATCH_DURATION_MS = 16; + +// Max size of a session data batch. Note that this value can be exceeded by ~4k +// (chunk sizes seem to be 4k at the most) +const BATCH_MAX_SIZE = 200 * 1024; + +// Data coming from the pty is sent to the renderer process for further +// vt parsing and rendering. This class batches data to minimize the number of +// IPC calls. It also reduces GC pressure and CPU cost: each chunk is prefixed +// with the window ID which is then stripped on the renderer process and this +// overhead is reduced with batching. +export class DataBatcher extends EventEmitter { + uid: number; + decoder: StringDecoder; + data!: string; + timeout!: NodeJS.Timeout | null; + constructor(uid: number) { + super(); + this.uid = uid; + this.decoder = new StringDecoder('utf8'); + + this.reset(); + } + + reset() { + this.data = ''; + this.timeout = null; + } + + write(chunk: Buffer) { + if (this.data.length + chunk.length >= BATCH_MAX_SIZE) { + // We've reached the max batch size. Flush it and start another one + if (this.timeout) { + clearTimeout(this.timeout); + this.timeout = null; + } + this.flush(); + } + + this.data += this.decoder.write(chunk); + + if (!this.timeout) { + this.timeout = setTimeout(() => this.flush(), BATCH_DURATION_MS); + } + } + + flush() { + // Reset before emitting to allow for potential reentrancy + const data = this.data; + this.reset(); + + this.emit('flush', data, this.uid); + } +} \ No newline at end of file diff --git a/apps/remixdesktop/src/lib/index.ts b/apps/remixdesktop/src/lib/index.ts new file mode 100644 index 0000000000..98e0cb3105 --- /dev/null +++ b/apps/remixdesktop/src/lib/index.ts @@ -0,0 +1,49 @@ +export const ansiRegex = ({onlyFirst = false} = {}) => { + const pattern = [ + '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', + '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))' + ].join('|'); + + return new RegExp(pattern, onlyFirst ? undefined : 'g'); +} + +export const stripAnsi = (string: string) => { + const regex = ansiRegex(); + if (typeof string !== 'string') { + throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``); + } + return string.replace(regex, ''); +} + +export interface SearchInWorkspaceOptions { + pattern: string + path: string + /** + * Maximum number of results to return. Defaults to unlimited. + */ + maxResults?: number + /** + * Search case sensitively if true. + */ + matchCase?: boolean + /** + * Search whole words only if true. + */ + matchWholeWord?: boolean + /** + * Use regular expressions for search if true. + */ + useRegExp?: boolean + /** + * Include all .gitignored and hidden files. + */ + includeIgnored?: boolean + /** + * Glob pattern for matching files and directories to include the search. + */ + include?: string[] + /** + * Glob pattern for matching files and directories to exclude the search. + */ + exclude?: string[] +} \ No newline at end of file diff --git a/apps/remixdesktop/src/main.ts b/apps/remixdesktop/src/main.ts new file mode 100644 index 0000000000..1b75ec0216 --- /dev/null +++ b/apps/remixdesktop/src/main.ts @@ -0,0 +1,125 @@ +import { app, BrowserWindow, dialog, Menu, MenuItem, shell, utilityProcess } from 'electron'; +import path from 'path'; + + +export let isPackaged = false; +export const version = app.getVersion(); + +if ( + process.mainModule && + process.mainModule.filename.indexOf('app.asar') !== -1 +) { + isPackaged = true; +} else if (process.argv.filter(a => a.indexOf('app.asar') !== -1).length > 0) { + isPackaged = true; +} + +// get system home dir +const homeDir = app.getPath('userData') + +const windowSet = new Set([]); +export const createWindow = async (dir?: string): Promise => { + // Create the browser window. + const mainWindow = new BrowserWindow({ + height: 800, + width: 1024, + webPreferences: { + preload: path.join(__dirname, 'preload.js') + }, + }); + mainWindow.webContents.setWindowOpenHandler((details) => { + shell.openExternal(details.url); // Open URL in user's browser. + return { action: "deny" }; // Prevent the app from opening the URL. + }) + if (dir && dir.endsWith('/')) dir = dir.slice(0, -1) + const params = dir ? `?opendir=${encodeURIComponent(dir)}` : ''; + // and load the index.html of the app. + mainWindow.loadURL( + process.env.NODE_ENV === 'production' || isPackaged ? `file://${__dirname}/remix-ide/index.html` + params : + 'http://localhost:8080' + params) + + mainWindow.maximize(); + + if (dir) { + mainWindow.setTitle(dir) + } + + // on close + mainWindow.on('close', (event) => { + windowSet.delete(mainWindow) + }) + + windowSet.add(mainWindow) + //mainWindow.webContents.openDevTools(); +}; + +// This method will be called when Electron has finished +// initialization and is ready to create browser windows. +// Some APIs can only be used after this event occurs. +app.on('ready', async () => { + require('./engine') +}); + +// Quit when all windows are closed, except on macOS. There, it's common +// for applications and their menu bar to stay active until the user quits +// explicitly with Cmd + Q. +app.on('window-all-closed', () => { + if (process.platform !== 'darwin') { + app.quit(); + } +}); + +app.on('activate', () => { + // On OS X it's common to re-create a window in the app when the + // dock icon is clicked and there are no other windows open. + if (BrowserWindow.getAllWindows().length === 0) { + createWindow(); + } +}); + +const showAbout = () => { + + + void dialog.showMessageBox({ + title: `About Remix`, + message: `Remix`, + detail: `Remix`, + buttons: [], + }); +}; + +// In this file you can include the rest of your app's specific main process +// code. You can also put them in separate files and import them here. + +const isMac = process.platform === 'darwin' + +import FileMenu from './menus/file'; +import darwinMenu from './menus/darwin'; +import WindowMenu from './menus/window'; +import EditMenu from './menus/edit'; +import GitMenu from './menus/git'; +import ViewMenu from './menus/view'; +import TerminalMenu from './menus/terminal'; +import HelpMenu from './menus/help'; +import { execCommand } from './menus/commands'; + + +const commandKeys: Record = { + 'window:new': 'CmdOrCtrl+N', + 'folder:open': 'CmdOrCtrl+O', +}; + +const menu = [...(process.platform === 'darwin' ? [darwinMenu(commandKeys, execCommand, showAbout)] : []), + FileMenu(commandKeys, execCommand), + GitMenu(commandKeys, execCommand), + EditMenu(commandKeys, execCommand), + ViewMenu(commandKeys, execCommand), + TerminalMenu(commandKeys, execCommand), + WindowMenu(commandKeys, execCommand, []), + HelpMenu(commandKeys, execCommand), +] + +Menu.setApplicationMenu(Menu.buildFromTemplate(menu)) + + + diff --git a/apps/remixdesktop/src/menus/commands.ts b/apps/remixdesktop/src/menus/commands.ts new file mode 100644 index 0000000000..80c00766d6 --- /dev/null +++ b/apps/remixdesktop/src/menus/commands.ts @@ -0,0 +1,39 @@ +import {app, Menu, BrowserWindow, ipcMain} from 'electron'; +import { createWindow } from '../main'; + + +const commands: Record void> = { + 'window:new': () => { + // If window is created on the same tick, it will consume event too + setTimeout(createWindow, 0); + }, + 'folder:open': (focusedWindow) => { + if (focusedWindow) { + ipcMain.emit('fs:openFolder', focusedWindow.webContents.id); + } + }, + 'terminal:new': (focusedWindow) => { + if (focusedWindow) { + ipcMain.emit('terminal:new', focusedWindow.webContents.id); + } + }, + 'template:open': (focusedWindow) => { + if (focusedWindow) { + ipcMain.emit('template:open', focusedWindow.webContents.id); + } + }, + 'git:startclone': (focusedWindow) => { + if (focusedWindow) { + ipcMain.emit('git:startclone', focusedWindow.webContents.id); + } + } + +}; + + +export const execCommand = (command: string, focusedWindow?: BrowserWindow) => { + const fn = commands[command]; + if (fn) { + fn(focusedWindow); + } +}; diff --git a/apps/remixdesktop/src/menus/darwin.ts b/apps/remixdesktop/src/menus/darwin.ts new file mode 100644 index 0000000000..410691fbde --- /dev/null +++ b/apps/remixdesktop/src/menus/darwin.ts @@ -0,0 +1,28 @@ +// This menu label is overrided by OSX to be the appName +// The label is set to appName here so it matches actual behavior +import {app, BrowserWindow, MenuItemConstructorOptions} from 'electron'; + +export default ( + commandKeys: Record, + execCommand: (command: string, focusedWindow?: BrowserWindow) => void, + showAbout: () => void +): MenuItemConstructorOptions => { + return { + label: `${app.name}`, + submenu: [ + { + label: 'About Remix', + click() { + showAbout(); + } + }, + { + type: 'separator' + }, + { + role: 'quit', + label: 'Quit Remix' + } + ] + }; +}; diff --git a/apps/remixdesktop/src/menus/edit.ts b/apps/remixdesktop/src/menus/edit.ts new file mode 100644 index 0000000000..2288b49f8d --- /dev/null +++ b/apps/remixdesktop/src/menus/edit.ts @@ -0,0 +1,40 @@ +import { BrowserWindow, MenuItemConstructorOptions } from 'electron'; + +export default ( + commandKeys: Record, + execCommand: (command: string, focusedWindow?: BrowserWindow) => void +) => { + const submenu: MenuItemConstructorOptions[] = [ + { + role: 'copy', + command: 'editor:copy', + accelerator: commandKeys['editor:copy'], + registerAccelerator: true + } as any, + { + role: 'paste', + accelerator: commandKeys['editor:paste'], + registerAccelerator: true + }, + { + role: 'cut', + accelerator: commandKeys['editor:cut'], + registerAccelerator: true + }, + { + role: 'selectAll', + accelerator: commandKeys['editor:selectall'], + registerAccelerator: true + }, + { + role: 'undo', + accelerator: commandKeys['editor:undo'], + registerAccelerator: true + }, + ]; + + return { + label: 'Edit', + submenu + }; +}; diff --git a/apps/remixdesktop/src/menus/file.ts b/apps/remixdesktop/src/menus/file.ts new file mode 100644 index 0000000000..3693da348f --- /dev/null +++ b/apps/remixdesktop/src/menus/file.ts @@ -0,0 +1,72 @@ +import { BrowserWindow, MenuItemConstructorOptions, app, ipcMain } from 'electron'; +import fs from 'fs' +import os from 'os' +import path from 'path' +import { cacheDir } from '../utils/config'; + +let recentFolders: string[] = [] + +if (fs.existsSync(cacheDir + '/remixdesktop.json')) { + try { + // read the cache file + const cache = fs.readFileSync(cacheDir + '/remixdesktop.json') + const data = JSON.parse(cache.toString()) + recentFolders = data && data.recentFolders || [] + console.log('recentFolders', recentFolders) + } catch (e) { + + } +} + +export default ( + commandKeys: Record, + execCommand: (command: string, focusedWindow?: BrowserWindow) => void +): MenuItemConstructorOptions => { + const isMac = process.platform === 'darwin'; + + return { + label: 'File', + submenu: [ + { + label: 'New Window', + accelerator: commandKeys['window:new'], + click(item, focusedWindow) { + execCommand('window:new', focusedWindow); + } + }, + { + label: 'Open Folder in New Window', + accelerator: commandKeys['folder:open'], + click(item, focusedWindow) { + execCommand('folder:open', focusedWindow); + } + }, + { + label: 'Load Template in New Window', + click(item, focusedWindow) { + execCommand('template:open', focusedWindow); + } + }, + { + role: 'recentDocuments', + submenu: recentFolders.map((folder) => { + return { + label: folder, + click(item, focusedWindow) { + if(focusedWindow) { + ipcMain.emit('fs:openFolder', focusedWindow.webContents.id, folder); + } + } + } + }) + }, + { + role: 'close', + accelerator: commandKeys['window:close'] + }, + { + role: 'quit', + } + ] + }; +}; diff --git a/apps/remixdesktop/src/menus/git.ts b/apps/remixdesktop/src/menus/git.ts new file mode 100644 index 0000000000..a3b31f85b8 --- /dev/null +++ b/apps/remixdesktop/src/menus/git.ts @@ -0,0 +1,20 @@ +import {BrowserWindow, MenuItemConstructorOptions} from 'electron'; + +export default ( + commandKeys: Record, + execCommand: (command: string, focusedWindow?: BrowserWindow) => void +): MenuItemConstructorOptions => { + const isMac = process.platform === 'darwin'; + + return { + label: 'Git', + submenu: [ + { + label: 'Clone Repository in New Window', + click(item, focusedWindow) { + execCommand('git:startclone', focusedWindow); + } + } + ] + }; +}; diff --git a/apps/remixdesktop/src/menus/help.ts b/apps/remixdesktop/src/menus/help.ts new file mode 100644 index 0000000000..61727b0f9f --- /dev/null +++ b/apps/remixdesktop/src/menus/help.ts @@ -0,0 +1,25 @@ +import {BrowserWindow, MenuItemConstructorOptions, app} from 'electron'; +const { dialog } = require('electron') +export default ( + commandKeys: Record, + execCommand: (command: string, focusedWindow?: BrowserWindow) => void +): MenuItemConstructorOptions => { + const isMac = process.platform === 'darwin'; + + return { + label: 'Help', + submenu: [ + { + label: `About Remix Desktop version ${app.getVersion()}`, + click(item, focusedWindow) { + dialog.showMessageBox({ + title: `About Remix`, + message: `Version info`, + detail: `Remix Desktop version ${app.getVersion()}`, + buttons: [], + }); + } + } + ] + }; +}; diff --git a/apps/remixdesktop/src/menus/main.ts b/apps/remixdesktop/src/menus/main.ts new file mode 100644 index 0000000000..8fa154eea6 --- /dev/null +++ b/apps/remixdesktop/src/menus/main.ts @@ -0,0 +1,26 @@ +import {BrowserWindow, MenuItemConstructorOptions} from 'electron'; + +export default ( + commandKeys: Record, + execCommand: (command: string, focusedWindow?: BrowserWindow) => void +): MenuItemConstructorOptions => { + const isMac = process.platform === 'darwin'; + + return { + label: 'REMIX', + submenu: [ + { + label: 'Close', + accelerator: commandKeys['pane:close'], + click(item, focusedWindow) { + execCommand('pane:close', focusedWindow); + } + }, + { + label: isMac ? 'Close Window' : 'Quit', + role: 'close', + accelerator: commandKeys['window:close'] + } + ] + }; +}; diff --git a/apps/remixdesktop/src/menus/terminal.ts b/apps/remixdesktop/src/menus/terminal.ts new file mode 100644 index 0000000000..4059ae5bde --- /dev/null +++ b/apps/remixdesktop/src/menus/terminal.ts @@ -0,0 +1,20 @@ +import {BrowserWindow, MenuItemConstructorOptions} from 'electron'; + +export default ( + commandKeys: Record, + execCommand: (command: string, focusedWindow?: BrowserWindow) => void +): MenuItemConstructorOptions => { + const isMac = process.platform === 'darwin'; + + return { + label: 'Terminal', + submenu: [ + { + label: 'New Terminal', + click(item, focusedWindow) { + execCommand('terminal:new', focusedWindow); + } + } + ] + }; +}; diff --git a/apps/remixdesktop/src/menus/view.ts b/apps/remixdesktop/src/menus/view.ts new file mode 100644 index 0000000000..0a36d5367b --- /dev/null +++ b/apps/remixdesktop/src/menus/view.ts @@ -0,0 +1,90 @@ +import {BrowserWindow, MenuItemConstructorOptions} from 'electron'; + +export default ( + commandKeys: Record, + execCommand: (command: string, focusedWindow?: BrowserWindow) => void +): MenuItemConstructorOptions => { + const isMac = process.platform === 'darwin'; + + return { + label: 'View', + submenu: [ + { + label: 'Toggle Developer Tools', + accelerator: (function() { + if (process.platform === 'darwin') + return 'Alt+Command+I'; + else + return 'Ctrl+Shift+I'; + })(), + click: function(item, focusedWindow) { + if (focusedWindow) + focusedWindow.webContents.toggleDevTools(); + } + }, + { + label: 'Reload', + accelerator: 'CmdOrCtrl+R', + click: function(item, focusedWindow) { + if (focusedWindow) + focusedWindow.reload(); + } + }, + { + label: 'Toggle Full Screen', + accelerator: (function() { + if (process.platform === 'darwin') + + return 'Ctrl+Command+F'; + else + return 'F11'; + })(), + click: function(item, focusedWindow) { + if (focusedWindow) + focusedWindow.setFullScreen(!focusedWindow.isFullScreen()); + } + }, + { + label: 'Zoom In', + accelerator: 'CmdOrCtrl+=', + click: function(item, focusedWindow) { + if (focusedWindow){ + let factor = focusedWindow.webContents.getZoomFactor() + if (factor < 4) { + factor = factor + 0.25 + focusedWindow.webContents.setZoomFactor(factor) + } + } + } + }, + { + label: 'Zoom Out', + accelerator: 'CmdOrCtrl+-', + click: function(item, focusedWindow) { + if (focusedWindow){ + let factor = focusedWindow.webContents.getZoomFactor() + console.log(factor) + if (factor > 1.25) { + factor = factor - 0.25 + focusedWindow.webContents.setZoomFactor(factor) + }else{ + focusedWindow.webContents.setZoomFactor(1) + } + + } + } + }, + { + label: 'Reset Zoom', + accelerator: 'CmdOrCtrl+0', + click: function(item, focusedWindow) { + if (focusedWindow) + { + focusedWindow.webContents.setZoomFactor(1) + } + } + }, + + ] + }; +}; diff --git a/apps/remixdesktop/src/menus/window.ts b/apps/remixdesktop/src/menus/window.ts new file mode 100644 index 0000000000..30e2ef8125 --- /dev/null +++ b/apps/remixdesktop/src/menus/window.ts @@ -0,0 +1,63 @@ +import { BrowserWindow, MenuItemConstructorOptions } from 'electron'; + +export default ( + commandKeys: Record, + execCommand: (command: string, focusedWindow?: BrowserWindow) => void, + openedWindows: BrowserWindow[] +): MenuItemConstructorOptions => { + + const submenu: MenuItemConstructorOptions[] = [ + { + role: 'minimize', + accelerator: commandKeys['window:minimize'] + }, + { + type: 'separator' + }, + { + // It's the same thing as clicking the green traffc-light on macOS + role: 'zoom', + accelerator: commandKeys['window:zoom'] + }, + { + type: 'separator' + }, + { + type: 'separator' + }, + { + role: 'front' + }, + { + label: 'Toggle Always on Top', + click: (item, focusedWindow) => { + execCommand('window:toggleKeepOnTop', focusedWindow); + } + }, + { + role: 'togglefullscreen', + accelerator: commandKeys['window:toggleFullScreen'] + }, + { + type: 'separator' + }, + ] + + if(openedWindows.length > 1) { + submenu.push({ + label: 'Close', + accelerator: commandKeys['pane:close'], + click(item, focusedWindow) { + execCommand('pane:close', focusedWindow); + } + }) + } + + + + return { + role: 'window', + id: 'window', + submenu + } +}; diff --git a/apps/remixdesktop/src/plugins/compilerLoader.ts b/apps/remixdesktop/src/plugins/compilerLoader.ts new file mode 100644 index 0000000000..e44653135c --- /dev/null +++ b/apps/remixdesktop/src/plugins/compilerLoader.ts @@ -0,0 +1,193 @@ +import {Profile} from '@remixproject/plugin-utils' +import {ElectronBasePlugin, ElectronBasePluginClient} from '@remixproject/plugin-electron' +import fs from 'fs/promises' +import axios from 'axios' + +import express from 'express' +import {cacheDir} from '../utils/config' + +export const baseURLBin = 'https://binaries.soliditylang.org/bin' +export const baseURLWasm = 'https://binaries.soliditylang.org/wasm' + +const appExpress = express() + +console.log('cacheDir', cacheDir) +appExpress.use(express.static(cacheDir)) +const server = appExpress.listen(0, () => { + console.log('Listening on port:', server.address() as any) +}) + +const profile: Profile = { + displayName: 'compilerLoader', + name: 'compilerloader', + description: 'Compiler Loader', +} + +export class CompilerLoaderPlugin extends ElectronBasePlugin { + clients: CompilerLoaderPluginClient[] = [] + constructor() { + super(profile, clientProfile, CompilerLoaderPluginClient) + this.methods = [...super.methods] + ;(async () => { + await getLists() + })() + } + + +} + +const clientProfile: Profile = { + name: 'compilerloader', + displayName: 'compilerloader', + description: 'Compiler Loader', + methods: ['downloadCompiler', 'listCompilers', 'getBaseUrls', 'getJsonBinData'], +} + +export interface iSolJsonBinDataBuild { + path: string + version: string + build: string + longVersion: string + wasmURL: string + binURL: string + isDownloaded: boolean +} +export interface iSolJsonBinData { + baseURLWasm: string + baseURLBin: string + wasmList: iSolJsonBinDataBuild[] + binList: iSolJsonBinDataBuild[] +} + +class CompilerLoaderPluginClient extends ElectronBasePluginClient { + solJsonBinData: iSolJsonBinData + constructor(webContentsId: number, profile: Profile) { + super(webContentsId, profile) + } + + async onActivation(): Promise { + console.log('onActivation', 'CompilerLoaderPluginClient') + this.onload(() => { + console.log('onload', 'CompilerLoaderPluginClient') + this.emit('loaded') + }) + } + + async downloadCompiler(url: string): Promise { + console.log('downloadCompiler', url) + if(url.includes('localhost')) return + const plugin = this + try { + const fileName = url.split('/').pop() + if (fileName) { + const filePath = cacheDir + '/compilers/' + fileName + try { + if (await fs.stat(filePath)) { + return + } + } catch (e) { + // do nothing + } + } + this.emit('downloadStarted', url) + this.call('terminal' as any, 'logHtml', 'Downloading compiler from ' + url) + const res = await axios.get(url, { + responseType: 'arraybuffer', + onDownloadProgress(progressEvent) { + if (progressEvent.total) { + const percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total) + plugin.call('terminal' as any, 'logHtml', 'percent loaded: ' + percentCompleted) + } else { + plugin.call('terminal' as any, 'logHtml', 'bytes loaded: ' + progressEvent.loaded) + } + }, + }) + const buffer = await res.data + const file = Buffer.from(buffer) + + if (fileName) { + const filePath = cacheDir + '/compilers/' + fileName + await fs.writeFile(filePath, file) + console.log('downloaded', filePath) + plugin.call('terminal' as any, 'logHtml', 'Compiler downloaded from ' + url + ' to ' + fileName) + await plugin.getJsonBinData() + //this.emit('downloadFinished', fileName, url) + } + } catch (e: any) { + plugin.call('terminal' as any, 'log', { + type: 'error', + value: `Failed to download ${url}: ${e.message}`, + }) + } + } + + async listCompilers(): Promise { + const compilersDir = cacheDir + '/compilers/' + const compilers = await fs.readdir(compilersDir) + return compilers + } + + async getJsonBinData() { + const lists = await this.getLists() + + this.solJsonBinData = { + baseURLWasm: 'http://localhost:' + (server.address() as any).port + '/compilers', + baseURLBin: 'http://localhost:' + (server.address() as any).port + '/compilers', + wasmList: lists.wasmData || [], + binList: lists.binData || [], + } + + const localCompilers = await this.listCompilers() + this.solJsonBinData.wasmList && (this.solJsonBinData.wasmList = this.solJsonBinData.wasmList.map((item) => { + localCompilers.includes(item.path) ? (item.wasmURL = 'http://localhost:' + (server.address() as any).port + '/compilers/') && (item.isDownloaded=true) : (item.wasmURL = baseURLWasm) && (item.isDownloaded = false) + return item + })) + this.solJsonBinData.binList && (this.solJsonBinData.binList = this.solJsonBinData.binList.map((item) => { + localCompilers.includes(item.path) ? (item.binURL = 'http://localhost:' + (server.address() as any).port + '/compilers/') && (item.isDownloaded=true) : (item.binURL = baseURLBin) && (item.isDownloaded = false) + return item + })) + this.emit('jsonBinDataLoaded', this.solJsonBinData) + } + + async getLists() { + return await getLists() + } +} + +const getLists = async () => { + let binData + let wasmData + + try { + const binRes = await axios.get(baseURLBin + '/list.json') + await fs.writeFile(cacheDir + '/binlist.json', JSON.stringify(binRes.data, null, 2)) + binData = binRes.data + } catch (e) {} + + try { + const wasmRes = await axios.get(baseURLWasm + '/list.json') + await fs.writeFile(cacheDir + '/wasmlist.json', JSON.stringify(wasmRes.data, null, 2)) + wasmData = wasmRes.data + } catch (e) {} + + if (!wasmData) { + try { + wasmData = JSON.parse(await fs.readFile(cacheDir + '/wasmlist.json', 'utf8')) + } catch (e) { + wasmData = {} + } + } + + if (!binData) { + try { + binData = JSON.parse(await fs.readFile(cacheDir + '/binlist.json', 'utf8')) + } catch (e) { + binData = {} + } + } + + return { + binData: binData.builds as any[], + wasmData: wasmData.builds as any[], + } +} diff --git a/apps/remixdesktop/src/plugins/configPlugin.ts b/apps/remixdesktop/src/plugins/configPlugin.ts new file mode 100644 index 0000000000..15a8646c5f --- /dev/null +++ b/apps/remixdesktop/src/plugins/configPlugin.ts @@ -0,0 +1,53 @@ +import { ElectronBasePlugin, ElectronBasePluginClient } from "@remixproject/plugin-electron" + +import { Profile } from "@remixproject/plugin-utils"; +import { readConfig, writeConfig } from "../utils/config"; +import { app, utilityProcess } from "electron"; +import path from "path"; + +const profile: Profile = { + displayName: 'electronconfig', + name: 'electronconfig', + description: 'Electron Config' +} + +export class ConfigPlugin extends ElectronBasePlugin { + clients: ConfigPluginClient[] = [] + constructor() { + super(profile, clientProfile, ConfigPluginClient) + this.methods = [...super.methods, 'writeConfig', 'readConfig'] + } + + async writeConfig(data: any): Promise { + writeConfig(data) + } + + async readConfig(webContentsId: any): Promise { + return readConfig() + } + +} + +const clientProfile: Profile = { + name: 'electronconfig', + displayName: 'electronconfig', + description: 'Electron Config', + methods: ['writeConfig', 'readConfig'] +} + +class ConfigPluginClient extends ElectronBasePluginClient { + + constructor(webContentsId: number, profile: Profile) { + super(webContentsId, profile) + + } + + async writeConfig(data: any): Promise { + writeConfig(data) + } + + async readConfig(): Promise { + return readConfig() + } + +} \ No newline at end of file diff --git a/apps/remixdesktop/src/plugins/fsPlugin.ts b/apps/remixdesktop/src/plugins/fsPlugin.ts new file mode 100644 index 0000000000..0a416b52a1 --- /dev/null +++ b/apps/remixdesktop/src/plugins/fsPlugin.ts @@ -0,0 +1,435 @@ +import {ElectronBasePlugin, ElectronBasePluginClient} from '@remixproject/plugin-electron' +import fs from 'fs/promises' +import {Profile} from '@remixproject/plugin-utils' +import chokidar from 'chokidar' +import {dialog, shell} from 'electron' +import {createWindow, isPackaged} from '../main' +import {writeConfig} from '../utils/config' +import path from 'path' +import {customAction} from '@remixproject/plugin-api' +import { PluginEventDataBatcher } from '../utils/pluginEventDataBatcher' + + + +const profile: Profile = { + displayName: 'fs', + name: 'fs', + description: 'fs', +} + +const convertPathToPosix = (pathName: string): string => { + return pathName.split(path.sep).join(path.posix.sep) +} + +const convertPathToLocalFileSystem = (pathName: string): string => { + return pathName.split(path.posix.sep).join(path.sep) +} + +const getBaseName = (pathName: string): string => { + return path.basename(pathName) +} + +export class FSPlugin extends ElectronBasePlugin { + clients: FSPluginClient[] = [] + constructor() { + super(profile, clientProfile, FSPluginClient) + this.methods = [...super.methods, 'closeWatch', 'removeCloseListener'] + } + + async onActivation(): Promise { + const config = await this.call('electronconfig' as any, 'readConfig') + const openedFolders = (config && config.openedFolders) || [] + const recentFolders = (config && config.recentFolders) || [] + this.call('electronconfig', 'writeConfig', {...config, + recentFolders: recentFolders, + openedFolders: openedFolders}) + const foldersToDelete: string[] = [] + if (openedFolders && openedFolders.length) { + for (const folder of openedFolders) { + try { + const stat = await fs.stat(folder) + if (stat.isDirectory()) { + // do nothing + } + } catch (e) { + console.log('error opening folder', folder, e) + foldersToDelete.push(folder) + } + } + if (foldersToDelete.length) { + const newFolders = openedFolders.filter((f: string) => !foldersToDelete.includes(f)) + this.call('electronconfig', 'writeConfig', {recentFolders: newFolders}) + } + } + createWindow() + } + + async removeCloseListener(): Promise { + for (const client of this.clients) { + client.window.removeAllListeners() + } + } + + async closeWatch(): Promise { + for (const client of this.clients) { + await client.closeWatch() + } + } + + openFolder(webContentsId: any, path?: string): void { + const client = this.clients.find((c) => c.webContentsId === webContentsId) + if (client) { + client.openFolder(path) + } + } +} + +const clientProfile: Profile = { + name: 'fs', + displayName: 'fs', + description: 'fs', + methods: ['readdir', 'readFile', 'writeFile', 'mkdir', 'rmdir', 'unlink', 'rename', 'stat', 'lstat', 'exists', 'currentPath', 'getWorkingDir', 'watch', 'closeWatch', 'setWorkingDir', 'openFolder', 'openFolderInSameWindow', 'getRecentFolders', 'removeRecentFolder', 'openWindow', 'selectFolder', 'revealInExplorer', 'openInVSCode', 'openInVSCode', 'currentPath'], +} + +class FSPluginClient extends ElectronBasePluginClient { + watchers: Record = {} + workingDir: string = '' + trackDownStreamUpdate: Record = {} + expandedPaths: string[] = ['.'] + dataBatcher: PluginEventDataBatcher + + constructor(webContentsId: number, profile: Profile) { + super(webContentsId, profile) + this.onload(() => { + if (!isPackaged) { + this.window.webContents.openDevTools() + } + this.window.on('close', async () => { + await this.removeFromOpenedFolders(this.workingDir) + await this.closeWatch() + }) + }) + this.dataBatcher = new PluginEventDataBatcher(webContentsId) + this.dataBatcher.on('flush', (data: any) => { + //console.log('flush', data) + this.emit('eventGroup', data) + }) + } + + // best for non recursive + async readdir(path: string): Promise { + if (this.workingDir === '') return new Promise((resolve, reject) => reject({ + message: 'no working dir has been set' + })) + // call node fs.readdir + if (!path) return [] + const startTime = Date.now() + const files = await fs.readdir(this.fixPath(path), { + withFileTypes: true, + }) + + const result: any[] = [] + for (const file of files) { + const isDirectory = file.isDirectory() + result.push({ + file: file.name, + isDirectory, + }) + } + return result + } + + async readFile(path: string, options: any): Promise { + // hacky fix for TS error + if (!path) return undefined + try { + return (fs as any).readFile(this.fixPath(path), options) + } catch (e) { + return undefined + } + } + + async writeFile(path: string, content: string, options: any): Promise { + this.trackDownStreamUpdate[path] = content + return (fs as any).writeFile(this.fixPath(path), content, options) + } + + async mkdir(path: string): Promise { + return fs.mkdir(this.fixPath(path)) + } + + async rmdir(path: string): Promise { + await fs.rm(this.fixPath(path), { + recursive: true, + }) + this.emit('change', 'unlinkDir', path) + } + + async unlink(path: string): Promise { + return fs.unlink(this.fixPath(path)) + } + + async rename(oldPath: string, newPath: string): Promise { + return fs.rename(this.fixPath(oldPath), this.fixPath(newPath)) + } + + async stat(path: string): Promise { + try { + const stat = await fs.stat(this.fixPath(path)) + const isDirectory = stat.isDirectory() + return { + ...stat, + isDirectoryValue: isDirectory, + } + } catch (e) { + return undefined + } + } + + async lstat(path: string): Promise { + try { + const stat = await fs.lstat(this.fixPath(path)) + const isDirectory = stat.isDirectory() + return { + ...stat, + isDirectoryValue: isDirectory, + } + } catch (e) { + return undefined + } + } + + async exists(path: string): Promise { + return fs + .access(this.fixPath(path)) + .then(() => true) + .catch(() => false) + } + + async currentPath(): Promise { + return process.cwd() + } + + async getWorkingDir(): Promise { + return convertPathToPosix(this.workingDir) + } + + async watch(): Promise { + try { + if(this.events && this.events.eventNames().includes('[filePanel] expandPathChanged')) { + this.off('filePanel' as any, 'expandPathChanged') + } + this.on('filePanel' as any, 'expandPathChanged', async (paths: string[]) => { + this.expandedPaths = ['.', ...paths] // add root + //console.log(Object.keys(this.watchers)) + paths = paths.map((path) => this.fixPath(path)) + for (const path of paths) { + if (!Object.keys(this.watchers).includes(path)) { + this.watchers[path] = await this.watcherInit(path) + //console.log('added watcher', path) + } + } + + for (const watcher in this.watchers) { + if (watcher === this.workingDir) continue + if (!paths.includes(watcher)) { + await this.watchers[watcher].close() + delete this.watchers[watcher] + //console.log('removed watcher', watcher) + } + } + }) + this.watchers[this.workingDir] = await this.watcherInit(this.workingDir) // root + //console.log('added root watcher', this.workingDir) + } catch (e) { + console.log('error watching', e) + } + } + + private async watcherInit(path: string) { + const watcher = chokidar + .watch(path, { + ignorePermissionErrors: true, + ignoreInitial: true, + ignored: [ + '**/.git/index.lock', // this file is created and unlinked all the time when git is running on Windows + ], + depth: 0, + }) + .on('all', async (eventName, path, stats) => { + this.watcherExec(eventName, path) + }) + .on('error', (error) => { + watcher.close() + if (error.message.includes('ENOSPC')) { + this.emit('error', 'ENOSPC') + } + console.log(`Watcher error: ${error}`) + }) + return watcher + } + + private async watcherExec(eventName: string, eventPath: string) { + let pathWithoutPrefix = eventPath.replace(this.workingDir, '') + pathWithoutPrefix = convertPathToPosix(pathWithoutPrefix) + if (pathWithoutPrefix.startsWith('/')) pathWithoutPrefix = pathWithoutPrefix.slice(1) + + if (eventName === 'change') { + // remove workingDir from path + const newContent = await fs.readFile(eventPath, 'utf-8') + + const currentContent = this.trackDownStreamUpdate[pathWithoutPrefix] + + if (currentContent !== newContent) { + try { + const dirname = path.dirname(pathWithoutPrefix) + if (this.expandedPaths.includes(dirname) || this.expandedPaths.includes(pathWithoutPrefix)) { + //console.log('emitting', eventName, pathWithoutPrefix, this.expandedPaths) + this.dataBatcher.write('change', eventName, pathWithoutPrefix) + } + } catch (e) { + console.log('error emitting change', e) + } + } + } else { + try { + const dirname = path.dirname(pathWithoutPrefix) + //console.log('check emitting', eventName, pathWithoutPrefix, this.expandedPaths, dirname) + if (this.expandedPaths.includes(dirname) || this.expandedPaths.includes(pathWithoutPrefix)) { + //console.log('emitting', eventName, pathWithoutPrefix, this.expandedPaths) + //this.emit('change', eventName, pathWithoutPrefix) + this.dataBatcher.write('change', eventName, pathWithoutPrefix) + } + } catch (e) { + console.log('error emitting change', e) + } + } + } + + async closeWatch(): Promise { + for (const watcher in this.watchers) { + this.watchers[watcher].close() + } + } + + async updateRecentFolders(path: string): Promise { + const config = await this.call('electronconfig' as any, 'readConfig') + config.recentFolders = config.recentFolders || [] + config.recentFolders = config.recentFolders.filter((p: string) => p !== path) + config.recentFolders.push(path) + writeConfig(config) + } + + async updateOpenedFolders(path: string): Promise { + const config = await this.call('electronconfig' as any, 'readConfig') + config.openedFolders = config.openedFolders || [] + config.openedFolders = config.openedFolders.filter((p: string) => p !== path) + config.openedFolders.push(path) + writeConfig(config) + } + + async removeFromOpenedFolders(path: string): Promise { + const config = await this.call('electronconfig' as any, 'readConfig') + config.openedFolders = config.openedFolders || [] + config.openedFolders = config.openedFolders.filter((p: string) => p !== path) + writeConfig(config) + } + + async getRecentFolders(): Promise { + const config = await this.call('electronconfig' as any, 'readConfig') + let folders: string[] = config.recentFolders || [] + folders = folders.map((f: string) => convertPathToPosix(f)) + return folders + } + + async removeRecentFolder(path: string): Promise { + const config = await this.call('electronconfig' as any, 'readConfig') + config.recentFolders = config.recentFolders || [] + config.recentFolders = config.recentFolders.filter((p: string) => p !== path) + writeConfig(config) + } + + async selectFolder(path?: string, title?: string, button?: string): Promise { + let dirs: string[] | undefined + if (!path) { + dirs = dialog.showOpenDialogSync(this.window, { + properties: ['openDirectory', 'createDirectory', 'showHiddenFiles'], + title: title || 'Select or create a folder', + buttonLabel: button || 'Select folder', + }) + } + path = dirs && dirs.length && dirs[0] ? dirs[0] : path + if (!path) return '' + return path + } + + async openFolder(path?: string): Promise { + let dirs: string[] | undefined + if (!path) { + dirs = dialog.showOpenDialogSync(this.window, { + properties: ['openDirectory', 'createDirectory', 'showHiddenFiles'], + title: 'Open folder', + }) + } + path = dirs && dirs.length && dirs[0] ? dirs[0] : path + if (!path) return + + await this.updateRecentFolders(path) + await this.updateOpenedFolders(path) + this.openWindow(path) + } + + async openFolderInSameWindow(path?: string): Promise { + let dirs: string[] | undefined + if (!path) { + dirs = dialog.showOpenDialogSync(this.window, { + properties: ['openDirectory', 'createDirectory', 'showHiddenFiles'], + title: 'Open folder', + }) + } + path = dirs && dirs.length && dirs[0] ? dirs[0] : path + if (!path) return + this.workingDir = path + await this.updateRecentFolders(path) + await this.updateOpenedFolders(path) + this.window.setTitle(this.workingDir) + this.watch() + this.emit('workingDirChanged', path) + } + + async setWorkingDir(path: string): Promise { + this.workingDir = path + await this.updateRecentFolders(path) + await this.updateOpenedFolders(path) + this.window.setTitle(getBaseName(this.workingDir)) + this.watch() + this.emit('workingDirChanged', path) + await this.call('fileManager', 'closeAllFiles') + } + + async revealInExplorer(action: customAction, isAbsolutePath: boolean = false): Promise { + let path = isAbsolutePath? action.path[0] : this.fixPath(action.path[0]) + shell.showItemInFolder(convertPathToLocalFileSystem(path)) + } + + async openInVSCode(action: customAction): Promise { + shell.openExternal(`vscode://file/${this.fixPath(action.path[0])}`) + } + + fixPath(path: string): string { + if (this.workingDir === '') throw new Error('workingDir is not set') + if (path) { + if (path.startsWith('/')) { + path = path.slice(1) + } + + + } + path = this.workingDir + (!this.workingDir.endsWith('/') ? '/' : '') + path + return path + } + + openWindow(path: string): void { + createWindow(path) + } +} diff --git a/apps/remixdesktop/src/plugins/isoGitPlugin.ts b/apps/remixdesktop/src/plugins/isoGitPlugin.ts new file mode 100644 index 0000000000..62a3451a63 --- /dev/null +++ b/apps/remixdesktop/src/plugins/isoGitPlugin.ts @@ -0,0 +1,433 @@ +import { PluginClient } from "@remixproject/plugin"; +import { Profile } from "@remixproject/plugin-utils"; +import { ElectronBasePlugin, ElectronBasePluginClient } from "@remixproject/plugin-electron" +import fs from 'fs/promises' +import git from 'isomorphic-git' +import { dialog } from "electron"; +import http from 'isomorphic-git/http/web' +import { gitProxy } from "../tools/git"; + +const profile: Profile = { + name: 'isogit', + displayName: 'isogit', + description: 'isogit plugin', +} + +export class IsoGitPlugin extends ElectronBasePlugin { + clients: IsoGitPluginClient[] = [] + constructor() { + super(profile, clientProfile, IsoGitPluginClient) + } + + startClone(webContentsId: any): void { + const client = this.clients.find(c => c.webContentsId === webContentsId) + if (client) { + client.startClone() + } + } +} + +const parseInput = (input: any) => { + return { + corsProxy: 'https://corsproxy.remixproject.org/', + http, + onAuth: (url: any) => { + url + const auth = { + username: input.token, + password: '' + } + return auth + } + } +} + +const clientProfile: Profile = { + name: 'isogit', + displayName: 'isogit', + description: 'isogit plugin', + methods: ['init', 'localStorageUsed', 'version', 'addremote', 'delremote', 'remotes', 'fetch', 'clone', 'export', 'import', 'status', 'log', 'commit', 'add', 'remove', 'reset', 'rm', 'lsfiles', 'readblob', 'resolveref', 'branches', 'branch', 'checkout', 'currentbranch', 'push', 'pin', 'pull', 'pinList', 'unPin', 'setIpfsConfig', 'zip', 'setItem', 'getItem', 'openFolder'] +} + +class IsoGitPluginClient extends ElectronBasePluginClient { + workingDir: string = '' + gitIsInstalled: boolean = false + constructor(webContentsId: number, profile: Profile) { + super(webContentsId, profile) + this.onload(async () => { + this.on('fs' as any, 'workingDirChanged', async (path: string) => { + this.workingDir = path + this.gitIsInstalled = await gitProxy.version() ? true : false + }) + this.workingDir = await this.call('fs' as any, 'getWorkingDir') + this.gitIsInstalled = await gitProxy.version() ? true : false + }) + } + + async version() { + return gitProxy.version() + } + + async getGitConfig() { + return { + fs, + dir: this.workingDir, + } + } + + async status(cmd: any) { + + if (!this.workingDir || this.workingDir === '') { + throw new Error('No working directory') + } + + + if (this.workingDir === '') { + return [] + } + + if (this.gitIsInstalled) { + const status = await gitProxy.status(this.workingDir) + return status + } + + const status = await git.statusMatrix({ + ...await this.getGitConfig(), + ...cmd + }) + //console.log('STATUS', status, await this.getGitConfig()) + return status + } + + async log(cmd: any) { + + /* we will use isomorphic git for now + if(this.gitIsInstalled){ + const log = await gitProxy.log(this.workingDir, cmd.ref) + console.log('LOG', log) + return log + } + */ + + if (this.workingDir === '') { + return [] + } + + const log = await git.log({ + ...await this.getGitConfig(), + ...cmd + }) + + return log + } + + async add(cmd: any) { + if (!this.workingDir || this.workingDir === '') { + throw new Error('No working directory') + } + + const add = await git.add({ + ...await this.getGitConfig(), + ...cmd + }) + + return add + } + + async rm(cmd: any) { + + if (!this.workingDir || this.workingDir === '') { + throw new Error('No working directory') + } + + const rm = await git.remove({ + ...await this.getGitConfig(), + ...cmd + }) + + return rm + } + + async reset(cmd: any) { + + if (!this.workingDir || this.workingDir === '') { + throw new Error('No working directory') + } + + const reset = await git.resetIndex({ + ...await this.getGitConfig(), + ...cmd + }) + + return reset + } + + + async commit(cmd: any) { + if (!this.workingDir || this.workingDir === '') { + throw new Error('No working directory') + } + + if (this.gitIsInstalled) { + const status = await gitProxy.commit(this.workingDir, cmd.message) + return status + } + + const commit = await git.commit({ + ...await this.getGitConfig(), + ...cmd + }) + + return commit + } + + async init(input: any) { + + if (!this.workingDir || this.workingDir === '') { + throw new Error('No working directory') + } + if (this.gitIsInstalled) { + const status = await gitProxy.init(this.workingDir) + return status + } + await git.init({ + ...await this.getGitConfig(), + defaultBranch: (input && input.branch) || 'main' + }) + } + + async branch(cmd: any) { + if (!this.workingDir || this.workingDir === '') { + return null + } + const branch = await git.branch({ + ...await this.getGitConfig(), + ...cmd + }) + + return branch + } + + async lsfiles(cmd: any) { + if (!this.workingDir || this.workingDir === '') { + return [] + } + const lsfiles = await git.listFiles({ + ...await this.getGitConfig(), + ...cmd + }) + return lsfiles + } + + async resolveref(cmd: any) { + if (!this.workingDir || this.workingDir === '') { + return null + } + + const resolveref = await git.resolveRef({ + ...await this.getGitConfig(), + ...cmd + }) + + return resolveref + } + + + async readblob(cmd: any) { + + if (!this.workingDir || this.workingDir === '') { + throw new Error('No working directory') + } + + const readblob = await git.readBlob({ + ...await this.getGitConfig(), + ...cmd + }) + + return readblob + } + + async checkout(cmd: any) { + + if (!this.workingDir || this.workingDir === '') { + throw new Error('No working directory') + } + + const checkout = await git.checkout({ + ...await this.getGitConfig(), + ...cmd + }) + + return checkout + } + + async push(cmd: any) { + + if (!this.workingDir || this.workingDir === '') { + throw new Error('No working directory') + } + + if (this.gitIsInstalled) { + await gitProxy.push(this.workingDir, cmd.remote, cmd.ref, cmd.remoteRef, cmd.force) + + } else { + + const push = await git.push({ + ...await this.getGitConfig(), + ...cmd, + ...parseInput(cmd.input) + }) + return push + } + + } + + async pull(cmd: any) { + + if (!this.workingDir || this.workingDir === '') { + throw new Error('No working directory') + } + + if (this.gitIsInstalled) { + await gitProxy.pull(this.workingDir, cmd.remote, cmd.ref, cmd.remoteRef) + + } else { + + const pull = await git.pull({ + ...await this.getGitConfig(), + ...cmd, + ...parseInput(cmd.input) + }) + + return pull + + } + } + + async fetch(cmd: any) { + + if (!this.workingDir || this.workingDir === '') { + throw new Error('No working directory') + } + + if (this.gitIsInstalled) { + await gitProxy.fetch(this.workingDir, cmd.remote, cmd.remoteRef) + + } else { + + const fetch = await git.fetch({ + ...await this.getGitConfig(), + ...cmd, + ...parseInput(cmd.input) + }) + + return fetch + } + } + + async clone(cmd: any) { + + if (this.gitIsInstalled) { + try{ + await gitProxy.clone(cmd.url, cmd.dir) + }catch(e){ + throw e + } + } else { + try { + const clone = await git.clone({ + ...await this.getGitConfig(), + ...cmd, + ...parseInput(cmd.input), + dir: cmd.dir || this.workingDir + }) + + return clone + } catch (e) { + console.log('CLONE ERROR', e) + throw e + } + } + } + + async addremote(cmd: any) { + + const addremote = await git.addRemote({ + ...await this.getGitConfig(), + ...cmd + }) + + return addremote + } + + async delremote(cmd: any) { + + const delremote = await git.deleteRemote({ + ...await this.getGitConfig(), + ...cmd + }) + + return delremote + } + + + + remotes = async () => { + if (!this.workingDir || this.workingDir === '') { + return [] + } + let remotes = [] + remotes = await git.listRemotes({ ...await this.getGitConfig() }) + return remotes + } + + async currentbranch() { + if (!this.workingDir || this.workingDir === '') { + return '' + } + try { + const defaultConfig = await this.getGitConfig() + const name = await git.currentBranch(defaultConfig) + + return name + } catch (e) { + return '' + } + } + + + async branches() { + if (!this.workingDir || this.workingDir === '') { + return [] + } + try { + let cmd: any = { ...await this.getGitConfig() } + const remotes = await this.remotes() + let branches = [] + branches = (await git.listBranches(cmd)).map((branch) => { return { remote: undefined, name: branch } }) + for (const remote of remotes) { + cmd = { + ...cmd, + remote: remote.remote + } + + const remotebranches = (await git.listBranches(cmd)).map((branch) => { return { remote: remote.remote, name: branch } }) + branches = [...branches, ...remotebranches] + + } + + return branches + } catch (e) { + return [] + } + } + + + async startClone() { + this.call('filePanel' as any, 'clone') + } + +} + + + diff --git a/apps/remixdesktop/src/plugins/ripgrepPlugin.ts b/apps/remixdesktop/src/plugins/ripgrepPlugin.ts new file mode 100644 index 0000000000..4b620bb596 --- /dev/null +++ b/apps/remixdesktop/src/plugins/ripgrepPlugin.ts @@ -0,0 +1,129 @@ +import {PluginClient} from '@remixproject/plugin' +import {Profile} from '@remixproject/plugin-utils' +import {ElectronBasePlugin, ElectronBasePluginClient} from '@remixproject/plugin-electron' +import path from 'path' +import {rgPath} from '@vscode/ripgrep' +import byline from 'byline' +import {spawn} from 'child_process' +import { SearchInWorkspaceOptions } from '../lib' + +const profile: Profile = { + name: 'ripgrep', + displayName: 'ripgrep', + description: 'Ripgrep plugin', +} + +const convertPathToPosix = (pathName: string): string => { + return pathName.split(path.sep).join(path.posix.sep) +} + +export class RipgrepPlugin extends ElectronBasePlugin { + clients: RipgrepPluginClient[] = [] + constructor() { + super(profile, clientProfile, RipgrepPluginClient) + this.methods = [...super.methods] + } +} + +const clientProfile: Profile = { + name: 'ripgrep', + displayName: 'ripgrep', + description: 'ripgrep plugin', + methods: ['glob'], +} + +const getArgs = (options?: SearchInWorkspaceOptions) => { + const args = ['-l'] + args.push(options && options.matchCase ? '--case-sensitive' : '--ignore-case') + if (options && options.matchWholeWord) { + args.push('--word-regexp') + } + if (options && options.includeIgnored) { + args.push('-uu') + } + args.push(options && options.useRegExp ? '--regexp' : '--fixed-strings') + return args +} + +export class RipgrepPluginClient extends ElectronBasePluginClient { + workingDir: string = '' + constructor(webContentsId: number, profile: Profile) { + super(webContentsId, profile) + + this.onload(async () => { + this.on('fs' as any, 'workingDirChanged', async (path: string) => { + this.workingDir = path + }) + this.workingDir = await this.call('fs' as any, 'getWorkingDir') + }) + } + + async glob(opts: SearchInWorkspaceOptions) { + try { + opts = JSON.parse(JSON.stringify(opts)) + const fixedPath = this.fixPath(opts.path) + const path = convertPathToPosix(fixedPath) + + const args = getArgs(opts) + const globs: string[] = [] + if (opts && opts.include) { + for (const include of opts.include) { + if (include !== '') { + globs.push('--glob=' + include) + } + } + } + if (opts && opts.exclude) { + for (const exclude of opts.exclude) { + if (exclude !== '') { + globs.push('--glob=!=' + exclude) + } + } + } + + return new Promise((c, e) => { + // replace packed app path with unpacked app path for release on windows + + const customRgPath = rgPath.includes('app.asar.unpacked') ? rgPath : rgPath.replace('app.asar', 'app.asar.unpacked') + + const rg = spawn(customRgPath, [...globs, ...args, opts.pattern, path]) + + const resultrg: any[] = [] + + const stream = byline(rg.stdout.setEncoding('utf8')) + stream.on('data', (rgresult: string) => { + let pathWithoutWorkingDir = rgresult.replace(convertPathToPosix(this.workingDir), '') + if (pathWithoutWorkingDir.endsWith('/')) { + pathWithoutWorkingDir = pathWithoutWorkingDir.slice(0, -1) + } + if (pathWithoutWorkingDir.startsWith('/')) { + pathWithoutWorkingDir = pathWithoutWorkingDir.slice(1) + } + if (pathWithoutWorkingDir.startsWith('\\')) { + pathWithoutWorkingDir = pathWithoutWorkingDir.slice(1) + } + resultrg.push({ + path: convertPathToPosix(pathWithoutWorkingDir), + isDirectory: false, + }) + }) + stream.on('end', () => { + c(resultrg) + }) + }) + } catch (e) { + return [] + } + } + + fixPath(path: string): string { + if (this.workingDir === '') throw new Error('workingDir is not set') + if (path) { + if (path.startsWith('/')) { + path = path.slice(1) + } + } + path = this.workingDir + (!this.workingDir.endsWith('/') ? '/' : '') + path + return path + } +} diff --git a/apps/remixdesktop/src/plugins/templates.ts b/apps/remixdesktop/src/plugins/templates.ts new file mode 100644 index 0000000000..aefadcae1b --- /dev/null +++ b/apps/remixdesktop/src/plugins/templates.ts @@ -0,0 +1,72 @@ +import { PluginClient } from "@remixproject/plugin"; +import { Profile } from "@remixproject/plugin-utils"; +import { ElectronBasePlugin, ElectronBasePluginClient } from "@remixproject/plugin-electron" +import * as templateWithContent from '@remix-project/remix-ws-templates' +import fs from 'fs/promises' +import { createWindow } from "../main"; +import path from 'path' + +const profile: Profile = { + name: 'electronTemplates', + displayName: 'electronTemplates', + description: 'Templates plugin', +} + +export class TemplatesPlugin extends ElectronBasePlugin { + clients: TemplatesPluginClient[] = [] + constructor() { + super(profile, clientProfile, TemplatesPluginClient) + } + + openTemplate(webContentsId: any): void { + const client = this.clients.find(c => c.webContentsId === webContentsId) + if (client) { + client.openTemplate() + } + } + +} + +const clientProfile: Profile = { + name: 'electronTemplates', + displayName: 'electronTemplates', + description: 'Templates plugin', + methods: ['loadTemplateInNewWindow', 'openTemplate'], +} + +export type WorkspaceTemplate = 'gist-template' | 'code-template' | 'remixDefault' | 'blank' | 'ozerc20' | 'zeroxErc20' | 'ozerc721' + +class TemplatesPluginClient extends ElectronBasePluginClient { + + constructor(webContentsId: number, profile: Profile) { + super(webContentsId, profile) + } + + async loadTemplateInNewWindow (files: any) { + + let folder = await this.call('fs' as any, 'selectFolder', null ,'Select or create a folder to load the template in', 'Set as destination folder for the template') + if (!folder || folder === '') return + // @ts-ignore + + for (const file in files) { + try { + if(!folder.endsWith('/')) folder += '/' + + await fs.mkdir(path.dirname(folder + file), { recursive: true}) + await fs.writeFile(folder + file, files[file], { + encoding: 'utf8' + }) + } catch (error) { + console.error(error) + } + } + createWindow(folder) + } + + async openTemplate(){ + this.call('filePanel' as any, 'loadTemplate') + } + +} + + diff --git a/apps/remixdesktop/src/plugins/xtermPlugin.ts b/apps/remixdesktop/src/plugins/xtermPlugin.ts new file mode 100644 index 0000000000..4b5b6c6e16 --- /dev/null +++ b/apps/remixdesktop/src/plugins/xtermPlugin.ts @@ -0,0 +1,206 @@ +import {PluginClient} from '@remixproject/plugin' +import {Profile} from '@remixproject/plugin-utils' +import { + ElectronBasePlugin, + ElectronBasePluginClient, +} from '@remixproject/plugin-electron' + +import os from 'os' +import * as pty from 'node-pty' +import process from 'node:process' +import {userInfo} from 'node:os' +import {findExecutable} from '../utils/findExecutable' +import {spawnSync} from 'child_process' +import { stripAnsi } from '../lib' +import { DataBatcher } from '../lib/databatcher' + +export const detectDefaultShell = () => { + const {env} = process + + if (process.platform === 'win32') { + return env.SHELL || 'powershell.exe' + } + + try { + const {shell} = userInfo() + if (shell) { + return shell + } + } catch {} + + if (process.platform === 'darwin') { + return env.SHELL || '/bin/zsh' + } + + return env.SHELL || '/bin/sh' +} + +// Stores default shell when imported. +const defaultShell = detectDefaultShell() + +const getShellEnvArgs = [ + '-ilc', + 'echo -n "_SHELL_ENV_DELIMITER_"; env; echo -n "_SHELL_ENV_DELIMITER_"; exit', +] + +const getShellEnvEnv = { + // Disables Oh My Zsh auto-update thing that can block the process. + DISABLE_AUTO_UPDATE: 'true', +} + +const parseEnv = (env: any) => { + env = env.split('_SHELL_ENV_DELIMITER_')[1] + const returnValue = {} + + for (const line of stripAnsi(env) + .split('\n') + .filter((l) => Boolean(l))) { + const [key, ...values] = line.split('=') + Object.assign(returnValue, { + [key]: values.join('='), + }) + } + + return returnValue +} + +export default defaultShell + +const profile: Profile = { + name: 'xterm', + displayName: 'xterm', + description: 'xterm plugin', +} + +export class XtermPlugin extends ElectronBasePlugin { + clients: XtermPluginClient[] = [] + constructor() { + super(profile, clientProfile, XtermPluginClient) + this.methods = [...super.methods, 'closeTerminals'] + } + + new(webContentsId: any): void { + const client = this.clients.find((c) => c.webContentsId === webContentsId) + if (client) { + client.new() + } + } + + async closeTerminals(): Promise { + for (const client of this.clients) { + await client.closeAll() + } + } +} + +const clientProfile: Profile = { + name: 'xterm', + displayName: 'xterm', + description: 'xterm plugin', + methods: ['createTerminal', 'closeTerminal', 'keystroke', 'getShells', 'resize'], +} + +class XtermPluginClient extends ElectronBasePluginClient { + terminals: pty.IPty[] = [] + dataBatchers: DataBatcher[] = [] + workingDir: string = '' + constructor(webContentsId: number, profile: Profile) { + super(webContentsId, profile) + this.onload(async () => { + this.emit('loaded') + this.on('fs' as any, 'workingDirChanged', async (path: string) => { + this.workingDir = path + }) + this.workingDir = await this.call('fs' as any, 'getWorkingDir') + console.log('workingDir', this.workingDir) + }) + } + + async keystroke(key: string, pid: number): Promise { + this.terminals[pid].write(key) + } + + async getShells(): Promise { + if (os.platform() === 'win32') { + let bash = await findExecutable('bash.exe') + if(bash.length === 0) { + bash = await findExecutable('bash.exe', undefined, [process.env['ProgramFiles'] + '\\Git\\bin']) + } + if (bash) { + const shells = ['powershell.exe', 'cmd.exe', ...bash] + // filter out duplicates + return shells.filter((v, i, a) => a.indexOf(v) === i) + } + return ['powershell.exe', 'cmd.exe'] + } + return [defaultShell] + } + + async createTerminal(path?: string, shell?: string): Promise { + let parsedEnv: any = null + if (!(process.platform === 'win32')) { + const {stdout} = spawnSync(defaultShell, getShellEnvArgs, { + encoding: 'utf8', + }) + parsedEnv = parseEnv(stdout) + } + + const env = parsedEnv || process.env + + const ptyProcess = pty.spawn(shell || defaultShell, [], { + name: 'xterm-color', + cols: 80, + rows: 20, + cwd: path || process.cwd(), + env: env, + }) + const dataBatcher = new DataBatcher(ptyProcess.pid) + ptyProcess.onData((data: string) => { + dataBatcher.write(Buffer.from(data)) + //this.sendData(data, ptyProcess.pid) + }) + dataBatcher.on('flush', (data: string, uid: number) => { + this.sendData(data, uid) + }) + this.terminals[ptyProcess.pid] = ptyProcess + + return ptyProcess.pid + } + + async closeTerminal(pid: number): Promise { + this.terminals[pid].kill() + delete this.terminals[pid] + this.emit('close', pid) + } + + async resize({cols, rows}: {cols: number; rows: number}, pid: number) { + if (this.terminals[pid]) { + try { + this.terminals[pid].resize(cols, rows) + } catch (_err) { + const err = _err as {stack: any} + console.error(err.stack) + } + } else { + console.warn('Warning: Attempted to resize a session with no pty') + } + } + + async closeAll(): Promise { + for (const pid in this.terminals) { + this.terminals[pid].kill() + delete this.terminals[pid] + this.emit('close', pid) + } + } + + async sendData(data: string, pid: number) { + this.emit('data', data, pid) + } + + async new(): Promise { + console.log('new terminal') + const pid = await this.createTerminal(this.workingDir) + this.emit('new', pid) + } +} diff --git a/apps/remixdesktop/src/preload.ts b/apps/remixdesktop/src/preload.ts new file mode 100644 index 0000000000..007fe098e9 --- /dev/null +++ b/apps/remixdesktop/src/preload.ts @@ -0,0 +1,33 @@ + +import { Message } from '@remixproject/plugin-utils' +import { contextBridge, ipcRenderer } from 'electron' + +console.log('preload.ts', new Date().toLocaleTimeString()) + +/* preload script needs statically defined API for each plugin */ + +const exposedPLugins = ['fs', 'git', 'xterm', 'isogit', 'electronconfig', 'electronTemplates', 'ripgrep', 'compilerloader'] + +let webContentsId: number | undefined + +ipcRenderer.invoke('getWebContentsID').then((id: number) => { + webContentsId = id +}) + +contextBridge.exposeInMainWorld('electronAPI', { + activatePlugin: (name: string) => { + return ipcRenderer.invoke('manager:activatePlugin', name) + }, + + getWindowId: () => ipcRenderer.invoke('getWindowID'), + + plugins: exposedPLugins.map(name => { + return { + name, + on: (cb:any) => ipcRenderer.on(`${name}:send`, cb), + send: (message: Partial) => { + ipcRenderer.send(`${name}:on:${webContentsId}`, message) + } + } + }) +}) \ No newline at end of file diff --git a/apps/remixdesktop/src/tools/git.ts b/apps/remixdesktop/src/tools/git.ts new file mode 100644 index 0000000000..a85d036997 --- /dev/null +++ b/apps/remixdesktop/src/tools/git.ts @@ -0,0 +1,155 @@ +import { exec } from 'child_process'; +import { CommitObject, ReadCommitResult } from 'isomorphic-git'; +import { promisify } from 'util'; +const execAsync = promisify(exec); + +const statusTransFormMatrix = (status: string) => { + switch (status) { + case '??': + return [0, 2, 0] + case 'A ': + return [0, 2, 2] + case 'M ': + return [1, 2, 2] + case 'MM': + return [1, 2, 3] + case ' M': + return [1, 2, 0] + case ' D': + return [1, 0, 1] + case 'D ': + return [1, 0, 0] + case 'AM': + return [0, 2, 3] + default: + return [-1, -1, -1] + } +} + +export const gitProxy = { + + version: async () => { + try { + const result = await execAsync('git --version'); + return result.stdout + } catch (error) { + return false; + } + }, + + + + clone: async (url: string, path: string) => { + const { stdout, stderr } = await execAsync(`git clone ${url} ${path}`); + }, + + async push(path: string, remote: string, src: string, branch: string, force: boolean = false) { + const { stdout, stderr } = await execAsync(`git push ${force ? ' -f' : ''} ${remote} ${src}:${branch}`, { cwd: path }); + }, + + async pull(path: string, remote: string, src: string, branch: string) { + const { stdout, stderr } = await execAsync(`git pull ${remote} ${src}:${branch}`, { cwd: path }); + }, + + async fetch(path: string, remote: string, branch: string) { + const { stdout, stderr } = await execAsync(`git fetch ${remote} ${branch}`, { cwd: path }); + }, + + async commit(path: string, message: string) { + + await execAsync(`git commit -m '${message}'`, { cwd: path }); + const { stdout, stderr } = await execAsync(`git rev-parse HEAD`, { cwd: path }); + return stdout; + + }, + + async init(path: string) { + await execAsync(`git init`, { cwd: path }); + }, + + + status: async (path: string) => { + const result = await execAsync('git status --porcelain -uall', { cwd: path }) + //console.log('git status --porcelain -uall', result.stdout) + // parse the result.stdout + const lines = result.stdout.split('\n') + const files: any = [] + const fileNames: any = [] + //console.log('lines', lines) + lines.forEach((line: string) => { + // get the first two characters of the line + const status = line.slice(0, 2) + + const file = line.split(' ').pop() + + //console.log('line', line) + if (status && file) { + fileNames.push(file) + files.push([ + file, + ...statusTransFormMatrix(status) + ]) + } + } + ) + // sort files by first column + files.sort((a: any, b: any) => { + if (a[0] < b[0]) { + return -1 + } + if (a[0] > b[0]) { + return 1 + } + return 0 + }) + + + return files + }, + + + // buggy, doesn't work properly yet on windows + log: async (path: string, ref: string) => { + const result = await execAsync('git log ' + ref + ' --pretty=format:"{ oid:%H, message:"%s", author:"%an", email: "%ae", timestamp:"%at", tree: "%T", committer: "%cn", committer-email: "%ce", committer-timestamp: "%ct", parent: "%P" }" -n 20', { cwd: path }) + console.log('git log', result.stdout) + const lines = result.stdout.split('\n') + const commits: ReadCommitResult[] = [] + console.log('lines', lines) + lines.forEach((line: string) => { + console.log('line', normalizeJson(line)) + line = normalizeJson(line) + const data = JSON.parse(line) + let commit: ReadCommitResult = {} as ReadCommitResult + commit.oid = data.oid + commit.commit = {} as CommitObject + commit.commit.message = data.message + commit.commit.tree = data.tree + commit.commit.committer = {} as any + commit.commit.committer.name = data.committer + commit.commit.committer.email = data['committer-email'] + commit.commit.committer.timestamp = data['committer-timestamp'] + commit.commit.author = {} as any + commit.commit.author.name = data.author + commit.commit.author.email = data.email + commit.commit.author.timestamp = data.timestamp + commit.commit.parent = [data.parent] + console.log('commit', commit) + commits.push(commit) + + }) + + return commits + + } +} + +function normalizeJson(str: string) { + return str.replace(/[\s\n\r\t]/gs, '').replace(/,([}\]])/gs, '$1') + .replace(/([,{\[]|)(?:("|'|)([\w_\- ]+)\2:|)("|'|)(.*?)\4([,}\]])/gs, (str, start, q1, index, q2, item, end) => { + item = item.replace(/"/gsi, '').trim(); + if (index) { index = '"' + index.replace(/"/gsi, '').trim() + '"'; } + if (!item.match(/^[0-9]+(\.[0-9]+|)$/) && !['true', 'false'].includes(item)) { item = '"' + item + '"'; } + if (index) { return start + index + ':' + item + end; } + return start + item + end; + }); +} diff --git a/apps/remixdesktop/src/utils/config.ts b/apps/remixdesktop/src/utils/config.ts new file mode 100644 index 0000000000..4cbb17a3e0 --- /dev/null +++ b/apps/remixdesktop/src/utils/config.ts @@ -0,0 +1,51 @@ +import fs from 'fs' +import os from 'os' +import path from 'path' + +export const cacheDir = path.join(os.homedir(), '.cache_remix_ide') + +console.log('cacheDir', cacheDir) + +export const createDefaultConfigLocations = async() => { + try { + if (!fs.existsSync(cacheDir)) { + fs.mkdirSync(cacheDir) + } + if (!fs.existsSync(cacheDir + '/compilers')) { + fs.mkdirSync(cacheDir + '/compilers') + } + if (!fs.existsSync(cacheDir + '/remixdesktop.json')) { + console.log('create config file') + fs.writeFileSync(cacheDir + '/remixdesktop.json', JSON.stringify({})) + } + } catch (e) { + console.log(e) + } +} + +export const writeConfig = async (data: any) => { + await createDefaultConfigLocations() + const cache = readConfig() + try { + //console.log('write config file', data) + fs.writeFileSync(cacheDir + '/remixdesktop.json', JSON.stringify({ ...cache, ...data })) + } catch (e) { + console.error('Can\'t write config file', e) + } +} + +export const readConfig = async () => { + await createDefaultConfigLocations() + if (fs.existsSync(cacheDir + '/remixdesktop.json')) { + try { + // read the cache file + const cache = fs.readFileSync(cacheDir + '/remixdesktop.json') + const data = JSON.parse(cache.toString()) + //console.log('read config file', data) + return data + } catch (e) { + console.error('Can\'t read config file', e) + } + } + return undefined +} \ No newline at end of file diff --git a/apps/remixdesktop/src/utils/findExecutable.ts b/apps/remixdesktop/src/utils/findExecutable.ts new file mode 100644 index 0000000000..aea1d7412a --- /dev/null +++ b/apps/remixdesktop/src/utils/findExecutable.ts @@ -0,0 +1,86 @@ +import path from "path"; +import process from "process"; +import { Stats } from "fs"; +import fs from 'fs/promises' + +export async function findExecutable(command: string, cwd?: string, paths?: string[]): Promise { + // If we have an absolute path then we take it. + if (path.isAbsolute(command)) { + return [command]; + } + if (cwd === undefined) { + cwd = process.cwd(); + } + + + const dir = path.dirname(command); + if (dir !== '.') { + // We have a directory and the directory is relative (see above). Make the path absolute + // to the current working directory. + return [path.join(cwd, command)]; + } + + + + if (paths === undefined && typeof process.env['PATH'] === 'string') { + paths = (process && process.env['PATH'] && process.env['PATH'].split(path.delimiter)) || []; + } + // No PATH environment. Make path absolute to the cwd. + if (paths === undefined || paths.length === 0) { + return []; + } + + + + async function fileExists(path: string): Promise { + + try { + if (await fs.stat(path)) { + let statValue: Stats | undefined; + try { + statValue = await fs.stat(path); + } catch (e: any) { + if (e.message.startsWith('EACCES')) { + // it might be symlink + statValue = await fs.lstat(path); + } + } + + return statValue ? !statValue.isDirectory() : false; + } + } catch (e) { + } + return false; + } + + // We have a simple file name. We get the path variable from the env + // and try to find the executable on the path. + + const results = []; + + for (const pathEntry of paths) { + + // The path entry is absolute. + let fullPath: string; + if (path.isAbsolute(pathEntry)) { + fullPath = path.join(pathEntry, command); + } else { + fullPath = path.join(cwd, pathEntry, command); + } + if (await fileExists(fullPath)) { + results.push(fullPath); + } + let withExtension = fullPath + '.com'; + if (await fileExists(withExtension)) { + results.push(withExtension); + } + withExtension = fullPath + '.exe'; + if (await fileExists(withExtension)) { + results.push(withExtension); + } + } + if (results.length > 0) { + return results; + } + return []; +} \ No newline at end of file diff --git a/apps/remixdesktop/src/utils/pluginEventDataBatcher.ts b/apps/remixdesktop/src/utils/pluginEventDataBatcher.ts new file mode 100644 index 0000000000..991356f46e --- /dev/null +++ b/apps/remixdesktop/src/utils/pluginEventDataBatcher.ts @@ -0,0 +1,52 @@ +import {EventEmitter} from 'events' + +// Max duration to batch session data before sending it to the renderer process. +const BATCH_DURATION_MS = 16 + +// Max number of events to batch before sending them to the renderer process. +const BATCH_MAX_SIZE = 50 + +export class PluginEventDataBatcher extends EventEmitter { + uid: number + data!: any[] + timeout!: NodeJS.Timeout | null + constructor(uid: number) { + super() + this.uid = uid + + this.reset() + } + + reset() { + this.data = [] + this.timeout = null + } + + write(key: string, ...payload: any): void { + if (this.data.length >= BATCH_MAX_SIZE) { + // We've reached the max batch size. Flush it and start another one + if (this.timeout) { + clearTimeout(this.timeout) + this.timeout = null + } + this.flush() + } + + this.data.push({ + key, + payload, + }) + + if (!this.timeout) { + this.timeout = setTimeout(() => this.flush(), BATCH_DURATION_MS) + } + } + + flush() { + // Reset before emitting to allow for potential reentrancy + const data = this.data + this.reset() + + this.emit('flush', data) + } +} diff --git a/apps/remixdesktop/tsconfig.json b/apps/remixdesktop/tsconfig.json new file mode 100644 index 0000000000..63acb26bd4 --- /dev/null +++ b/apps/remixdesktop/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "skipLibCheck": true, + "esModuleInterop": true, + "noImplicitAny": true, + "allowSyntheticDefaultImports": true, + "sourceMap": true, + "strictPropertyInitialization": false, + "strict": true, + "outDir": "build", + "rootDir": "./src/", + "noEmitOnError": true, + "typeRoots": ["node_modules/@types", "./types"] + } +} \ No newline at end of file diff --git a/apps/remixdesktop/yarn.lock b/apps/remixdesktop/yarn.lock new file mode 100644 index 0000000000..b8634536b2 --- /dev/null +++ b/apps/remixdesktop/yarn.lock @@ -0,0 +1,5574 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"7zip-bin@~5.1.1": + version "5.1.1" + resolved "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.1.tgz" + integrity sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ== + +"@babel/runtime@^7.8.3": + version "7.23.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885" + integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== + dependencies: + regenerator-runtime "^0.14.0" + +"@develar/schema-utils@~2.6.5": + version "2.6.5" + resolved "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz" + integrity sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig== + dependencies: + ajv "^6.12.0" + ajv-keywords "^3.4.1" + +"@electron/get@^2.0.0": + version "2.0.2" + resolved "https://registry.npmjs.org/@electron/get/-/get-2.0.2.tgz" + integrity sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g== + dependencies: + debug "^4.1.1" + env-paths "^2.2.0" + fs-extra "^8.1.0" + got "^11.8.5" + progress "^2.0.3" + semver "^6.2.0" + sumchecker "^3.0.1" + optionalDependencies: + global-agent "^3.0.0" + +"@electron/rebuild@^3.2.13": + version "3.2.13" + resolved "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.2.13.tgz" + integrity sha512-DH9Ol4JCnHDYVOD0fKWq+Qqbn/0WU1O6QR0mIpMXEVU4YFM4PlaqNC9K36mGShNBxxGFotZCMDrB1wl/iHM12g== + dependencies: + "@malept/cross-spawn-promise" "^2.0.0" + chalk "^4.0.0" + debug "^4.1.1" + detect-libc "^2.0.1" + fs-extra "^10.0.0" + got "^11.7.0" + node-abi "^3.0.0" + node-api-version "^0.1.4" + node-gyp "^9.0.0" + ora "^5.1.0" + semver "^7.3.5" + tar "^6.0.5" + yargs "^17.0.1" + +"@electron/universal@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.2.1.tgz#3c2c4ff37063a4e9ab1e6ff57db0bc619bc82339" + integrity sha512-7323HyMh7KBAl/nPDppdLsC87G6RwRU02dy5FPeGB1eS7rUePh55+WNWiDPLhFQqqVPHzh77M69uhmoT8XnwMQ== + dependencies: + "@malept/cross-spawn-promise" "^1.1.0" + asar "^3.1.0" + debug "^4.3.1" + dir-compare "^2.4.0" + fs-extra "^9.0.1" + minimatch "^3.0.4" + plist "^3.0.4" + +"@erebos/bzz-node@^0.13.0": + version "0.13.0" + resolved "https://registry.yarnpkg.com/@erebos/bzz-node/-/bzz-node-0.13.0.tgz#495240c8b4fa67fa920c52a2d8db2cf82e673e1a" + integrity sha512-Mmo9awJG/Agj6lPqicj8VRdUELoT9pP2xIVniaoUqIMMZkf+lswXFylkyH578ZCNaehyZTTttaXS5WA+T9UVyA== + dependencies: + "@babel/runtime" "^7.8.3" + "@erebos/bzz" "^0.13.0" + form-data "^3.0.0" + node-fetch "^2.6.0" + tar-stream "^2.1.0" + +"@erebos/bzz@^0.13.0": + version "0.13.0" + resolved "https://registry.yarnpkg.com/@erebos/bzz/-/bzz-0.13.0.tgz#8ddd4e685c8ed53b5147653e041c21fc35553468" + integrity sha512-ETjXxeNzT7wGofz0CcrNEc/dLeLg0DALuxpMymrzK+AvLvP8PZUfiFn+tZoupSMGaLldfSLJXweOfs3BimVaRg== + dependencies: + "@babel/runtime" "^7.8.3" + +"@ethereumjs/common@2.6.5", "@ethereumjs/common@^2.6.4": + version "2.6.5" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30" + integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== + dependencies: + crc-32 "^1.2.0" + ethereumjs-util "^7.1.5" + +"@ethereumjs/rlp@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" + integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== + +"@ethereumjs/tx@3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.5.2.tgz#197b9b6299582ad84f9527ca961466fce2296c1c" + integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== + dependencies: + "@ethereumjs/common" "^2.6.4" + ethereumjs-util "^7.1.5" + +"@ethereumjs/util@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" + integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== + dependencies: + "@ethereumjs/rlp" "^4.0.1" + ethereum-cryptography "^2.0.0" + micro-ftch "^0.3.1" + +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + +"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" + integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + +"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + +"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" + integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + +"@ethersproject/contracts@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" + integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + +"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" + integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" + integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" + integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== + +"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" + integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + +"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/providers@5.7.2": + version "5.7.2" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" + integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" + integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" + integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" + integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/solidity@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" + integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + +"@ethersproject/units@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" + integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/wallet@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" + integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/json-wallets" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" + integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@malept/cross-spawn-promise@^1.1.0": + version "1.1.1" + resolved "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz" + integrity sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ== + dependencies: + cross-spawn "^7.0.1" + +"@malept/cross-spawn-promise@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz" + integrity sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg== + dependencies: + cross-spawn "^7.0.1" + +"@malept/flatpak-bundler@^0.4.0": + version "0.4.0" + resolved "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz" + integrity sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q== + dependencies: + debug "^4.1.1" + fs-extra "^9.0.0" + lodash "^4.17.15" + tmp-promise "^3.0.2" + +"@noble/curves@1.1.0", "@noble/curves@~1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.1.0.tgz#f13fc667c89184bc04cccb9b11e8e7bae27d8c3d" + integrity sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA== + dependencies: + "@noble/hashes" "1.3.1" + +"@noble/hashes@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" + integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== + +"@noble/hashes@~1.3.0", "@noble/hashes@~1.3.1": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + +"@npmcli/fs@^3.1.0": + version "3.1.0" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz" + integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== + dependencies: + semver "^7.3.5" + +"@openzeppelin/contracts@^4.7.3": + version "4.9.3" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.9.3.tgz#00d7a8cf35a475b160b3f0293a6403c511099364" + integrity sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg== + +"@openzeppelin/wizard@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/wizard/-/wizard-0.1.1.tgz#8c183e2c5748869bc3a5317c0330aa36a9ad44fe" + integrity sha512-AGyvn3PIh1vCgAEoRKAXKhtlk4fkA8AHE7G4PyzLnYcASClYCWpSf43WLJCs6S/LORvTZADX1flvF8x2LciJIg== + dependencies: + array.prototype.flatmap "^1.2.4" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@remix-project/remix-url-resolver@^0.0.65": + version "0.0.65" + resolved "https://registry.yarnpkg.com/@remix-project/remix-url-resolver/-/remix-url-resolver-0.0.65.tgz#11f035b18169a5e311748943412373ca1a27d360" + integrity sha512-KsBX5QriY6WV+cFuRWR+xkQVE490ZqQJSt9mtx5K4ua3y4M3rRvl4tG5nfCSo4bPxXnVglErSw7HOZtJM6JHvA== + dependencies: + "@erebos/bzz-node" "^0.13.0" + axios "1.2.2" + url "^0.11.0" + valid-url "^1.0.9" + +"@remix-project/remix-ws-templates@^1.0.27": + version "1.0.27" + resolved "https://registry.yarnpkg.com/@remix-project/remix-ws-templates/-/remix-ws-templates-1.0.27.tgz#dc3b5ea43e077f5f0c792bb1987376e5ee365af4" + integrity sha512-ATGZQlRaWtPfYcxviZ6l+TFDOILUTowU4tvo1AxlziGWg3HOrcdgYZmD0/SWy/gYlZa3T51r9ey7qtkm3ZQqIA== + dependencies: + "@openzeppelin/contracts" "^4.7.3" + "@openzeppelin/wizard" "^0.1.1" + ethers "^5.4.2" + web3 "^1.5.1" + +"@remixproject/engine-electron@0.3.41": + version "0.3.41" + resolved "https://registry.yarnpkg.com/@remixproject/engine-electron/-/engine-electron-0.3.41.tgz#a354d4a4dd43ade644ea27636cfc0aa63c5155b2" + integrity sha512-fF2l3LkDVK1KjkIHll7mOo6AkjUg4hgbHG2jDzHZW6m1jYr6SGxauVoYlOQvlfTe283dpsGxWEdU7TOC8Kne7w== + dependencies: + "@remixproject/engine" "0.3.41" + "@remixproject/plugin-api" "0.3.41" + "@remixproject/plugin-utils" "0.3.41" + +"@remixproject/engine@0.3.41": + version "0.3.41" + resolved "https://registry.yarnpkg.com/@remixproject/engine/-/engine-0.3.41.tgz#71b447d07dd52ec7645c6538f64caa638f3d9702" + integrity sha512-5ppAEana+I9FvSOjdNoLkLFbBTIpLoN5DAKsw+efyZ076i/67OsZ6oHXZqzGoHTOr4s4aS0wHmCBJPSla8GUBA== + dependencies: + "@remixproject/plugin-api" "0.3.41" + "@remixproject/plugin-utils" "0.3.41" + +"@remixproject/plugin-api@0.3.41": + version "0.3.41" + resolved "https://registry.yarnpkg.com/@remixproject/plugin-api/-/plugin-api-0.3.41.tgz#9a60d92332af608a871366bec6097bda2d2d1658" + integrity sha512-+gZOzJH4KUMVOEYFFW4LwwCWbojACqxvLM9FJRRkHehohue07Y7ojIbFoYk4EPWkdBtOXOsIR2zjdUIUlzzrTg== + dependencies: + "@remixproject/plugin-utils" "0.3.41" + +"@remixproject/plugin-api@^0.3.38": + version "0.3.38" + resolved "https://registry.yarnpkg.com/@remixproject/plugin-api/-/plugin-api-0.3.38.tgz#7dcff37483451b654fc51290157992fff3fbd8b7" + integrity sha512-GLXAnV7TMYV2KlXTml+W0H6s0m5EkVb5w610Jh9k4PLFVrocl9xDEG4VlZ8BF/uv+yjXRi4dn++8zWMRe5375Q== + dependencies: + "@remixproject/plugin-utils" "0.3.38" + +"@remixproject/plugin-electron@0.3.41": + version "0.3.41" + resolved "https://registry.yarnpkg.com/@remixproject/plugin-electron/-/plugin-electron-0.3.41.tgz#6f736dfa5146bdf41fe0c452ab0b78e7f914fda1" + integrity sha512-E/rmKSbUa4rZKq02C+HD6WQDTS2CH6+Gqc6Z9p5wxQwbbJoMD/WVtWUvOFr1p2PSp0Nwpc4qWfOoQC6EmaugOg== + dependencies: + "@remixproject/engine" "0.3.41" + "@remixproject/plugin" "0.3.41" + "@remixproject/plugin-api" "0.3.41" + "@remixproject/plugin-utils" "0.3.41" + +"@remixproject/plugin-utils@0.3.38": + version "0.3.38" + resolved "https://registry.yarnpkg.com/@remixproject/plugin-utils/-/plugin-utils-0.3.38.tgz#402adbef700a9392fbeae7d536ba020b7cfbdfaa" + integrity sha512-DpbB+BFfWvZ/pKWlXY0Ms3mqp/ajWxBI+TUiJor2AkLtCSBS1+Uk7BWG++jNSqgjdvVKxxWa4kJygFwUPtUYXA== + dependencies: + tslib "2.0.1" + +"@remixproject/plugin-utils@0.3.41": + version "0.3.41" + resolved "https://registry.yarnpkg.com/@remixproject/plugin-utils/-/plugin-utils-0.3.41.tgz#6de4d016084cf54fbf710ed717c9c1efc0a990de" + integrity sha512-pyqewxfQwr35YkFoZItH5E9qiIZRlpwxLuGBCMXzo6fmPm2YybhpblLaefppsdbqY1yEVsqakQa6U6d6vJRSNQ== + dependencies: + tslib "2.0.1" + +"@remixproject/plugin@0.3.41": + version "0.3.41" + resolved "https://registry.yarnpkg.com/@remixproject/plugin/-/plugin-0.3.41.tgz#fc82d0afd08ba659d09ee7714fa91af92cdb8e72" + integrity sha512-GqBaxExtNGQHNHwPwx/2RKX7vinEBJe9KzxzkzR2BGuBZD963+il2WsMu+QYyHjTxJ8kHZF9exqUSYJd9jZ+Yw== + dependencies: + "@remixproject/plugin-api" "0.3.41" + "@remixproject/plugin-utils" "0.3.41" + events "3.2.0" + +"@scure/base@~1.1.0": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.3.tgz#8584115565228290a6c6c4961973e0903bb3df2f" + integrity sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q== + +"@scure/bip32@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.1.tgz#7248aea723667f98160f593d621c47e208ccbb10" + integrity sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A== + dependencies: + "@noble/curves" "~1.1.0" + "@noble/hashes" "~1.3.1" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a" + integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== + dependencies: + "@noble/hashes" "~1.3.0" + "@scure/base" "~1.1.0" + +"@sindresorhus/is@^4.0.0", "@sindresorhus/is@^4.6.0": + version "4.6.0" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@szmarczak/http-timer@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" + integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== + dependencies: + defer-to-connect "^2.0.1" + +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + +"@types/bn.js@^5.1.0", "@types/bn.js@^5.1.1": + version "5.1.3" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.3.tgz#0857f00da3bf888a26a44b4a477c7819b17dacc5" + integrity sha512-wT1B4iIO82ecXkdN6waCK8Ou7E71WU+mP1osDA5Q8c6Ur+ozU2vIKUIhSpUr6uE5L2YHocKS1Z2jG2fBC1YVeg== + dependencies: + "@types/node" "*" + +"@types/body-parser@*": + version "1.19.5" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" + integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/byline@^4.2.35": + version "4.2.35" + resolved "https://registry.npmjs.org/@types/byline/-/byline-4.2.35.tgz" + integrity sha512-YRfEGhvLQrA1/ixrJ95/vqin4J+hc0OIHH89rWGE2q0Tn9Jy6BhPZTiCLV1X39VJMOoq8UCUUFN+WD+gnmBjhw== + dependencies: + "@types/node" "*" + +"@types/cacheable-request@^6.0.1", "@types/cacheable-request@^6.0.2": + version "6.0.3" + resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" + +"@types/connect@*": + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== + dependencies: + "@types/node" "*" + +"@types/debug@^4.1.6": + version "4.1.8" + resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz" + integrity sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ== + dependencies: + "@types/ms" "*" + +"@types/express-serve-static-core@^4.17.33": + version "4.17.41" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz#5077defa630c2e8d28aa9ffc2c01c157c305bef6" + integrity sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@^4.17.21": + version "4.17.21" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" + integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/fs-extra@^9.0.11": + version "9.0.13" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45" + integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA== + dependencies: + "@types/node" "*" + +"@types/glob@^7.1.1": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/http-cache-semantics@*": + version "4.0.1" + resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz" + integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== + +"@types/http-errors@*": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" + integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== + +"@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + +"@types/mime@*": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.4.tgz#2198ac274de6017b44d941e00261d5bc6a0e0a45" + integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== + +"@types/mime@^1": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== + +"@types/minimatch@*": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== + +"@types/ms@*": + version "0.7.31" + resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz" + integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== + +"@types/node@*": + version "20.3.2" + resolved "https://registry.npmjs.org/@types/node/-/node-20.3.2.tgz" + integrity sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw== + +"@types/node@^12.12.6": + version "12.20.55" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" + integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== + +"@types/node@^18.11.18": + version "18.16.18" + resolved "https://registry.npmjs.org/@types/node/-/node-18.16.18.tgz" + integrity sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw== + +"@types/pbkdf2@^3.0.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.1.tgz#c290c1f0d3dc364af94c2c5ee92046a13b7f89fd" + integrity sha512-4HCoGwR3221nOc7G0Z/6KgTNGgaaFGkbGrtUJsB+zlKX2LBVjFHHIUkieMBgHHXgBH5Gq6dZHJKdBYdtlhBQvw== + dependencies: + "@types/node" "*" + +"@types/plist@^3.0.1": + version "3.0.2" + resolved "https://registry.npmjs.org/@types/plist/-/plist-3.0.2.tgz" + integrity sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw== + dependencies: + "@types/node" "*" + xmlbuilder ">=11.0.1" + +"@types/qs@*": + version "6.9.10" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.10.tgz#0af26845b5067e1c9a622658a51f60a3934d51e8" + integrity sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw== + +"@types/range-parser@*": + version "1.2.7" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== + +"@types/responselike@^1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz" + integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + dependencies: + "@types/node" "*" + +"@types/secp256k1@^4.0.1": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.5.tgz#14b1766b4fbc198b0af5599d9fd21c89056633ce" + integrity sha512-aIonTBMErtE3T9MxDvTZRzcrT/mCqpEZBw3CCY/i+oG9n57N/+7obBkhFgavUAIrX21bU0LHg1XRgtaLdelBhA== + dependencies: + "@types/node" "*" + +"@types/send@*": + version "0.17.4" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" + integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-static@*": + version "1.15.5" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.5.tgz#15e67500ec40789a1e8c9defc2d32a896f05b033" + integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== + dependencies: + "@types/http-errors" "*" + "@types/mime" "*" + "@types/node" "*" + +"@types/verror@^1.10.3": + version "1.10.6" + resolved "https://registry.npmjs.org/@types/verror/-/verror-1.10.6.tgz" + integrity sha512-NNm+gdePAX1VGvPcGZCDKQZKYSiAWigKhKaz5KF94hG6f2s8de9Ow5+7AbXoeKxL8gavZfk4UquSAygOF2duEQ== + +"@types/yargs-parser@*": + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== + +"@types/yargs@^17.0.1": + version "17.0.31" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.31.tgz#8fd0089803fd55d8a285895a18b88cb71a99683c" + integrity sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg== + dependencies: + "@types/yargs-parser" "*" + +"@types/yauzl@^2.9.1": + version "2.10.0" + resolved "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz" + integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== + dependencies: + "@types/node" "*" + +"@vscode/ripgrep@^1.15.6": + version "1.15.6" + resolved "https://registry.npmjs.org/@vscode/ripgrep/-/ripgrep-1.15.6.tgz" + integrity sha512-mCtfHqZ/g+75qDDeIPB9ST1xyJDaJornaSujuRKkB0SMZ6FMVtuKUdvvvOITR+DcKo5KOwUVuOUUpt75jOY+Yw== + dependencies: + https-proxy-agent "^7.0.2" + proxy-from-env "^1.1.0" + +"@xmldom/xmldom@^0.8.8": + version "0.8.10" + resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99" + integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw== + +abbrev@^1.0.0: + version "1.1.1" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abortcontroller-polyfill@^1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" + integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ== + +accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +add@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/add/-/add-2.0.6.tgz#248f0a9f6e5a528ef2295dbeec30532130ae2235" + integrity sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q== + +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== + +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agent-base@^7.0.2: + version "7.1.0" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz" + integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== + dependencies: + debug "^4.3.4" + +agentkeepalive@^4.2.1: + version "4.3.0" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz" + integrity sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg== + dependencies: + debug "^4.1.0" + depd "^2.0.0" + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-keywords@^3.4.1: + version "3.5.2" + resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.3: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +app-builder-bin@4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz" + integrity sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA== + +app-builder-lib@23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-23.6.0.tgz#03cade02838c077db99d86212d61c5fc1d6da1a8" + integrity sha512-dQYDuqm/rmy8GSCE6Xl/3ShJg6Ab4bZJMT8KaTKGzT436gl1DN4REP3FCWfXoh75qGTJ+u+WsdnnpO9Jl8nyMA== + dependencies: + "7zip-bin" "~5.1.1" + "@develar/schema-utils" "~2.6.5" + "@electron/universal" "1.2.1" + "@malept/flatpak-bundler" "^0.4.0" + async-exit-hook "^2.0.1" + bluebird-lst "^1.0.9" + builder-util "23.6.0" + builder-util-runtime "9.1.1" + chromium-pickle-js "^0.2.0" + debug "^4.3.4" + ejs "^3.1.7" + electron-osx-sign "^0.6.0" + electron-publish "23.6.0" + form-data "^4.0.0" + fs-extra "^10.1.0" + hosted-git-info "^4.1.0" + is-ci "^3.0.0" + isbinaryfile "^4.0.10" + js-yaml "^4.1.0" + lazy-val "^1.0.5" + minimatch "^3.1.2" + read-config-file "6.2.0" + sanitize-filename "^1.6.3" + semver "^7.3.7" + tar "^6.1.11" + temp-file "^3.4.0" + +"aproba@^1.0.3 || ^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array.prototype.flatmap@^1.2.4: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +arraybuffer.prototype.slice@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + +asar@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/asar/-/asar-3.2.0.tgz#e6edb5edd6f627ebef04db62f771c61bea9c1221" + integrity sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg== + dependencies: + chromium-pickle-js "^0.2.0" + commander "^5.0.0" + glob "^7.1.6" + minimatch "^3.0.4" + optionalDependencies: + "@types/glob" "^7.1.1" + +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-exit-hook@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz" + integrity sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async-lock@^1.1.0: + version "1.4.0" + resolved "https://registry.npmjs.org/async-lock/-/async-lock-1.4.0.tgz" + integrity sha512-coglx5yIWuetakm3/1dsX9hxCNox22h7+V80RQOu2XUUMidtArxKoZoOtHUPuR84SycKTXzgGzAUR5hJxujyJQ== + +async@^3.2.3: + version "3.2.4" + resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" + integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== + +axios@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.2.2.tgz#72681724c6e6a43a9fea860fc558127dbe32f9f1" + integrity sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +axios@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.1.tgz#76550d644bf0a2d469a01f9244db6753208397d7" + integrity sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2, base-x@^3.0.8: + version "3.0.9" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + dependencies: + safe-buffer "^5.0.1" + +base64-js@^1.3.1, base64-js@^1.5.1: + version "1.5.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + +bignumber.js@^9.0.0: + version "9.1.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" + integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bl@^4.0.3, bl@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +blakejs@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== + +bluebird-lst@^1.0.9: + version "1.0.9" + resolved "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz" + integrity sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw== + dependencies: + bluebird "^3.5.5" + +bluebird@^3.5.0, bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== + +bn.js@^4.11.6, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +body-parser@^1.16.0: + version "1.20.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + +boolean@^3.0.1: + version "3.2.0" + resolved "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz" + integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + 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: + version "3.0.2" + 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" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + +buffer-equal@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" + integrity sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ== + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-to-arraybuffer@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" + integrity sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +buffer@^5.0.5, buffer@^5.1.0, buffer@^5.5.0, buffer@^5.6.0: + version "5.7.1" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +bufferutil@^4.0.1: + version "4.0.8" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.8.tgz#1de6a71092d65d7766c4d8a522b261a6e787e8ea" + integrity sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw== + dependencies: + node-gyp-build "^4.3.0" + +builder-util-runtime@9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz#2da7b34e78a64ad14ccd070d6eed4662d893bd60" + integrity sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw== + dependencies: + debug "^4.3.4" + sax "^1.2.4" + +builder-util@23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-23.6.0.tgz#1880ec6da7da3fd6fa19b8bd71df7f39e8d17dd9" + integrity sha512-QiQHweYsh8o+U/KNCZFSvISRnvRctb8m/2rB2I1JdByzvNKxPeFLlHFRPQRXab6aYeXc18j9LpsDLJ3sGQmWTQ== + dependencies: + "7zip-bin" "~5.1.1" + "@types/debug" "^4.1.6" + "@types/fs-extra" "^9.0.11" + app-builder-bin "4.0.0" + bluebird-lst "^1.0.9" + builder-util-runtime "9.1.1" + chalk "^4.1.1" + cross-spawn "^7.0.3" + debug "^4.3.4" + fs-extra "^10.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-ci "^3.0.0" + js-yaml "^4.1.0" + source-map-support "^0.5.19" + stat-mode "^1.0.0" + temp-file "^3.4.0" + +byline@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz" + integrity sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacache@^17.0.0: + version "17.1.3" + resolved "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz" + integrity sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg== + dependencies: + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^10.2.2" + lru-cache "^7.7.1" + minipass "^5.0.0" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^4.0.0" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-lookup@^6.0.4: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz#0330a543471c61faa4e9035db583aad753b36385" + integrity sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww== + +cacheable-request@^7.0.2: + version "7.0.4" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz" + integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== + dependencies: + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +chromium-pickle-js@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz" + integrity sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw== + +ci-info@^3.2.0: + version "3.8.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + +cids@^0.7.1: + version "0.7.5" + resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" + integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== + dependencies: + buffer "^5.5.0" + class-is "^1.1.0" + multibase "~0.6.0" + multicodec "^1.0.0" + multihashes "~0.4.15" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +class-is@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" + integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== + +clean-git-ref@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/clean-git-ref/-/clean-git-ref-2.0.1.tgz" + integrity sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.5.0: + version "2.9.0" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz" + integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g== + +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +color-convert@^2.0.1: + version "2.0.1" + 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.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +colors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" + integrity sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw== + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + integrity sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A== + dependencies: + graceful-readlink ">= 1.0.0" + +commander@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + +compare-version@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz" + integrity sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-hash@^2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211" + integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== + dependencies: + cids "^0.7.1" + multicodec "^0.5.5" + multihashes "^0.4.15" + +content-type@~1.0.4, content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cors@^2.8.1: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +crc@^3.8.0: + version "3.8.0" + resolved "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz" + integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== + dependencies: + buffer "^5.1.0" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-env@^7.0.3: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz" + integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== + dependencies: + cross-spawn "^7.0.1" + +cross-fetch@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-4.0.0.tgz#f037aef1580bb3a1a35164ea2a848ba81b445983" + integrity sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g== + dependencies: + node-fetch "^2.6.12" + +cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + +debug@2.6.9, debug@^2.2.0, debug@^2.6.8: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decode-uri-component@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== + dependencies: + mimic-response "^1.0.0" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + +defer-to-connect@^2.0.0, defer-to-connect@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +define-properties@^1.1.3: + version "1.2.0" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +define-properties@^1.1.4, define-properties@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +depd@2.0.0, depd@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-libc@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" + integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +diff3@0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/diff3/-/diff3-0.0.3.tgz" + integrity sha512-iSq8ngPOt0K53A6eVr4d5Kn6GNrM2nQZtC740pzIriHtn4pOQ2lyzEXQMBeVcWERN0ye7fhBsk9PbLLQOnUx/g== + +dir-compare@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/dir-compare/-/dir-compare-2.4.0.tgz#785c41dc5f645b34343a4eafc50b79bac7f11631" + integrity sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA== + dependencies: + buffer-equal "1.0.0" + colors "1.0.3" + commander "2.9.0" + minimatch "3.0.4" + +dmg-builder@23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-23.6.0.tgz#d39d3871bce996f16c07d2cafe922d6ecbb2a948" + integrity sha512-jFZvY1JohyHarIAlTbfQOk+HnceGjjAdFjVn3n8xlDWKsYNqbO4muca6qXEZTfGXeQMG7TYim6CeS5XKSfSsGA== + dependencies: + app-builder-lib "23.6.0" + builder-util "23.6.0" + builder-util-runtime "9.1.1" + fs-extra "^10.0.0" + iconv-lite "^0.6.2" + js-yaml "^4.1.0" + optionalDependencies: + dmg-license "^1.0.11" + +dmg-license@^1.0.11: + version "1.0.11" + resolved "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz" + integrity sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q== + dependencies: + "@types/plist" "^3.0.1" + "@types/verror" "^1.10.3" + ajv "^6.10.0" + crc "^3.8.0" + iconv-corefoundation "^1.1.7" + plist "^3.0.4" + smart-buffer "^4.0.2" + verror "^1.10.0" + +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + +dotenv-expand@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz" + integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== + +dotenv@^9.0.2: + version "9.0.2" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz" + integrity sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +ejs@^3.1.7: + version "3.1.9" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" + integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== + dependencies: + jake "^10.8.5" + +electron-builder@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-23.6.0.tgz#c79050cbdce90ed96c5feb67c34e9e0a21b5331b" + integrity sha512-y8D4zO+HXGCNxFBV/JlyhFnoQ0Y0K7/sFH+XwIbj47pqaW8S6PGYQbjoObolKBR1ddQFPt4rwp4CnwMJrW3HAw== + dependencies: + "@types/yargs" "^17.0.1" + app-builder-lib "23.6.0" + builder-util "23.6.0" + builder-util-runtime "9.1.1" + chalk "^4.1.1" + dmg-builder "23.6.0" + fs-extra "^10.0.0" + is-ci "^3.0.0" + lazy-val "^1.0.5" + read-config-file "6.2.0" + simple-update-notifier "^1.0.7" + yargs "^17.5.1" + +electron-devtools-installer@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/electron-devtools-installer/-/electron-devtools-installer-3.2.0.tgz#acc48d24eb7033fe5af284a19667e73b78d406d0" + integrity sha512-t3UczsYugm4OAbqvdImMCImIMVdFzJAHgbwHpkl5jmfu1izVgUcP/mnrPqJIpEeCK1uZGpt+yHgWEN+9EwoYhQ== + dependencies: + rimraf "^3.0.2" + semver "^7.2.1" + tslib "^2.1.0" + unzip-crx-3 "^0.2.0" + +electron-osx-sign@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.6.0.tgz#9b69c191d471d9458ef5b1e4fdd52baa059f1bb8" + integrity sha512-+hiIEb2Xxk6eDKJ2FFlpofCnemCbjbT5jz+BKGpVBrRNT3kWTGs4DfNX6IzGwgi33hUcXF+kFs9JW+r6Wc1LRg== + dependencies: + bluebird "^3.5.0" + compare-version "^0.1.2" + debug "^2.6.8" + isbinaryfile "^3.0.2" + minimist "^1.2.0" + plist "^3.0.1" + +electron-publish@23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-23.6.0.tgz#ac9b469e0b07752eb89357dd660e5fb10b3d1ce9" + integrity sha512-jPj3y+eIZQJF/+t5SLvsI5eS4mazCbNYqatv5JihbqOstIM13k0d1Z3vAWntvtt13Itl61SO6seicWdioOU5dg== + dependencies: + "@types/fs-extra" "^9.0.11" + builder-util "23.6.0" + builder-util-runtime "9.1.1" + chalk "^4.1.1" + fs-extra "^10.0.0" + lazy-val "^1.0.5" + mime "^2.5.2" + +electron@^25.0.1: + version "25.9.5" + resolved "https://registry.yarnpkg.com/electron/-/electron-25.9.5.tgz#c030368ebe1b40580e781d89fa8ce7ef19202692" + integrity sha512-gM7GXUSd3JVRcYbBnNOtZeNnE5MCJjtZTT8QyIxJvpQ0Dh9dz3hTuEL62dOwnMFW/l47ACQ6es/8qi01P4QGZA== + dependencies: + "@electron/get" "^2.0.0" + "@types/node" "^18.11.18" + extract-zip "^2.0.1" + +elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +es-abstract@^1.22.1: + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== + dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.2" + available-typed-arrays "^1.0.5" + call-bind "^1.0.5" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.2" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.12" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.1" + safe-array-concat "^1.0.1" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.13" + +es-set-tostringtag@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== + dependencies: + get-intrinsic "^1.2.2" + has-tostringtag "^1.0.0" + hasown "^2.0.0" + +es-shim-unscopables@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es5-ext@^0.10.35, es5-ext@^0.10.50: + version "0.10.62" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" + integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== + dependencies: + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + next-tick "^1.1.0" + +es6-error@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + +es6-iterator@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-promise@^4.2.8: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-symbol@^3.1.1, es6-symbol@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eth-ens-namehash@2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" + integrity sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw== + dependencies: + idna-uts46-hx "^2.3.1" + js-sha3 "^0.5.7" + +eth-lib@0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" + integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + xhr-request-promise "^0.1.2" + +eth-lib@^0.1.26: + version "0.1.29" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.29.tgz#0c11f5060d42da9f931eab6199084734f4dbd1d9" + integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + nano-json-stream-parser "^0.1.2" + servify "^0.1.12" + ws "^3.0.0" + xhr-request-promise "^0.1.2" + +ethereum-bloom-filters@^1.0.6: + version "1.0.10" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" + integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== + dependencies: + js-sha3 "^0.8.0" + +ethereum-cryptography@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" + integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + dependencies: + "@types/pbkdf2" "^3.0.0" + "@types/secp256k1" "^4.0.1" + blakejs "^1.1.0" + browserify-aes "^1.2.0" + bs58check "^2.1.2" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz#18fa7108622e56481157a5cb7c01c0c6a672eb67" + integrity sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug== + dependencies: + "@noble/curves" "1.1.0" + "@noble/hashes" "1.3.1" + "@scure/bip32" "1.3.1" + "@scure/bip39" "1.2.1" + +ethereumjs-util@^7.1.5: + version "7.1.5" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" + integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + rlp "^2.2.4" + +ethers@^5.4.2: + version "5.7.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== + dependencies: + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/abstract-signer" "5.7.0" + "@ethersproject/address" "5.7.0" + "@ethersproject/base64" "5.7.0" + "@ethersproject/basex" "5.7.0" + "@ethersproject/bignumber" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/constants" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/hash" "5.7.0" + "@ethersproject/hdnode" "5.7.0" + "@ethersproject/json-wallets" "5.7.0" + "@ethersproject/keccak256" "5.7.0" + "@ethersproject/logger" "5.7.0" + "@ethersproject/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" + +ethjs-unit@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" + integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + +eventemitter3@4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== + +events@3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/events/-/events-3.2.0.tgz" + integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== + +evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +exponential-backoff@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz" + integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== + +express@^4.14.0, express@^4.18.2: + version "4.18.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.1" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +ext@^1.1.2: + version "1.7.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" + integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== + dependencies: + type "^2.7.2" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extract-zip@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +fill-range@^7.0.1: + version "7.0.1" + 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" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +follow-redirects@^1.15.0: + version "1.15.3" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" + integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + +form-data-encoder@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.1.tgz#ac80660e4f87ee0d3d3c3638b7da8278ddb8ec96" + integrity sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg== + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^10.0.0, fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^8.1.0: + version "8.1.0" + 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" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.0.0, fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-minipass@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz" + integrity sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g== + dependencies: + minipass "^5.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + 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.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.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== + dependencies: + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-intrinsic@^1.1.1: + version "1.2.1" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-proto "^1.0.1" + has-symbols "^1.0.3" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + +glob-parent@~5.1.2: + version "5.1.2" + 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@^10.2.2: + version "10.3.0" + resolved "https://registry.npmjs.org/glob/-/glob-10.3.0.tgz" + integrity sha512-AQ1/SB9HH0yCx1jXAT4vmCbTOPe5RQ+kCurjbel5xSCGhebumUv+GJZfa1rEqor3XIViqwSEmlkZCQD43RWrBg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.0.3" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2" + path-scurry "^1.7.0" + +glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-agent@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz" + integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q== + dependencies: + boolean "^3.0.1" + es6-error "^4.1.1" + matcher "^3.0.0" + roarr "^2.15.3" + semver "^7.3.2" + serialize-error "^7.0.1" + +global@~4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + +globalthis@^1.0.1, globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +got@12.1.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/got/-/got-12.1.0.tgz#099f3815305c682be4fd6b0ee0726d8e4c6b0af4" + integrity sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig== + dependencies: + "@sindresorhus/is" "^4.6.0" + "@szmarczak/http-timer" "^5.0.1" + "@types/cacheable-request" "^6.0.2" + "@types/responselike" "^1.0.0" + cacheable-lookup "^6.0.4" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + form-data-encoder "1.7.1" + get-stream "^6.0.1" + http2-wrapper "^2.1.10" + lowercase-keys "^3.0.0" + p-cancelable "^3.0.0" + responselike "^2.0.0" + +got@^11.7.0, got@^11.8.5: + version "11.8.6" + resolved "https://registry.npmjs.org/got/-/got-11.8.6.tgz" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6: + version "4.2.11" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + integrity sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + +hmac-drbg@^1.0.1: + version "1.0.1" + 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" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hosted-git-info@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-https@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" + integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== + +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +http2-wrapper@^2.1.10: + version "2.2.0" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.0.tgz#b80ad199d216b7d3680195077bd7b9060fa9d7f3" + integrity sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.2.0" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +https-proxy-agent@^7.0.2: + version "7.0.2" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz" + integrity sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA== + dependencies: + agent-base "^7.0.2" + debug "4" + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +iconv-corefoundation@^1.1.7: + version "1.1.7" + resolved "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz" + integrity sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ== + dependencies: + cli-truncate "^2.1.0" + node-addon-api "^1.6.3" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +idna-uts46-hx@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9" + integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== + dependencies: + punycode "2.1.0" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.1.4: + version "5.2.4" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== + +imurmurhash@^0.1.4: + version "0.1.4" + 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.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.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +internal-slot@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== + dependencies: + get-intrinsic "^1.2.2" + hasown "^2.0.0" + side-channel "^1.0.4" + +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-arguments@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + 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-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-ci@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz" + integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== + dependencies: + ci-info "^3.2.0" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + 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.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-function@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" + integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== + +is-generator-function@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" + integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.3, is-typed-array@^1.1.9: + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + dependencies: + which-typed-array "^1.1.11" + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isbinaryfile@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" + integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw== + dependencies: + buffer-alloc "^1.2.0" + +isbinaryfile@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" + integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isomorphic-git@^1.24.2: + version "1.24.2" + resolved "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.24.2.tgz" + integrity sha512-J3TU97JENWUnOgpVMwaRP9a3OQXJq/8fCIzA4yrJ7+ko1IPJwXCYeA69CeC8GtHeBVhcOQrbZGw6fpIpz54Vpw== + dependencies: + async-lock "^1.1.0" + clean-git-ref "^2.0.1" + crc-32 "^1.2.0" + diff3 "0.0.3" + ignore "^5.1.4" + minimisted "^2.0.0" + pako "^1.0.10" + pify "^4.0.1" + readable-stream "^3.4.0" + sha.js "^2.4.9" + simple-get "^4.0.1" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + +jackspeak@^2.0.3: + version "2.2.1" + resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz" + integrity sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jake@^10.8.5: + version "10.8.7" + resolved "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz" + integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + +js-sha3@0.8.0, js-sha3@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +js-sha3@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" + integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +json5@^2.2.0: + version "2.2.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +jszip@^3.1.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" + integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + setimmediate "^1.0.5" + +keccak@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" + integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + +keyv@^4.0.0: + version "4.5.2" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz" + integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== + dependencies: + json-buffer "3.0.1" + +lazy-val@^1.0.4, lazy-val@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz" + integrity sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q== + +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + +lodash@^4.17.15: + version "4.17.21" + 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.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lowercase-keys@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" + integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lru-cache@^7.7.1: + version "7.18.3" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + +lru-cache@^9.1.1: + version "9.1.2" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz" + integrity sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ== + +make-fetch-happen@^11.0.3: + version "11.1.1" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz" + integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== + dependencies: + agentkeepalive "^4.2.1" + cacache "^17.0.0" + http-cache-semantics "^4.1.1" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^5.0.0" + minipass-fetch "^3.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^10.0.0" + +matcher@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz" + integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng== + dependencies: + escape-string-regexp "^4.0.0" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micro-ftch@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" + integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.5.2: + version "2.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== + dependencies: + dom-walk "^0.1.0" + +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" + 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" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +minimatch@3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + 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.0.1: + version "5.1.6" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.1: + version "9.0.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.2.tgz" + integrity sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minimisted@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/minimisted/-/minimisted-2.0.1.tgz" + integrity sha512-1oPjfuLQa2caorJUM8HV8lGgWCc0qqAO1MNv/k05G4qslmsndV/5WdNZrqCiyqiz3wohia2Ij2B7w2Dr7/IyrA== + dependencies: + minimist "^1.2.5" + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^3.0.0: + version "3.0.3" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz" + integrity sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ== + dependencies: + minipass "^5.0.0" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^2.6.0, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minipass@^3.0.0: + version "3.3.6" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +"minipass@^5.0.0 || ^6.0.2": + version "6.0.2" + resolved "https://registry.npmjs.org/minipass/-/minipass-6.0.2.tgz" + integrity sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w== + +minizlib@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +minizlib@^2.1.1, minizlib@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp-promise@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" + integrity sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w== + dependencies: + mkdirp "*" + +mkdirp@*: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" + integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== + +mkdirp@^0.5.1, mkdirp@^0.5.5: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mock-fs@^4.1.0: + version "4.14.0" + resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" + integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.0.0: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multibase@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b" + integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multibase@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b" + integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multicodec@^0.5.5: + version "0.5.7" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd" + integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== + dependencies: + varint "^5.0.0" + +multicodec@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f" + integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== + dependencies: + buffer "^5.6.0" + varint "^5.0.0" + +multihashes@^0.4.15, multihashes@~0.4.15: + version "0.4.21" + resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5" + integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== + dependencies: + buffer "^5.5.0" + multibase "^0.7.0" + varint "^5.0.0" + +nan@^2.14.0: + version "2.17.0" + resolved "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz" + integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== + +nano-json-stream-parser@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" + integrity sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew== + +negotiator@0.6.3, negotiator@^0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== + +node-abi@^3.0.0: + version "3.45.0" + resolved "https://registry.npmjs.org/node-abi/-/node-abi-3.45.0.tgz" + integrity sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ== + dependencies: + semver "^7.3.5" + +node-addon-api@^1.6.3: + version "1.7.2" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz" + integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg== + +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + +node-api-version@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/node-api-version/-/node-api-version-0.1.4.tgz" + integrity sha512-KGXihXdUChwJAOHO53bv9/vXcLmdUsZ6jIptbvYvkpKfth+r7jw44JkVxQFA3kX5nQjzjmGu1uAu/xNNLNlI5g== + dependencies: + semver "^7.3.5" + +node-fetch@^2.6.0, node-fetch@^2.6.12: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.1.tgz#24b6d075e5e391b8d5539d98c7fc5c210cac8a3e" + integrity sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ== + +node-gyp@^9.0.0: + version "9.4.0" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz" + integrity sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg== + dependencies: + env-paths "^2.2.0" + exponential-backoff "^3.1.1" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^11.0.3" + nopt "^6.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +node-pty@^0.10.1: + version "0.10.1" + resolved "https://registry.npmjs.org/node-pty/-/node-pty-0.10.1.tgz" + integrity sha512-JTdtUS0Im/yRsWJSx7yiW9rtpfmxqxolrtnyKwPLI+6XqTAPW/O2MjS8FYL4I5TsMbH2lVgDb2VMjp+9LoQGNg== + dependencies: + nan "^2.14.0" + +nopt@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz" + integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== + dependencies: + abbrev "^1.0.0" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npmlog@^6.0.0: + version "6.0.2" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + +number-to-bn@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" + integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.13.1, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +oboe@2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" + integrity sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA== + dependencies: + http-https "^1.0.0" + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +ora@^5.1.0: + version "5.4.1" + resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-cancelable@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" + integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +pako@^1.0.10, pako@~1.0.2: + version "1.0.11" + resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parse-headers@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9" + integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-is-absolute@^1.0.0: + version "1.0.1" + 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.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-scurry@^1.7.0: + version "1.9.2" + resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz" + integrity sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg== + dependencies: + lru-cache "^9.1.1" + minipass "^5.0.0 || ^6.0.2" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +pbkdf2@^3.0.17: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +plist@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/plist/-/plist-3.1.0.tgz#797a516a93e62f5bde55e0b9cc9c967f860893c9" + integrity sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ== + dependencies: + "@xmldom/xmldom" "^0.8.8" + base64-js "^1.5.1" + xmlbuilder "^15.1.1" + +plist@^3.0.4: + version "3.0.6" + resolved "https://registry.npmjs.org/plist/-/plist-3.0.6.tgz" + integrity sha512-WiIVYyrp8TD4w8yCvyeIr+lkmrGRd5u0VbRnU+tP/aRLxP/YadJUYOMZJ/6hIa3oUyVCsycXvtNRgd5XBJIbiA== + dependencies: + base64-js "^1.5.1" + xmlbuilder "^15.1.1" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +progress@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +psl@^1.1.28: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + integrity sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA== + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== + +punycode@^2.1.0, punycode@^2.1.1: + version "2.3.0" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +qs@^6.11.2: + version "6.11.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== + dependencies: + side-channel "^1.0.4" + +qs@~6.5.2: + version "6.5.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== + +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +read-config-file@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-6.2.0.tgz#71536072330bcd62ba814f91458b12add9fc7ade" + integrity sha512-gx7Pgr5I56JtYz+WuqEbQHj/xWo+5Vwua2jhb1VwM4Wid5PqYmZ4i00ZB0YEGIfkVBsCv9UrjgyqCiQfS/Oosg== + dependencies: + dotenv "^9.0.2" + dotenv-expand "^5.1.0" + js-yaml "^4.1.0" + json5 "^2.2.0" + lazy-val "^1.0.4" + +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + +regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + set-function-name "^2.0.0" + +request@^2.79.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +resolve-alpn@^1.0.0, resolve-alpn@^1.2.0: + version "1.2.1" + resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rlp@^2.2.4: + version "2.2.7" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== + dependencies: + bn.js "^5.2.0" + +roarr@^2.15.3: + version "2.15.4" + resolved "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz" + integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A== + dependencies: + boolean "^3.0.1" + detect-node "^2.0.4" + globalthis "^1.0.1" + json-stringify-safe "^5.0.1" + semver-compare "^1.0.0" + sprintf-js "^1.1.2" + +safe-array-concat@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" + integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +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" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sanitize-filename@^1.6.3: + version "1.6.3" + resolved "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz" + integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== + dependencies: + truncate-utf8-bytes "^1.0.0" + +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +secp256k1@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" + integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== + dependencies: + elliptic "^6.5.4" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz" + integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== + +semver@^6.2.0: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.2.1, semver@^7.3.7, semver@^7.5.4: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.2, semver@^7.3.5: + version "7.5.3" + resolved "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== + dependencies: + lru-cache "^6.0.0" + +semver@~7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-error@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz" + integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== + dependencies: + type-fest "^0.13.1" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +servify@^0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/servify/-/servify-0.1.12.tgz#142ab7bee1f1d033b66d0707086085b17c06db95" + integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== + dependencies: + body-parser "^1.16.0" + cors "^2.8.1" + express "^4.14.0" + request "^2.79.0" + xhr "^2.3.3" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +set-function-name@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.0, sha.js@^2.4.8, sha.js@^2.4.9: + version "2.4.11" + resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^2.0.0: + version "2.0.0" + 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.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.2, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz" + integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^2.7.0: + version "2.8.2" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.2.tgz#5708fb0919d440657326cd5fe7d2599d07705019" + integrity sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw== + dependencies: + decompress-response "^3.3.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-get@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-update-notifier@^1.0.7: + version "1.1.0" + resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82" + integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== + dependencies: + semver "~7.0.0" + +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +smart-buffer@^4.0.2, smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz" + integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.6.2: + version "2.7.1" + resolved "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz" + integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + +source-map-support@^0.5.19: + version "0.5.21" + 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" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sprintf-js@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + +sshpk@^1.7.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^10.0.0: + version "10.0.4" + resolved "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz" + integrity sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ== + dependencies: + minipass "^5.0.0" + +stat-mode@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz" + integrity sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg== + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== + +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + 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" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +strip-hex-prefix@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== + dependencies: + is-hex-prefixed "1.0.0" + +sumchecker@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz" + integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg== + dependencies: + debug "^4.1.0" + +supports-color@^7.1.0: + version "7.2.0" + 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" + +swarm-js@^0.1.40: + version "0.1.42" + resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.42.tgz#497995c62df6696f6e22372f457120e43e727979" + integrity sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ== + dependencies: + bluebird "^3.5.0" + buffer "^5.0.5" + eth-lib "^0.1.26" + fs-extra "^4.0.2" + got "^11.8.5" + mime-types "^2.1.16" + mkdirp-promise "^5.0.1" + mock-fs "^4.1.0" + setimmediate "^1.0.5" + tar "^4.0.2" + xhr-request "^1.0.1" + +tar-stream@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar@^4.0.2: + version "4.4.19" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" + integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== + dependencies: + chownr "^1.1.4" + fs-minipass "^1.2.7" + minipass "^2.9.0" + minizlib "^1.3.3" + mkdirp "^0.5.5" + safe-buffer "^5.2.1" + yallist "^3.1.1" + +tar@^6.0.5, tar@^6.1.11, tar@^6.1.2: + version "6.1.15" + resolved "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz" + integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +temp-file@^3.4.0: + version "3.4.0" + resolved "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz" + integrity sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg== + dependencies: + async-exit-hook "^2.0.1" + fs-extra "^10.0.0" + +timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== + +tmp-promise@^3.0.2: + version "3.0.3" + resolved "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz" + integrity sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ== + dependencies: + tmp "^0.2.0" + +tmp@^0.2.0: + version "0.2.1" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +to-regex-range@^5.0.1: + version "5.0.1" + 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" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +truncate-utf8-bytes@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz" + integrity sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ== + dependencies: + utf8-byte-length "^1.0.1" + +tslib@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz" + integrity sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ== + +tslib@^2.1.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + +type-fest@^0.13.1: + version "0.13.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz" + integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" + integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== + +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +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" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typescript@^5.1.3: + version "5.1.3" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz" + integrity sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw== + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +unique-filename@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz" + integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== + dependencies: + unique-slug "^4.0.0" + +unique-slug@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz" + integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== + dependencies: + imurmurhash "^0.1.4" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +unzip-crx-3@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/unzip-crx-3/-/unzip-crx-3-0.2.0.tgz#d5324147b104a8aed9ae8639c95521f6f7cda292" + integrity sha512-0+JiUq/z7faJ6oifVB5nSwt589v1KCduqIJupNVDoWSXZtWDmjDGO3RAEOvwJ07w90aoXoP4enKsR7ecMrJtWQ== + dependencies: + jszip "^3.1.0" + mkdirp "^0.5.1" + yaku "^0.16.6" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-set-query@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" + integrity sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg== + +url@^0.11.0: + version "0.11.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.3.tgz#6f495f4b935de40ce4a0a52faee8954244f3d3ad" + integrity sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw== + dependencies: + punycode "^1.4.1" + qs "^6.11.2" + +utf-8-validate@^5.0.2: + version "5.0.10" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" + integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== + dependencies: + node-gyp-build "^4.3.0" + +utf8-byte-length@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz" + integrity sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA== + +utf8@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util@^0.12.5: + version "0.12.5" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + +valid-url@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" + integrity sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA== + +varint@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" + integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +verror@^1.10.0: + version "1.10.1" + resolved "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz" + integrity sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +web3-bzz@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.10.3.tgz#13942b37757eb850f3500a8e08bf605448b67566" + integrity sha512-XDIRsTwekdBXtFytMpHBuun4cK4x0ZMIDXSoo1UVYp+oMyZj07c7gf7tNQY5qZ/sN+CJIas4ilhN25VJcjSijQ== + dependencies: + "@types/node" "^12.12.6" + got "12.1.0" + swarm-js "^0.1.40" + +web3-core-helpers@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.10.3.tgz#f2db40ea57e888795e46f229b06113b60bcd671c" + integrity sha512-Yv7dQC3B9ipOc5sWm3VAz1ys70Izfzb8n9rSiQYIPjpqtJM+3V4EeK6ghzNR6CO2es0+Yu9CtCkw0h8gQhrTxA== + dependencies: + web3-eth-iban "1.10.3" + web3-utils "1.10.3" + +web3-core-method@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.10.3.tgz#63f16310ccab4eec8eca0a337d534565c2ba8d33" + integrity sha512-VZ/Dmml4NBmb0ep5PTSg9oqKoBtG0/YoMPei/bq/tUdlhB2dMB79sbeJPwx592uaV0Vpk7VltrrrBv5hTM1y4Q== + dependencies: + "@ethersproject/transactions" "^5.6.2" + web3-core-helpers "1.10.3" + web3-core-promievent "1.10.3" + web3-core-subscriptions "1.10.3" + web3-utils "1.10.3" + +web3-core-promievent@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.10.3.tgz#9765dd42ce6cf2dc0a08eaffee607b855644f290" + integrity sha512-HgjY+TkuLm5uTwUtaAfkTgRx/NzMxvVradCi02gy17NxDVdg/p6svBHcp037vcNpkuGeFznFJgULP+s2hdVgUQ== + dependencies: + eventemitter3 "4.0.4" + +web3-core-requestmanager@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.10.3.tgz#c34ca8e998a18d6ca3fa7f7a11d4391da401c987" + integrity sha512-VT9sKJfgM2yBOIxOXeXiDuFMP4pxzF6FT+y8KTLqhDFHkbG3XRe42Vm97mB/IvLQCJOmokEjl3ps8yP1kbggyw== + dependencies: + util "^0.12.5" + web3-core-helpers "1.10.3" + web3-providers-http "1.10.3" + web3-providers-ipc "1.10.3" + web3-providers-ws "1.10.3" + +web3-core-subscriptions@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.10.3.tgz#58768cd72a9313252ef05dc52c09536f009a9479" + integrity sha512-KW0Mc8sgn70WadZu7RjQ4H5sNDJ5Lx8JMI3BWos+f2rW0foegOCyWhRu33W1s6ntXnqeBUw5rRCXZRlA3z+HNA== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.10.3" + +web3-core@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.10.3.tgz#4aeb8f4b0cb5775d9fa4edf1127864743f1c3ae3" + integrity sha512-Vbk0/vUNZxJlz3RFjAhNNt7qTpX8yE3dn3uFxfX5OHbuon5u65YEOd3civ/aQNW745N0vGUlHFNxxmn+sG9DIw== + dependencies: + "@types/bn.js" "^5.1.1" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.10.3" + web3-core-method "1.10.3" + web3-core-requestmanager "1.10.3" + web3-utils "1.10.3" + +web3-eth-abi@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.10.3.tgz#7decfffa8fed26410f32cfefdc32d3e76f717ca2" + integrity sha512-O8EvV67uhq0OiCMekqYsDtb6FzfYzMXT7VMHowF8HV6qLZXCGTdB/NH4nJrEh2mFtEwVdS6AmLFJAQd2kVyoMQ== + dependencies: + "@ethersproject/abi" "^5.6.3" + web3-utils "1.10.3" + +web3-eth-accounts@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.10.3.tgz#9ecb816b81cd97333988bfcd0afaee5d13bbb198" + integrity sha512-8MipGgwusDVgn7NwKOmpeo3gxzzd+SmwcWeBdpXknuyDiZSQy9tXe+E9LeFGrmys/8mLLYP79n3jSbiTyv+6pQ== + dependencies: + "@ethereumjs/common" "2.6.5" + "@ethereumjs/tx" "3.5.2" + "@ethereumjs/util" "^8.1.0" + eth-lib "0.2.8" + scrypt-js "^3.0.1" + uuid "^9.0.0" + web3-core "1.10.3" + web3-core-helpers "1.10.3" + web3-core-method "1.10.3" + web3-utils "1.10.3" + +web3-eth-contract@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.10.3.tgz#8880468e2ba7d8a4791cf714f67d5e1ec1591275" + integrity sha512-Y2CW61dCCyY4IoUMD4JsEQWrILX4FJWDWC/Txx/pr3K/+fGsBGvS9kWQN5EsVXOp4g7HoFOfVh9Lf7BmVVSRmg== + dependencies: + "@types/bn.js" "^5.1.1" + web3-core "1.10.3" + web3-core-helpers "1.10.3" + web3-core-method "1.10.3" + web3-core-promievent "1.10.3" + web3-core-subscriptions "1.10.3" + web3-eth-abi "1.10.3" + web3-utils "1.10.3" + +web3-eth-ens@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.10.3.tgz#ae5b49bcb9823027e0b28aa6b1de58d726cbaafa" + integrity sha512-hR+odRDXGqKemw1GFniKBEXpjYwLgttTES+bc7BfTeoUyUZXbyDHe5ifC+h+vpzxh4oS0TnfcIoarK0Z9tFSiQ== + dependencies: + content-hash "^2.5.2" + eth-ens-namehash "2.0.8" + web3-core "1.10.3" + web3-core-helpers "1.10.3" + web3-core-promievent "1.10.3" + web3-eth-abi "1.10.3" + web3-eth-contract "1.10.3" + web3-utils "1.10.3" + +web3-eth-iban@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.10.3.tgz#91d458e5400195edc883a0d4383bf1cecd17240d" + integrity sha512-ZCfOjYKAjaX2TGI8uif5ah+J3BYFuo+47JOIV1RIz2l7kD9VfnxvRH5UiQDRyMALQC7KFd2hUqIEtHklapNyKA== + dependencies: + bn.js "^5.2.1" + web3-utils "1.10.3" + +web3-eth-personal@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.10.3.tgz#4e72008aa211327ccc3bfa7671c510e623368457" + integrity sha512-avrQ6yWdADIvuNQcFZXmGLCEzulQa76hUOuVywN7O3cklB4nFc/Gp3yTvD3bOAaE7DhjLQfhUTCzXL7WMxVTsw== + dependencies: + "@types/node" "^12.12.6" + web3-core "1.10.3" + web3-core-helpers "1.10.3" + web3-core-method "1.10.3" + web3-net "1.10.3" + web3-utils "1.10.3" + +web3-eth@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.10.3.tgz#b8c6f37f1aac52422583a5a9c29130983a3fb3b1" + integrity sha512-Uk1U2qGiif2mIG8iKu23/EQJ2ksB1BQXy3wF3RvFuyxt8Ft9OEpmGlO7wOtAyJdoKzD5vcul19bJpPcWSAYZhA== + dependencies: + web3-core "1.10.3" + web3-core-helpers "1.10.3" + web3-core-method "1.10.3" + web3-core-subscriptions "1.10.3" + web3-eth-abi "1.10.3" + web3-eth-accounts "1.10.3" + web3-eth-contract "1.10.3" + web3-eth-ens "1.10.3" + web3-eth-iban "1.10.3" + web3-eth-personal "1.10.3" + web3-net "1.10.3" + web3-utils "1.10.3" + +web3-net@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.10.3.tgz#9486c2fe51452cb958e11915db6f90bd6caa5482" + integrity sha512-IoSr33235qVoI1vtKssPUigJU9Fc/Ph0T9CgRi15sx+itysmvtlmXMNoyd6Xrgm9LuM4CIhxz7yDzH93B79IFg== + dependencies: + web3-core "1.10.3" + web3-core-method "1.10.3" + web3-utils "1.10.3" + +web3-providers-http@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.10.3.tgz#d8166ee89db82d37281ea9e15c5882a2d7928755" + integrity sha512-6dAgsHR3MxJ0Qyu3QLFlQEelTapVfWNTu5F45FYh8t7Y03T1/o+YAkVxsbY5AdmD+y5bXG/XPJ4q8tjL6MgZHw== + dependencies: + abortcontroller-polyfill "^1.7.5" + cross-fetch "^4.0.0" + es6-promise "^4.2.8" + web3-core-helpers "1.10.3" + +web3-providers-ipc@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.10.3.tgz#a7e015957fc037d8a87bd4b6ae3561c1b1ad1f46" + integrity sha512-vP5WIGT8FLnGRfswTxNs9rMfS1vCbMezj/zHbBe/zB9GauBRTYVrUo2H/hVrhLg8Ut7AbsKZ+tCJ4mAwpKi2hA== + dependencies: + oboe "2.1.5" + web3-core-helpers "1.10.3" + +web3-providers-ws@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.10.3.tgz#03c84958f9da251349cd26fd7a4ae567e3af6caa" + integrity sha512-/filBXRl48INxsh6AuCcsy4v5ndnTZ/p6bl67kmO9aK1wffv7CT++DrtclDtVMeDGCgB3van+hEf9xTAVXur7Q== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.10.3" + websocket "^1.0.32" + +web3-shh@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.10.3.tgz#ee44f760598a65a290d611c443838aac854ee858" + integrity sha512-cAZ60CPvs9azdwMSQ/PSUdyV4PEtaW5edAZhu3rCXf6XxQRliBboic+AvwUvB6j3eswY50VGa5FygfVmJ1JVng== + dependencies: + web3-core "1.10.3" + web3-core-method "1.10.3" + web3-core-subscriptions "1.10.3" + web3-net "1.10.3" + +web3-utils@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.3.tgz#f1db99c82549c7d9f8348f04ffe4e0188b449714" + integrity sha512-OqcUrEE16fDBbGoQtZXWdavsPzbGIDc5v3VrRTZ0XrIpefC/viZ1ZU9bGEemazyS0catk/3rkOOxpzTfY+XsyQ== + dependencies: + "@ethereumjs/util" "^8.1.0" + bn.js "^5.2.1" + ethereum-bloom-filters "^1.0.6" + ethereum-cryptography "^2.1.2" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + +web3@^1.5.1: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.10.3.tgz#5e80ac532dc432b09fde668d570b0ad4e6710897" + integrity sha512-DgUdOOqC/gTqW+VQl1EdPxrVRPB66xVNtuZ5KD4adVBtko87hkgM8BTZ0lZ8IbUfnQk6DyjcDujMiH3oszllAw== + dependencies: + web3-bzz "1.10.3" + web3-core "1.10.3" + web3-eth "1.10.3" + web3-eth-personal "1.10.3" + web3-net "1.10.3" + web3-shh "1.10.3" + web3-utils "1.10.3" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +websocket@^1.0.32: + version "1.0.34" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" + integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== + dependencies: + bufferutil "^4.0.1" + debug "^2.2.0" + es5-ext "^0.10.50" + typedarray-to-buffer "^3.1.5" + utf-8-validate "^5.0.2" + yaeti "^0.0.6" + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.11, which-typed-array@^1.1.13, which-typed-array@^1.1.2: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.4" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: + version "7.0.0" + 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" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +ws@^3.0.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +xhr-request-promise@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" + integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== + dependencies: + xhr-request "^1.1.0" + +xhr-request@^1.0.1, xhr-request@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed" + integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== + dependencies: + buffer-to-arraybuffer "^0.0.5" + object-assign "^4.1.1" + query-string "^5.0.1" + simple-get "^2.7.0" + timed-out "^4.0.1" + url-set-query "^1.0.0" + xhr "^2.0.4" + +xhr@^2.0.4, xhr@^2.3.3: + version "2.6.0" + resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" + integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== + dependencies: + global "~4.4.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" + +xmlbuilder@>=11.0.1, xmlbuilder@^15.1.1: + version "15.1.1" + resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz" + integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg== + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yaeti@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" + integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== + +yaku@^0.16.6: + version "0.16.7" + resolved "https://registry.yarnpkg.com/yaku/-/yaku-0.16.7.tgz#1d195c78aa9b5bf8479c895b9504fd4f0847984e" + integrity sha512-Syu3IB3rZvKvYk7yTiyl1bo/jiEFaaStrgv1V2TIJTqYPStSMQVO8EQjg/z+DRzLq/4LIIharNT3iH1hylEIRw== + +yallist@^3.0.0, yallist@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.0.1, yargs@^17.5.1: + version "17.7.2" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yarn@^1.22.21: + version "1.22.21" + resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.21.tgz#1959a18351b811cdeedbd484a8f86c3cc3bbaf72" + integrity sha512-ynXaJsADJ9JiZ84zU25XkPGOvVMmZ5b7tmTSpKURYwgELdjucAOydqIOrOfTxVYcNXe91xvLZwcRh68SR3liCg== + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" diff --git a/apps/solhint/src/main.tsx b/apps/solhint/src/main.tsx index b8ec0b96a0..af59bd3e02 100644 --- a/apps/solhint/src/main.tsx +++ b/apps/solhint/src/main.tsx @@ -1,10 +1,11 @@ import React from 'react' -import ReactDOM from 'react-dom' +import { createRoot } from 'react-dom/client'; import App from './app/App' -ReactDOM.render( - +const container = document.getElementById('root'); + +if (container) { + createRoot(container).render( - , - document.getElementById('root') -) + ); +} diff --git a/apps/solidity-compiler/src/app/compiler.ts b/apps/solidity-compiler/src/app/compiler.ts index 5dde37e77e..c7f09e2312 100644 --- a/apps/solidity-compiler/src/app/compiler.ts +++ b/apps/solidity-compiler/src/app/compiler.ts @@ -25,7 +25,7 @@ export class CompilerClientApi extends CompilerApiMixin(PluginClient) implements this.initCompilerApi() } - getCompilerParameters () { + getCompilerQueryParameters () { const params = { runs: localStorage.getItem('runs') || defaultCompilerParameters.runs, optimize: localStorage.getItem('optimize') === 'true', @@ -38,7 +38,7 @@ export class CompilerClientApi extends CompilerApiMixin(PluginClient) implements return params } - setCompilerParameters (params) { + setCompilerQueryParameters (params) { for (const key of Object.keys(params)) { localStorage.setItem(key, params[key]) } diff --git a/apps/solidity-compiler/src/main.tsx b/apps/solidity-compiler/src/main.tsx index 96d7e3743b..c3c11b8ae3 100644 --- a/apps/solidity-compiler/src/main.tsx +++ b/apps/solidity-compiler/src/main.tsx @@ -1,12 +1,13 @@ // eslint-disable-next-line no-use-before-define import React from 'react' -import ReactDOM from 'react-dom' +import { createRoot } from 'react-dom/client'; import App from './app/app' -ReactDOM.render( - +const container = document.getElementById('root'); + +if (container) { + createRoot(container).render( - , - document.getElementById('root') -) + ); +} diff --git a/apps/vyper/src/app/app.tsx b/apps/vyper/src/app/app.tsx index 4c6f143c85..ebcfdd3aac 100644 --- a/apps/vyper/src/app/app.tsx +++ b/apps/vyper/src/app/app.tsx @@ -26,7 +26,7 @@ interface OutputMap { [fileName: string]: any } -const App: React.FC = () => { +const App = () => { const [contract, setContract] = useState() const [output, setOutput] = useState({}) const [state, setState] = useState({ @@ -87,7 +87,7 @@ const App: React.FC = () => { Remote Compiler - + Local Compiler diff --git a/apps/vyper/src/main.tsx b/apps/vyper/src/main.tsx index 5f17c9ab24..374becdd57 100644 --- a/apps/vyper/src/main.tsx +++ b/apps/vyper/src/main.tsx @@ -1,11 +1,13 @@ -import {StrictMode} from 'react' +import React from 'react' import * as ReactDOM from 'react-dom' - +import { createRoot } from 'react-dom/client'; import App from './app/app' -ReactDOM.render( - +const container = document.getElementById('root'); + +if (container) { + createRoot(container).render( - , - document.getElementById('root') -) + ); +} + diff --git a/apps/walletconnect/src/main.tsx b/apps/walletconnect/src/main.tsx index 818cf01a94..aa05d11b2d 100644 --- a/apps/walletconnect/src/main.tsx +++ b/apps/walletconnect/src/main.tsx @@ -1,5 +1,9 @@ import React from 'react' -import ReactDOM from 'react-dom' +import { createRoot } from 'react-dom/client'; import App from './app/app' -ReactDOM.render(, document.getElementById('root')) +const container = document.getElementById('root'); + +if (container) { + createRoot(container).render(); +} \ No newline at end of file diff --git a/libs/remix-core-plugin/src/lib/gist-handler.ts b/libs/remix-core-plugin/src/lib/gist-handler.ts index 7c0ed92542..5a1e04d98e 100644 --- a/libs/remix-core-plugin/src/lib/gist-handler.ts +++ b/libs/remix-core-plugin/src/lib/gist-handler.ts @@ -1,6 +1,7 @@ /* global fetch */ 'use strict' import { Plugin } from '@remixproject/engine' +import isElectron from 'is-electron' interface StringByString { [key: string]: string; @@ -118,7 +119,7 @@ export class GistHandler extends Plugin { const path = element.replace(/\.\.\./g, '/') obj['/gist-' + gistId + '/' + path] = data.files[element] }) - this.call('fileManager', 'setBatchFiles', obj, 'workspace', true, async (errorSavingFiles: any) => { + this.call('fileManager', 'setBatchFiles', obj, isElectron()? 'electron':'workspace', true, async (errorSavingFiles: any) => { if (errorSavingFiles) { const modalContent = { id: 'gisthandler', diff --git a/libs/remix-lib/src/index.ts b/libs/remix-lib/src/index.ts index d3f28e470a..a2ff565543 100644 --- a/libs/remix-lib/src/index.ts +++ b/libs/remix-lib/src/index.ts @@ -17,9 +17,10 @@ import { TxRunnerVM } from './execution/txRunnerVM' import { TxRunnerWeb3 } from './execution/txRunnerWeb3' import * as txResultHelper from './helpers/txResultHelper' export { ConsoleLogs } from './helpers/hhconsoleSigs' -export { ICompilerApi, ConfigurationSettings } from './types/ICompilerApi' +export { ICompilerApi, ConfigurationSettings, iSolJsonBinData, iSolJsonBinDataBuild } from './types/ICompilerApi' export { QueryParams } from './query-params' export { VMexecutionResult } from './execution/txRunnerVM' +export { Registry } from './registry' const helpers = { ui: uiHelper, diff --git a/apps/remix-ide/src/app/state/registry.ts b/libs/remix-lib/src/registry.ts similarity index 90% rename from apps/remix-ide/src/app/state/registry.ts rename to libs/remix-lib/src/registry.ts index dc3655293f..a43d16b526 100644 --- a/apps/remix-ide/src/app/state/registry.ts +++ b/libs/remix-lib/src/registry.ts @@ -3,7 +3,7 @@ type registryEntry = { name: string } -export default class Registry { +export class Registry { private static instance: Registry; private state: any @@ -29,7 +29,7 @@ export default class Registry { return server } - public get (name: string) { + public get (name: string): registryEntry { const state = this.state[name] if (!state) return const server = state.server diff --git a/libs/remix-lib/src/types/ICompilerApi.ts b/libs/remix-lib/src/types/ICompilerApi.ts index 168107e660..da8dc3b694 100644 --- a/libs/remix-lib/src/types/ICompilerApi.ts +++ b/libs/remix-lib/src/types/ICompilerApi.ts @@ -11,8 +11,8 @@ export interface ICompilerApi { compileTabLogic: any configurationSettings: ConfigurationSettings - getCompilerParameters: () => ConfigurationSettings - setCompilerParameters: (ConfigurationSettings?) => void + getCompilerQueryParameters: () => ConfigurationSettings + setCompilerQueryParameters: (ConfigurationSettings?) => void getAppParameter: (value: string) => Promise setAppParameter: (name: string, value: string | boolean) => void @@ -46,6 +46,27 @@ export interface ICompilerApi { compileWithTruffle: (configPath: string) => Promise statusChanged: (data: { key: string, title?: string, type?: string }) => void, emit?: (key: string, ...payload: any) => void + + setSolJsonBinData: (binData: iSolJsonBinData) => void + solJsonBinData: iSolJsonBinData +} + +export interface iSolJsonBinDataBuild { + path: string, + version: string, + build: string, + prerelease: string, + longVersion: string, + binURL: string, + wasmURL: string, + isDownloaded: boolean +} +export interface iSolJsonBinData { + baseURLWasm: string, + baseURLBin: string, + wasmList: iSolJsonBinDataBuild[], + binList: iSolJsonBinDataBuild[], + selectorList: iSolJsonBinDataBuild[] } export type terminalLog = { diff --git a/libs/remix-simulator/src/vm-context.ts b/libs/remix-simulator/src/vm-context.ts index 4cd25f07f9..e8c51e3dc2 100644 --- a/libs/remix-simulator/src/vm-context.ts +++ b/libs/remix-simulator/src/vm-context.ts @@ -225,18 +225,32 @@ class CustomEthersStateManager extends StateManagerCommonStorageDump { * @private */ async getAccountFromProvider(address: Address): Promise { - const accountData = await this.provider.send('eth_getProof', [ - address.toString(), - [], - this.blockTag, - ]) - const codeHash = accountData.codeHash === '0x0000000000000000000000000000000000000000000000000000000000000000' ? '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470' : accountData.codeHash - const account = Account.fromAccountData({ - balance: BigInt(accountData.balance), - nonce: BigInt(accountData.nonce), - codeHash: toBuffer(codeHash) - // storageRoot: toBuffer([]), // we have to remove this in order to force the creation of the Trie in the local state. - }) + let accountData + try { + accountData = await this.provider.send('eth_getProof', [ + address.toString(), + [], + this.blockTag, + ]) + } catch (e) { + console.log(e) + } + let account + if (!accountData) { + account = Account.fromAccountData({ + balance: BigInt(0), + nonce: BigInt(0), + codeHash: toBuffer('0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470') + }) + } else { + const codeHash = accountData.codeHash === '0x0000000000000000000000000000000000000000000000000000000000000000' ? '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470' : accountData.codeHash + account = Account.fromAccountData({ + balance: BigInt(accountData.balance), + nonce: BigInt(accountData.nonce), + codeHash: toBuffer(codeHash) + // storageRoot: toBuffer([]), // we have to remove this in order to force the creation of the Trie in the local state. + }) + } return account } } diff --git a/libs/remix-solidity/src/compiler/compiler.ts b/libs/remix-solidity/src/compiler/compiler.ts index a99154c08a..fd5f5be51e 100644 --- a/libs/remix-solidity/src/compiler/compiler.ts +++ b/libs/remix-solidity/src/compiler/compiler.ts @@ -50,7 +50,6 @@ export class Compiler { if (success && this.state.compilationStartTime) { this.event.trigger('compilationDuration', [(new Date().getTime()) - this.state.compilationStartTime]) } - this.state.compilationStartTime = null }) this.event.register('compilationStarted', () => { @@ -83,7 +82,7 @@ export class Compiler { */ internalCompile(files: Source, missingInputs?: string[], timeStamp?: number): void { - if(timeStamp != this.state.compilationStartTime && this.state.compilerRetriggerMode == CompilerRetriggerMode.retrigger ) { + if(timeStamp < this.state.compilationStartTime && this.state.compilerRetriggerMode == CompilerRetriggerMode.retrigger ) { return } this.gatherImports(files, missingInputs, (error, input) => { @@ -294,7 +293,7 @@ export class Compiler { this.state.worker.addEventListener('message', (msg: Record<'data', MessageFromWorker>) => { const data: MessageFromWorker = msg.data - if (this.state.compilerRetriggerMode == CompilerRetriggerMode.retrigger && data.timestamp !== this.state.compilationStartTime) { + if (this.state.compilerRetriggerMode == CompilerRetriggerMode.retrigger && data.timestamp < this.state.compilationStartTime) { // drop message from previous compilation return } diff --git a/libs/remix-ui/app/src/index.ts b/libs/remix-ui/app/src/index.ts index 2bf8054edb..e686172a78 100644 --- a/libs/remix-ui/app/src/index.ts +++ b/libs/remix-ui/app/src/index.ts @@ -1,5 +1,5 @@ export { default as RemixApp } from './lib/remix-app/remix-app' -export { dispatchModalContext, dispatchModalInterface, AppContext } from './lib/remix-app/context/context' +export { dispatchModalContext, dispatchModalInterface, AppContext, appProviderContextType, appPlatformTypes, platformContext, onLineContext } from './lib/remix-app/context/context' export { ModalProvider, useDialogDispatchers } from './lib/remix-app/context/provider' export { AppModal } from './lib/remix-app/interface/index' export { AlertModal } from './lib/remix-app/interface/index' diff --git a/libs/remix-ui/app/src/lib/remix-app/context/context.tsx b/libs/remix-ui/app/src/lib/remix-app/context/context.tsx index 1dae1787f1..a3cc4b7c9e 100644 --- a/libs/remix-ui/app/src/lib/remix-app/context/context.tsx +++ b/libs/remix-ui/app/src/lib/remix-app/context/context.tsx @@ -2,7 +2,22 @@ import React from 'react' import {AlertModal, AppModal} from '../interface' import {ModalInitialState} from '../state/modals' -export const AppContext = React.createContext(null) +export type appProviderContextType = { + settings: any, + showMatamo: boolean, + showEnter: boolean, + appManager: any + modal: any +} + +export enum appPlatformTypes { + web = 'web', + desktop = 'desktop' +} + +export const AppContext = React.createContext(null) +export const onLineContext = React.createContext(null) +export const platformContext = React.createContext(null) export interface dispatchModalInterface { modal: (data: AppModal) => void diff --git a/libs/remix-ui/app/src/lib/remix-app/context/provider.tsx b/libs/remix-ui/app/src/lib/remix-app/context/provider.tsx index c267e50e7c..0732e2cb40 100644 --- a/libs/remix-ui/app/src/lib/remix-app/context/provider.tsx +++ b/libs/remix-ui/app/src/lib/remix-app/context/provider.tsx @@ -4,7 +4,7 @@ import {AlertModal, AppModal} from '../interface' import {modalReducer} from '../reducer/modals' import {ModalInitialState} from '../state/modals' import {ModalTypes} from '../types' -import {AppContext, dispatchModalContext, modalContext} from './context' +import {AppContext, dispatchModalContext, modalContext, platformContext, onLineContext} from './context' export const ModalProvider = ({children = [], reducer = modalReducer, initialState = ModalInitialState} = {}) => { const [{modals, toasters, focusModal, focusToaster}, dispatch] = useReducer(reducer, initialState) @@ -80,10 +80,12 @@ export const ModalProvider = ({children = [], reducer = modalReducer, initialSta ) } -export const AppProvider = ({children = [], value = {}} = {}) => { +export const AppProvider = ({children = [], value = {}} = null) => { return ( - {children} + + {children} + ) } diff --git a/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx b/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx index d646f75e49..864819c62b 100644 --- a/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx +++ b/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx @@ -1,17 +1,17 @@ -import React, {useEffect, useRef, useState} from 'react' +import React, { useEffect, useRef, useState } from 'react' import './style/remix-app.css' -import {RemixUIMainPanel} from '@remix-ui/panel' +import { RemixUIMainPanel } from '@remix-ui/panel' import MatomoDialog from './components/modals/matomo' import EnterDialog from './components/modals/enter' import OriginWarning from './components/modals/origin-warning' import DragBar from './components/dragbar/dragbar' -import {AppProvider} from './context/provider' +import { AppProvider } from './context/provider' import AppDialogs from './components/modals/dialogs' import DialogViewPlugin from './components/modals/dialogViewPlugin' -import {AppContext} from './context/context' -import {IntlProvider, FormattedMessage} from 'react-intl' -import {CustomTooltip} from '@remix-ui/helper' -import {UsageTypes} from './types' +import { appProviderContextType, onLineContext, platformContext } from './context/context' +import { FormattedMessage, IntlProvider } from 'react-intl' +import { CustomTooltip } from '@remix-ui/helper' +import { UsageTypes } from './types' declare global { interface Window { @@ -29,7 +29,8 @@ const RemixApp = (props: IRemixAppUi) => { const [hideSidePanel, setHideSidePanel] = useState(false) const [maximiseTrigger, setMaximiseTrigger] = useState(0) const [resetTrigger, setResetTrigger] = useState(0) - const [locale, setLocale] = useState<{code: string; messages: any}>({ + const [online, setOnline] = useState(true) + const [locale, setLocale] = useState<{ code: string; messages: any }>({ code: 'en', messages: {} }) @@ -59,7 +60,7 @@ const RemixApp = (props: IRemixAppUi) => { if (!hadUsageTypeAsked && props.app.matomoCurrentSetting) { setShowEnterDialog(true) } - } + } }, []) function setListeners() { @@ -93,14 +94,18 @@ const RemixApp = (props: IRemixAppUi) => { props.app.localeModule.events.on('localeChanged', (nextLocale) => { setLocale(nextLocale) }) + + setInterval(() => { + setOnline(window.navigator.onLine) + }, 1000) } - const value = { + const value: appProviderContextType = { settings: props.app.settings, showMatamo: props.app.showMatamo, appManager: props.app.appManager, - modal: props.app.notification, - layout: props.app.layout + showEnter: props.app.showEnter, + modal: props.app.notification } const handleUserChosenType = async (type) => { @@ -142,41 +147,45 @@ const RemixApp = (props: IRemixAppUi) => { return ( //@ts-ignore - - - setShowEnterDialog(true)}> - {showEnterDialog && handleUserChosenType(type)}>} -
-
- {props.app.menuicons.render()} -
-
- {props.app.sidePanel.render()} -
- -
- - }> -
-
-
-
-
{props.app.hiddenPanel.render()}
- - -
+ + + + + setShowEnterDialog(true)}> + {showEnterDialog && handleUserChosenType(type)}>} +
+
+ {props.app.menuicons.render()} +
+
+ {props.app.sidePanel.render()} +
+ +
+ + }> +
+
+
+
+
{props.app.hiddenPanel.render()}
+ + +
+
+
) } diff --git a/libs/remix-ui/checkbox/src/lib/remix-ui-checkbox.tsx b/libs/remix-ui/checkbox/src/lib/remix-ui-checkbox.tsx index 1722ffe42e..5c11d96b0f 100644 --- a/libs/remix-ui/checkbox/src/lib/remix-ui-checkbox.tsx +++ b/libs/remix-ui/checkbox/src/lib/remix-ui-checkbox.tsx @@ -1,7 +1,7 @@ import {CustomTooltip} from '@remix-ui/helper' import React, {CSSProperties} from 'react' //eslint-disable-line import './remix-ui-checkbox.css' -type Placement = import('react-overlays/usePopper').Placement +import {Placement} from 'react-bootstrap/esm/Overlay' /* eslint-disable-next-line */ export interface RemixUiCheckboxProps { diff --git a/libs/remix-ui/editor/src/lib/actions/editor.ts b/libs/remix-ui/editor/src/lib/actions/editor.ts index d71d731292..f6d82dc757 100644 --- a/libs/remix-ui/editor/src/lib/actions/editor.ts +++ b/libs/remix-ui/editor/src/lib/actions/editor.ts @@ -85,7 +85,11 @@ export const reducerActions = (models = initialState, action: Action) => { case 'SET_FONTSIZE': { if (!editor) return models const size = action.payload.size - editor.updateOptions({ fontSize: size }) + if (size === 1) { + editor.trigger('keyboard', 'editor.action.fontZoomIn', {}); + } else{ + editor.trigger('keyboard', 'editor.action.fontZoomOut', {}); + } return models } case 'SET_WORDWRAP': { diff --git a/libs/remix-ui/editor/src/lib/remix-ui-editor.tsx b/libs/remix-ui/editor/src/lib/remix-ui-editor.tsx index f53567cb79..a93d1bb73b 100644 --- a/libs/remix-ui/editor/src/lib/remix-ui-editor.tsx +++ b/libs/remix-ui/editor/src/lib/remix-ui-editor.tsx @@ -645,14 +645,6 @@ export const EditorUI = (props: EditorUIProps) => { } }) - // zoomin zoomout - editor.addCommand(monacoRef.current.KeyMod.CtrlCmd | (monacoRef.current.KeyCode as any).US_EQUAL, () => { - editor.updateOptions({fontSize: editor.getOption(51) + 1}) - }) - editor.addCommand(monacoRef.current.KeyMod.CtrlCmd | (monacoRef.current.KeyCode as any).US_MINUS, () => { - editor.updateOptions({fontSize: editor.getOption(51) - 1}) - }) - // add context menu items const zoominAction = { id: 'zoomIn', @@ -664,7 +656,7 @@ export const EditorUI = (props: EditorUIProps) => { monacoRef.current.KeyMod.CtrlCmd | monacoRef.current.KeyCode.Equal, ], run: () => { - editor.updateOptions({fontSize: editor.getOption(51) + 1}) + editor.trigger('keyboard', 'editor.action.fontZoomIn', {}); } } const zoomOutAction = { @@ -677,7 +669,7 @@ export const EditorUI = (props: EditorUIProps) => { monacoRef.current.KeyMod.CtrlCmd | monacoRef.current.KeyCode.Minus, ], run: () => { - editor.updateOptions({fontSize: editor.getOption(51) - 1}) + editor.trigger('keyboard', 'editor.action.fontZoomOut', {}); } } const formatAction = { diff --git a/libs/remix-ui/helper/src/lib/components/custom-tooltip.tsx b/libs/remix-ui/helper/src/lib/components/custom-tooltip.tsx index 885c280b82..b199c1d8a9 100644 --- a/libs/remix-ui/helper/src/lib/components/custom-tooltip.tsx +++ b/libs/remix-ui/helper/src/lib/components/custom-tooltip.tsx @@ -1,7 +1,7 @@ import { use } from 'chai' import React, { useEffect } from 'react' import { Fragment } from 'react' -import { OverlayTrigger, Popover } from 'react-bootstrap' +import { OverlayTrigger, Popover, Tooltip } from 'react-bootstrap' import { CustomTooltipType } from '../../types/customtooltip' export function CustomTooltip({ children, placement, tooltipId, tooltipClasses, tooltipText, tooltipTextClasses, delay, hide }: CustomTooltipType) { @@ -18,7 +18,6 @@ export function CustomTooltip({ children, placement, tooltipId, tooltipClasses, {tooltipText} : tooltipText} - } - delay={delay} - > + }> {children} ) : ( - {children} + <>{children} )) ) diff --git a/libs/remix-ui/helper/src/lib/remix-ui-helper.ts b/libs/remix-ui/helper/src/lib/remix-ui-helper.ts index 73ea0efcee..cac2138f6b 100644 --- a/libs/remix-ui/helper/src/lib/remix-ui-helper.ts +++ b/libs/remix-ui/helper/src/lib/remix-ui-helper.ts @@ -73,15 +73,15 @@ export const getPathIcon = (path: string) => { return path.endsWith('.txt') ? 'far fa-file-alt' : path.endsWith('.md') ? 'fab fa-markdown' : path.endsWith('.sol') - ? 'fak fa-solidity-mono' : path.endsWith('.js') + ? 'fa-kit fa-solidity-mono' : path.endsWith('.js') ? 'fab fa-js' : path.endsWith('.json') ? 'small fas fa-brackets-curly' : path.endsWith('.vy') - ? 'small fak fa-vyper2' : path.endsWith('.lex') - ? 'fak fa-lexon' : path.endsWith('ts') - ? 'small fak fa-ts-logo' : path.endsWith('.tsc') + ? 'small fa-kit fa-vyper2' : path.endsWith('.lex') + ? 'fa-kit fa-lexon' : path.endsWith('ts') + ? 'small fa-kit fa-ts-logo' : path.endsWith('.tsc') ? 'fad fa-brackets-curly' : path.endsWith('.cairo') - ? 'small fak fa-cairo' : path.endsWith('.circom') - ? 'fak fa-circom' : 'far fa-file' + ? 'small fa-kit fa-cairo' : path.endsWith('.circom') + ? 'fa-kit fa-circom' : 'far fa-file' } export const isNumeric = (value) => { diff --git a/libs/remix-ui/home-tab/src/lib/components/homeTabFile.tsx b/libs/remix-ui/home-tab/src/lib/components/homeTabFile.tsx index 422405dc9a..7590fcee6b 100644 --- a/libs/remix-ui/home-tab/src/lib/components/homeTabFile.tsx +++ b/libs/remix-ui/home-tab/src/lib/components/homeTabFile.tsx @@ -82,8 +82,11 @@ function HomeTabFile({ plugin }: HomeTabFileProps) { deleteSavedWorkspace(deletedName) }) return () => { - plugin.off('filePanel', 'setWorkspace') - plugin.off('filePanel', 'workspaceDeleted') + try { + plugin.off('filePanel', 'setWorkspace') + plugin.off('filePanel', 'workspaceDeleted') + } catch (e) { + } } }, [plugin]) diff --git a/libs/remix-ui/home-tab/src/lib/components/homeTabFileElectron.tsx b/libs/remix-ui/home-tab/src/lib/components/homeTabFileElectron.tsx new file mode 100644 index 0000000000..1f67cfaff5 --- /dev/null +++ b/libs/remix-ui/home-tab/src/lib/components/homeTabFileElectron.tsx @@ -0,0 +1,41 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ +import React, { useState, useRef, useReducer } from 'react' +import { FormattedMessage } from 'react-intl' +import { ModalDialog } from '@remix-ui/modal-dialog' // eslint-disable-line +import { Toaster } from '@remix-ui/toaster' // eslint-disable-line +const _paq = window._paq = window._paq || [] // eslint-disable-line +import { CustomTooltip } from '@remix-ui/helper'; + +interface HomeTabFileProps { + plugin: any +} + +export const HomeTabFileElectron = ({ plugin }: HomeTabFileProps) => { + + const loadTemplate = async () => { + plugin.call('filePanel', 'loadTemplate') + } + + const clone = async () => { + plugin.call('filePanel', 'clone') + } + + const importFromGist = () => { + _paq.push(['trackEvent', 'hometab', 'filesSection', 'importFromGist']) + plugin.call('gistHandler', 'load', '') + plugin.verticalIcons.select('filePanel') + } + + return ( +
+ + +
+ + + + +
+
+ ) +} \ No newline at end of file diff --git a/libs/remix-ui/home-tab/src/lib/components/homeTabGetStarted.tsx b/libs/remix-ui/home-tab/src/lib/components/homeTabGetStarted.tsx index 2a09db4c4f..19fded98f9 100644 --- a/libs/remix-ui/home-tab/src/lib/components/homeTabGetStarted.tsx +++ b/libs/remix-ui/home-tab/src/lib/components/homeTabGetStarted.tsx @@ -7,6 +7,9 @@ import Carousel from 'react-multi-carousel' import WorkspaceTemplate from './workspaceTemplate' import 'react-multi-carousel/lib/styles.css' import CustomNavButtons from './customNavButtons' +import { appPlatformTypes, platformContext } from '@remix-ui/app' + + declare global { interface Window { _paq: any @@ -18,6 +21,7 @@ interface HomeTabGetStartedProps { } function HomeTabGetStarted({plugin}: HomeTabGetStartedProps) { + const platform = useContext(platformContext) const themeFilter = useContext(ThemeContext) const carouselRef = useRef({}) const carouselRefDiv = useRef(null) @@ -58,6 +62,12 @@ function HomeTabGetStarted({plugin}: HomeTabGetStartedProps) { } const createWorkspace = async (templateName) => { + + if(platform === appPlatformTypes.desktop){ + await plugin.call('remix-templates', 'loadTemplateInNewWindow', templateName) + return + } + let templateDisplayName = TEMPLATE_NAMES[templateName] const metadata = TEMPLATE_METADATA[templateName] if (metadata) { diff --git a/libs/remix-ui/home-tab/src/lib/remix-ui-home-tab.tsx b/libs/remix-ui/home-tab/src/lib/remix-ui-home-tab.tsx index ef636136e2..0198779612 100644 --- a/libs/remix-ui/home-tab/src/lib/remix-ui-home-tab.tsx +++ b/libs/remix-ui/home-tab/src/lib/remix-ui-home-tab.tsx @@ -1,4 +1,4 @@ -import React, {useState, useEffect} from 'react' // eslint-disable-line +import React, {useState, useEffect, useContext} from 'react' // eslint-disable-line import './remix-ui-home-tab.css' import {ThemeContext, themes} from './themeContext' @@ -9,8 +9,12 @@ import HomeTabScamAlert from './components/homeTabScamAlert' import HomeTabGetStarted from './components/homeTabGetStarted' import HomeTabFeatured from './components/homeTabFeatured' import HomeTabFeaturedPlugins from './components/homeTabFeaturedPlugins' +import { appPlatformTypes, platformContext } from '@remix-ui/app' +import { HomeTabFileElectron } from './components/homeTabFileElectron' import { LanguageOptions } from './components/homeTablangOptions' + + declare global { interface Window { _paq: any @@ -22,6 +26,7 @@ export interface RemixUiHomeTabProps { } export const RemixUiHomeTab = (props: RemixUiHomeTabProps) => { + const platform = useContext(platformContext) const {plugin} = props const [state, setState] = useState<{ @@ -57,7 +62,9 @@ export const RemixUiHomeTab = (props: RemixUiHomeTabProps) => {
- + {!(platform === appPlatformTypes.desktop) ? + : + }
diff --git a/libs/remix-ui/panel/src/lib/dragbar/dragbar.tsx b/libs/remix-ui/panel/src/lib/dragbar/dragbar.tsx index f02c6aae9c..49f6a63c3c 100644 --- a/libs/remix-ui/panel/src/lib/dragbar/dragbar.tsx +++ b/libs/remix-ui/panel/src/lib/dragbar/dragbar.tsx @@ -8,6 +8,7 @@ interface IRemixDragBarUi { setHideStatus: (hide: boolean) => void hidden: boolean minHeight?: number + onResize: (height: number) => void } const DragBar = (props: IRemixDragBarUi) => { @@ -18,13 +19,14 @@ const DragBar = (props: IRemixDragBarUi) => { function stopDrag(e: MouseEvent, data: any) { const h = window.innerHeight - data.y props.refObject.current.setAttribute('style', `height: ${h}px;`) - setDragBarPosY(window.innerHeight - props.refObject.current.offsetHeight) + setDragBarPosY(props.refObject.current.offsetTop) + props.onResize(h) setDragState(false) props.setHideStatus(false) } const handleResize = () => { if (!props.refObject.current) return - setDragBarPosY(window.innerHeight - props.refObject.current.offsetHeight) + setDragBarPosY(props.refObject.current.offsetTop) } useEffect(() => { diff --git a/libs/remix-ui/panel/src/lib/main/main-panel.tsx b/libs/remix-ui/panel/src/lib/main/main-panel.tsx index 30dafed2be..5117e7e78b 100644 --- a/libs/remix-ui/panel/src/lib/main/main-panel.tsx +++ b/libs/remix-ui/panel/src/lib/main/main-panel.tsx @@ -3,14 +3,16 @@ import React, {useContext, useEffect, useRef, useState} from 'react' // eslint-d import DragBar from '../dragbar/dragbar' import RemixUIPanelPlugin from '../plugins/panel-plugin' import {PluginRecord} from '../types' +import { appPlatformTypes, platformContext } from '@remix-ui/app' import './main-panel.css' export type RemixUIMainPanelProps = { - Context: React.Context + layout: any } const RemixUIMainPanel = (props: RemixUIMainPanelProps) => { - const appContext = useContext(props.Context) + const platform = useContext(platformContext) + const {layout} = props const [plugins, setPlugins] = useState([]) const editorRef = useRef(null) const mainPanelRef = useRef(null) @@ -20,14 +22,14 @@ const RemixUIMainPanel = (props: RemixUIMainPanelProps) => { const refs = [tabsRef, editorRef, mainPanelRef, terminalRef] const renderPanels = () => { - if (appContext) { + if (layout.panels) { const pluginPanels: PluginRecord[] = [] - Object.values(appContext.layout.panels).map((panel: any) => { + Object.values(layout.panels).map((panel: any) => { pluginPanels.push({ profile: panel.plugin.profile, active: panel.active, view: panel.plugin.profile.name === 'tabs' ? panel.plugin.renderTabsbar() : panel.plugin.render(), - class: panel.plugin.profile.name + '-wrap ' + (panel.minimized ? 'minimized' : ''), + class: panel.plugin.profile.name + '-wrap ' + (panel.minimized ? 'minimized ' : ' ') + ((platform === appPlatformTypes.desktop)? 'desktop' : ''), minimized: panel.minimized }) }) @@ -37,19 +39,23 @@ const RemixUIMainPanel = (props: RemixUIMainPanelProps) => { useEffect(() => { renderPanels() - appContext.layout.event.on('change', () => { + layout.event.on('change', () => { renderPanels() }) return () => { - appContext.layout.event.off('change') + layout.event.off('change') } }, []) const showTerminal = (hide: boolean) => { - appContext.layout.panels.terminal.minimized = hide - appContext.layout.event.emit('change', appContext.layout.panels) - appContext.layout.emit('change', appContext.layout.panels) + layout.panels.terminal.minimized = hide + layout.event.emit('change', layout.panels) + layout.emit('change', layout.panels) + } + + const resize = (height: number) => { + layout.emit('resize', height) } return ( @@ -58,7 +64,7 @@ const RemixUIMainPanel = (props: RemixUIMainPanelProps) => { return ( {pluginRecord.profile.name === 'terminal' ? ( - + ) : null} diff --git a/libs/remix-ui/panel/src/lib/plugins/panel.css b/libs/remix-ui/panel/src/lib/plugins/panel.css index 076cb4aafc..f0cc402b55 100644 --- a/libs/remix-ui/panel/src/lib/plugins/panel.css +++ b/libs/remix-ui/panel/src/lib/plugins/panel.css @@ -103,3 +103,8 @@ iframe { .terminal-wrap.minimized { height: 2rem !important; } + + +.terminal-wrap.minimized.desktop { + height: 4.5rem !important; +} diff --git a/libs/remix-ui/plugin-manager/src/lib/components/ActivePluginCardContainer.tsx b/libs/remix-ui/plugin-manager/src/lib/components/ActivePluginCardContainer.tsx index 624ba00c54..5e1f02bd1a 100644 --- a/libs/remix-ui/plugin-manager/src/lib/components/ActivePluginCardContainer.tsx +++ b/libs/remix-ui/plugin-manager/src/lib/components/ActivePluginCardContainer.tsx @@ -8,14 +8,12 @@ import ModuleHeading from './moduleHeading' interface ActivePluginCardContainerProps { pluginComponent: PluginManagerComponent - setActiveProfiles: React.Dispatch[]>> - activeProfiles: Profile[] } function ActivePluginCardContainer({pluginComponent}: ActivePluginCardContainerProps) { const deactivatePlugin = (pluginName: string) => { pluginComponent.deactivateP(pluginName) } - + const intl = useIntl() return ( diff --git a/libs/remix-ui/plugin-manager/src/lib/components/InactivePluginCard.tsx b/libs/remix-ui/plugin-manager/src/lib/components/InactivePluginCard.tsx index 5223ff7cdb..63434aed62 100644 --- a/libs/remix-ui/plugin-manager/src/lib/components/InactivePluginCard.tsx +++ b/libs/remix-ui/plugin-manager/src/lib/components/InactivePluginCard.tsx @@ -1,18 +1,32 @@ import {Profile} from '@remixproject/plugin-utils' // eslint-disable-next-line @typescript-eslint/no-unused-vars,no-use-before-define -import React from 'react' -import {FormattedMessage} from 'react-intl' +import React, { useContext, useEffect, useState } from 'react' +import {FormattedMessage, useIntl} from 'react-intl' import '../remix-ui-plugin-manager.css' import {CustomTooltip} from '@remix-ui/helper' +import { onLineContext } from '@remix-ui/app' interface PluginCardProps { - profile: Profile & { - icon?: string - } + profile: any buttonText: string activatePlugin: (plugin: string) => void } function InactivePluginCard({profile, buttonText, activatePlugin}: PluginCardProps) { + const online = useContext(onLineContext) + const [canBeActivated, setCanBeActivated] = useState(false) + const intl = useIntl() + useEffect(() => { + if(!online) { + if(profile.url && (!profile.url.includes('http') || profile.url.includes('localhost') || profile.url.includes('127.0.0.1'))) { + setCanBeActivated(true) + }else{ + setCanBeActivated(false) + } + }else{ + setCanBeActivated(true) + } + },[online]) + return (
@@ -69,15 +83,16 @@ function InactivePluginCard({profile, buttonText, activatePlugin}: PluginCardPro tooltipClasses="text-nowrap" tooltipText={} > - + {!canBeActivated ? : ( + )} } diff --git a/libs/remix-ui/plugin-manager/src/lib/components/InactivePluginCardContainer.tsx b/libs/remix-ui/plugin-manager/src/lib/components/InactivePluginCardContainer.tsx index a2b9b1d94a..a8ee28bf1c 100644 --- a/libs/remix-ui/plugin-manager/src/lib/components/InactivePluginCardContainer.tsx +++ b/libs/remix-ui/plugin-manager/src/lib/components/InactivePluginCardContainer.tsx @@ -8,8 +8,6 @@ import ModuleHeading from './moduleHeading' interface InactivePluginCardContainerProps { pluginComponent: PluginManagerComponent - setInactiveProfiles: React.Dispatch[]>> - inactiveProfiles: Profile[] } function InactivePluginCardContainer({pluginComponent}: InactivePluginCardContainerProps) { diff --git a/libs/remix-ui/plugin-manager/src/lib/remix-ui-plugin-manager.tsx b/libs/remix-ui/plugin-manager/src/lib/remix-ui-plugin-manager.tsx index 8b2a390500..b2c7944b7b 100644 --- a/libs/remix-ui/plugin-manager/src/lib/remix-ui-plugin-manager.tsx +++ b/libs/remix-ui/plugin-manager/src/lib/remix-ui-plugin-manager.tsx @@ -8,13 +8,11 @@ import RootView from './components/rootView' import './remix-ui-plugin-manager.css' export const RemixUiPluginManager = ({pluginComponent}: RemixUiPluginManagerProps) => { - const [activeProfiles, setActiveProfiles] = useState(pluginComponent.activePlugins) - const [inactiveProfiles, setinactiveProfiles] = useState(pluginComponent.inactivePlugins) return (
- - + +
) diff --git a/libs/remix-ui/run-tab/src/lib/actions/events.ts b/libs/remix-ui/run-tab/src/lib/actions/events.ts index 8377f8920d..bc8833172a 100644 --- a/libs/remix-ui/run-tab/src/lib/actions/events.ts +++ b/libs/remix-ui/run-tab/src/lib/actions/events.ts @@ -104,7 +104,7 @@ export const setupEvents = (plugin: RunTab, dispatch: React.Dispatch) => { } }) - plugin.fileManager.events.on('currentFileChanged', (currentFile: string) => { + plugin.on('fileManager', 'currentFileChanged', (currentFile: string) => { if (/.(.abi)$/.exec(currentFile)) { dispatch(setLoadType('abi')) } else if (/.(.sol)$/.exec(currentFile) || diff --git a/libs/remix-ui/run-tab/src/lib/components/contractDropdownUI.tsx b/libs/remix-ui/run-tab/src/lib/components/contractDropdownUI.tsx index 87912eccc4..4544bb1d82 100644 --- a/libs/remix-ui/run-tab/src/lib/components/contractDropdownUI.tsx +++ b/libs/remix-ui/run-tab/src/lib/components/contractDropdownUI.tsx @@ -370,7 +370,9 @@ export function ContractDropdownUI(props: ContractDropdownProps) { let evmVersion = null try { - evmVersion = JSON.parse(loadedContractData.metadata).settings.evmVersion + if (loadedContractData && loadedContractData.metadata) { + evmVersion = JSON.parse(loadedContractData.metadata).settings.evmVersion + } } catch (err) {} return (
diff --git a/libs/remix-ui/run-tab/src/lib/components/value.tsx b/libs/remix-ui/run-tab/src/lib/components/value.tsx index 8423a0594c..32d52ba3bb 100644 --- a/libs/remix-ui/run-tab/src/lib/components/value.tsx +++ b/libs/remix-ui/run-tab/src/lib/components/value.tsx @@ -6,20 +6,13 @@ import {CustomTooltip, isNumeric} from '@remix-ui/helper' import {ValueProps} from '../types' export function ValueUI(props: ValueProps) { - const [sendValue, setSendValue] = useState(props.sendValue) - const inputValue = useRef({} as HTMLInputElement) + const inputValue = useRef({} as HTMLInputElement) useEffect(() => { - sendValue !== props.sendValue && props.setSendValue(sendValue) - }, [sendValue]) - - const validateInputKey = (e) => { - // preventing not numeric keys - // preventing 000 case - if (!isNumeric(e.key) || (e.key === '0' && !parseInt(inputValue.current.value) && inputValue.current.value.length > 0)) { - e.preventDefault() + if (props.sendValue !== inputValue.current.value) { + inputValue.current.value = props.sendValue } - } + },[props.sendValue]) const validateValue = (e) => { const value = e.target.value @@ -27,22 +20,28 @@ export function ValueUI(props: ValueProps) { if (!value) { // assign 0 if given value is // - empty - return setSendValue('0') + inputValue.current.value = '0' + props.setSendValue('0') + return } let v try { v = new BN(value, 10) - setSendValue(v.toString(10)) + props.setSendValue(v.toString(10)) } catch (e) { // assign 0 if given value is // - not valid (for ex 4345-54) // - contains only '0's (for ex 0000) copy past or edit - setSendValue('0') + inputValue.current.value = '0' + props.setSendValue('0') } // if giveen value is negative(possible with copy-pasting) set to 0 - if (v.lt(0)) setSendValue('0') + if (v.lt(0)) { + inputValue.current.value = '0' + props.setSendValue('0') + } } return ( @@ -61,7 +60,6 @@ export function ValueUI(props: ValueProps) { className="form-control udapp_gasNval udapp_col2" id="value" data-id="dandrValue" - onKeyPress={validateInputKey} onChange={validateValue} value={props.sendValue} /> diff --git a/libs/remix-ui/search/src/lib/components/Search.tsx b/libs/remix-ui/search/src/lib/components/Search.tsx index 2e58e80b0f..403dcaf59e 100644 --- a/libs/remix-ui/search/src/lib/components/Search.tsx +++ b/libs/remix-ui/search/src/lib/components/Search.tsx @@ -6,14 +6,16 @@ import {Include} from './Include' import {Exclude} from './Exclude' import {FindContainer} from './FindContainer' import {Undo} from './Undo' +import { platformContext } from '@remix-ui/app' export const SearchTab = (props) => { const plugin = props.plugin + const platform = useContext(platformContext) return ( <>
- + diff --git a/libs/remix-ui/search/src/lib/components/results/ResultItem.tsx b/libs/remix-ui/search/src/lib/components/results/ResultItem.tsx index 5c3d88b54c..5a8c98ad30 100644 --- a/libs/remix-ui/search/src/lib/components/results/ResultItem.tsx +++ b/libs/remix-ui/search/src/lib/components/results/ResultItem.tsx @@ -28,7 +28,6 @@ export const ResultItem = (props: ResultItemProps) => { useEffect(() => { if (props.file.forceReload) { - console.log('force reload') clearTimeout(reloadTimeOut.current) clearTimeout(loadTimeout.current) subscribed.current = true diff --git a/libs/remix-ui/search/src/lib/components/results/SearchHelper.ts b/libs/remix-ui/search/src/lib/components/results/SearchHelper.ts index ee23f2f2f4..992f888b7a 100644 --- a/libs/remix-ui/search/src/lib/components/results/SearchHelper.ts +++ b/libs/remix-ui/search/src/lib/components/results/SearchHelper.ts @@ -1,18 +1,24 @@ import { EOL } from 'os' import { SearchResultLineLine } from '../../types' +import {Registry} from '@remix-project/remix-lib' export const getDirectory = async (dir: string, plugin: any) => { let result = [] - const files = await plugin.call('fileManager', 'readdir', dir) - const fileArray = normalize(files) - for (const fi of fileArray) { - if (fi) { - const type = fi.data.isDirectory - if (type === true) { - result = [...result, ...(await getDirectory(`${fi.filename}`, plugin))] - } else { - result = [...result, fi.filename] + if (Registry.getInstance().get('platform').api.isDesktop()) { + // only get path property of files + result = [] + } else { + const files = await plugin.call('fileManager', 'readdir', dir) + const fileArray = normalize(files) + for (const fi of fileArray) { + if (fi) { + const type = fi.data.isDirectory + if (type === true) { + result = [...result, ...(await getDirectory(`${fi.filename}`, plugin))] + } else { + result = [...result, fi.filename] + } } } } @@ -92,7 +98,7 @@ function getEOL(text) { return u > w ? '\n' : '\r\n'; } -export const replaceAllInFile = (string: string, re:RegExp, newText: string) => { +export const replaceAllInFile = (string: string, re: RegExp, newText: string) => { return string.replace(re, newText) } diff --git a/libs/remix-ui/search/src/lib/context/context.tsx b/libs/remix-ui/search/src/lib/context/context.tsx index ad2d9d5edd..d3df92e388 100644 --- a/libs/remix-ui/search/src/lib/context/context.tsx +++ b/libs/remix-ui/search/src/lib/context/context.tsx @@ -1,10 +1,11 @@ -import React, {useEffect, useRef, useState} from 'react' -import {createContext, useReducer} from 'react' -import {findLinesInStringWithMatch, getDirectory, replaceAllInFile, replaceTextInLine} from '../components/results/SearchHelper' -import {SearchReducer} from '../reducers/Reducer' -import {SearchState, SearchResult, SearchResultLine, SearchResultLineLine, SearchingInitialState, undoBufferRecord} from '../types' -import {filePathFilter} from '@jsdevtools/file-path-filter' -import {escapeRegExp} from 'lodash' +import React, { useEffect, useRef, useState } from 'react' +import { createContext, useReducer } from 'react' +import { findLinesInStringWithMatch, getDirectory, replaceAllInFile, replaceTextInLine } from '../components/results/SearchHelper' +import { SearchReducer } from '../reducers/Reducer' +import { SearchState, SearchResult, SearchResultLine, SearchResultLineLine, SearchingInitialState, undoBufferRecord, SearchInWorkspaceOptions } from '../types' +import { filePathFilter } from '@jsdevtools/file-path-filter' +import { escapeRegExp } from 'lodash' +import { appPlatformTypes } from '@remix-ui/app' export interface SearchingStateInterface { state: SearchState @@ -36,10 +37,14 @@ export interface SearchingStateInterface { export const SearchContext = createContext(null) -export const SearchProvider = ({children = [], reducer = SearchReducer, initialState = SearchingInitialState, plugin = undefined} = {}) => { +export const SearchProvider = ({ children = [], reducer = SearchReducer, initialState = SearchingInitialState, plugin = undefined, platform = undefined } = {}) => { const [state, dispatch] = useReducer(reducer, initialState) - const [files, setFiles] = useState([]) + const [files, setFiles] = useState<{ + files: string[], + timeStamp: number + }>(null) const clearSearchingTimeout = useRef(null) + const directoryUpdateCacheTimeStamp = useRef(0) const value = { state, setFind: (value: string) => { @@ -148,7 +153,7 @@ export const SearchProvider = ({children = [], reducer = SearchReducer, initialS updateCount: (count: number, file: string) => { dispatch({ type: 'UPDATE_COUNT', - payload: {count, file} + payload: { count, file } }) }, setSearching(file: string) { @@ -173,6 +178,7 @@ export const SearchProvider = ({children = [], reducer = SearchReducer, initialS }, findText: async (path: string) => { + if (!plugin) return try { if (state.find.length < 1) return @@ -264,12 +270,16 @@ export const SearchProvider = ({children = [], reducer = SearchReducer, initialS await value.reloadFile(file) } + const updateDirectoryCacheTimeStamp = async () => { + directoryUpdateCacheTimeStamp.current = Date.now() + } + useEffect(() => { plugin.on('filePanel', 'setWorkspace', async (workspace) => { value.setSearchResults(null) value.clearUndo() value.setCurrentWorkspace(workspace.name) - setFiles(await getDirectory('/', plugin)) + await updateDirectoryCacheTimeStamp() }) plugin.on('fileManager', 'fileSaved', async (file) => { await reloadStateForFile(file) @@ -278,11 +288,15 @@ export const SearchProvider = ({children = [], reducer = SearchReducer, initialS plugin.on('fileManager', 'rootFolderChanged', async (file) => { const workspace = await plugin.call('filePanel', 'getCurrentWorkspace') if (workspace) value.setCurrentWorkspace(workspace.name) - setFiles(await getDirectory('/', plugin)) + await updateDirectoryCacheTimeStamp() + }) + + plugin.on('fs', 'workingDirChanged', async () => { + await updateDirectoryCacheTimeStamp() }) plugin.on('fileManager', 'fileAdded', async (file) => { - setFiles(await getDirectory('/', plugin)) + await updateDirectoryCacheTimeStamp() await reloadStateForFile(file) }) plugin.on('fileManager', 'currentFileChanged', async (file) => { @@ -294,16 +308,15 @@ export const SearchProvider = ({children = [], reducer = SearchReducer, initialS const workspace = await plugin.call('filePanel', 'getCurrentWorkspace') if (workspace && workspace.name) { value.setCurrentWorkspace(workspace.name) - setFiles(await getDirectory('/', plugin)) + await updateDirectoryCacheTimeStamp() } } catch (e) { console.log(e) } } - setTimeout(async () => { - await fetchWorkspace() - }, 500) - + + fetchWorkspace() + return () => { plugin.off('fileManager', 'fileChanged') plugin.off('filePanel', 'setWorkspace') @@ -366,7 +379,7 @@ export const SearchProvider = ({children = [], reducer = SearchReducer, initialS useEffect(() => { if (state.find) { - ;(async () => { + ; (async () => { try { const pathFilter: any = {} if (state.include) { @@ -375,18 +388,56 @@ export const SearchProvider = ({children = [], reducer = SearchReducer, initialS if (state.exclude) { pathFilter.exclude = setGlobalExpression(state.exclude) } - const filteredFiles = files.filter(filePathFilter(pathFilter)).map((file) => { - const r: SearchResult = { - filename: file, - lines: [], - path: file, - timeStamp: Date.now(), - forceReload: false, - count: 0 + + if (platform == appPlatformTypes.desktop) { + const search: SearchInWorkspaceOptions = { + path: '/', + pattern: state.find, + useRegExp: state.useRegExp, + matchCase: state.casesensitive, + matchWholeWord: state.matchWord, + include: pathFilter.include, + exclude: pathFilter.exclude } - return r - }) - value.setSearchResults(filteredFiles) + + const filesfromripgrep = await plugin.call('ripgrep', 'glob', search) + + const filteredFiles = filesfromripgrep.map((file) => { + const r: SearchResult = { + filename: file.path, + lines: [], + path: file.path, + timeStamp: Date.now(), + forceReload: false, + count: 0 + } + return r + }) + value.setSearchResults(filteredFiles) + } else { + let filesToSearch = files?.files + if(!files || files.timeStamp != directoryUpdateCacheTimeStamp.current) { + const newFiles = await getDirectory('/', plugin) + setFiles({ + files: newFiles, + timeStamp: directoryUpdateCacheTimeStamp.current || Date.now() + }) + filesToSearch = newFiles + } + const filteredFiles = filesToSearch.filter(filePathFilter(pathFilter)).map((file) => { + const r: SearchResult = { + filename: file, + lines: [], + path: file, + timeStamp: Date.now(), + forceReload: false, + count: 0 + } + return r + }) + value.setSearchResults(filteredFiles) + } + } catch (e) { console.log(e) } diff --git a/libs/remix-ui/search/src/lib/types/index.ts b/libs/remix-ui/search/src/lib/types/index.ts index 4c3ffa959d..e624dc8307 100644 --- a/libs/remix-ui/search/src/lib/types/index.ts +++ b/libs/remix-ui/search/src/lib/types/index.ts @@ -90,4 +90,39 @@ export const SearchingInitialState: SearchState = { workspace: '', searching: null, run: false, +} + + + +export interface SearchInWorkspaceOptions { + pattern: string + path: string + /** + * Maximum number of results to return. Defaults to unlimited. + */ + maxResults?: number + /** + * Search case sensitively if true. + */ + matchCase?: boolean + /** + * Search whole words only if true. + */ + matchWholeWord?: boolean + /** + * Use regular expressions for search if true. + */ + useRegExp?: boolean + /** + * Include all .gitignored and hidden files. + */ + includeIgnored?: boolean + /** + * Glob pattern for matching files and directories to include the search. + */ + include?: string[] + /** + * Glob pattern for matching files and directories to exclude the search. + */ + exclude?: string[] } \ No newline at end of file diff --git a/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx b/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx index 95e6160409..34bac76242 100644 --- a/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx +++ b/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx @@ -436,10 +436,16 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => { } const isCopilotActivated = props.config.get('settings/copilot/suggest/activate') || false - const copilotMaxnewToken = props.config.get('settings/copilot/suggest/max_new_tokens') - if (!copilotMaxnewToken) props.config.set('settings/copilot/suggest/max_new_tokens', 5) - const copilotTemperatureValue = (props.config.get('settings/copilot/suggest/temperature')) * 100 - if (!copilotTemperatureValue) props.config.set('settings/copilot/suggest/temperature', 0.5) + let copilotMaxnewToken = props.config.get('settings/copilot/suggest/max_new_tokens') + if (!copilotMaxnewToken) { + props.config.set('settings/copilot/suggest/max_new_tokens', 5) + copilotMaxnewToken = 5 + } + let copilotTemperatureValue = (props.config.get('settings/copilot/suggest/temperature')) * 100 + if (!copilotTemperatureValue) { + props.config.set('settings/copilot/suggest/temperature', 0.5) + copilotTemperatureValue = 0.5 + } if (isCopilotActivated) props.plugin.call('copilot-suggestion', 'init') const copilotSettings = () => ( diff --git a/libs/remix-ui/solidity-compiler/src/lib/actions/compiler.ts b/libs/remix-ui/solidity-compiler/src/lib/actions/compiler.ts index b1c0b686de..1808c182e7 100644 --- a/libs/remix-ui/solidity-compiler/src/lib/actions/compiler.ts +++ b/libs/remix-ui/solidity-compiler/src/lib/actions/compiler.ts @@ -1,5 +1,6 @@ import React from 'react' import { CompileTabLogic } from '../logic/compileTabLogic' + export const setEditorMode = (mode: string) => { return { type: 'SET_EDITOR_MODE', @@ -28,7 +29,7 @@ export const resetCompilerMode = () => (dispatch: React.Dispatch) => { export const listenToEvents = (compileTabLogic: CompileTabLogic, api) => (dispatch: React.Dispatch) => { api.onSessionSwitched = () => { - dispatch(setEditorMode('sessionSwitched')) + dispatch(setEditorMode('sessionSwitched_' + Date.now())) } compileTabLogic.event.on('startingCompilation', () => { @@ -40,7 +41,7 @@ export const listenToEvents = (compileTabLogic: CompileTabLogic, api) => (dispat }) api.onContentChanged = () => { - dispatch(setEditorMode('contentChanged')) + dispatch(setEditorMode('contentChanged_' + Date.now())) } compileTabLogic.compiler.event.register('loadingCompiler', () => { dispatch(setCompilerMode('loadingCompiler')) diff --git a/libs/remix-ui/solidity-compiler/src/lib/api/compiler-api.ts b/libs/remix-ui/solidity-compiler/src/lib/api/compiler-api.ts index e20134f331..68e62915c5 100644 --- a/libs/remix-ui/solidity-compiler/src/lib/api/compiler-api.ts +++ b/libs/remix-ui/solidity-compiler/src/lib/api/compiler-api.ts @@ -1,7 +1,7 @@ import React from 'react'; import { compile, helper } from '@remix-project/remix-solidity' import { CompileTabLogic, parseContracts } from '@remix-ui/solidity-compiler' // eslint-disable-line -import type { ConfigurationSettings } from '@remix-project/remix-lib' +import type { ConfigurationSettings, iSolJsonBinData } from '@remix-project/remix-lib' export const CompilerApiMixin = (Base) => class extends Base { currentFile: string @@ -16,6 +16,7 @@ export const CompilerApiMixin = (Base) => class extends Base { compileErrors: any compileTabLogic: CompileTabLogic configurationSettings: ConfigurationSettings + solJsonBinData: iSolJsonBinData onCurrentFileChanged: (fileName: string) => void // onResetResults: () => void @@ -27,6 +28,8 @@ export const CompilerApiMixin = (Base) => class extends Base { onContentChanged: () => void onFileClosed: (name: string) => void statusChanged: (data: { key: string, title?: string, type?: string }) => void + + setSolJsonBinData: (urls: iSolJsonBinData) => void initCompilerApi () { this.configurationSettings = null @@ -278,6 +281,16 @@ export const CompilerApiMixin = (Base) => class extends Base { this.on('fileManager', 'fileClosed', this.data.eventHandlers.onFileClosed) + this.on('compilerloader', 'jsonBinDataLoaded', (urls: iSolJsonBinData) => { + try{ + this.setSolJsonBinData(urls) + }catch(e){ + } + this.solJsonBinData = urls + }) + this.call('compilerloader', 'getJsonBinData') + + this.data.eventHandlers.onCompilationFinished = async (success, data, source, input, version) => { this.compileErrors = data if (success) { diff --git a/libs/remix-ui/solidity-compiler/src/lib/compiler-container.tsx b/libs/remix-ui/solidity-compiler/src/lib/compiler-container.tsx index d2776762b7..5d73b628a7 100644 --- a/libs/remix-ui/solidity-compiler/src/lib/compiler-container.tsx +++ b/libs/remix-ui/solidity-compiler/src/lib/compiler-container.tsx @@ -1,18 +1,22 @@ -import React, {useEffect, useState, useRef, useReducer} from 'react' // eslint-disable-line +import React, {useEffect, useState, useRef, useReducer, useContext} from 'react' // eslint-disable-line import {FormattedMessage, useIntl} from 'react-intl' import semver from 'semver' import {CompilerContainerProps} from './types' import {ConfigurationSettings} from '@remix-project/remix-lib' import {checkSpecialChars, CustomTooltip, extractNameFromKey} from '@remix-ui/helper' -import {canUseWorker, baseURLBin, baseURLWasm, urlFromVersion, pathToURL} from '@remix-project/remix-solidity' +import {canUseWorker, urlFromVersion, pathToURL} from '@remix-project/remix-solidity' import {compilerReducer, compilerInitialState} from './reducers/compiler' -import {resetEditorMode, listenToEvents} from './actions/compiler' +import {listenToEvents} from './actions/compiler' import {getValidLanguage} from '@remix-project/remix-solidity' import {CopyToClipboard} from '@remix-ui/clipboard' import {configFileContent} from './compilerConfiguration' -import axios, {AxiosResponse} from 'axios' +import { appPlatformTypes, platformContext, onLineContext } from '@remix-ui/app' import './css/style.css' + +import { CompilerDropdown } from './components/compiler-dropdown' + + const defaultPath = 'compiler_config.json' declare global { @@ -24,6 +28,8 @@ declare global { const _paq = (window._paq = window._paq || []) //eslint-disable-line export const CompilerContainer = (props: CompilerContainerProps) => { + const online = useContext(onLineContext) + const platform = useContext(platformContext) const { api, compileTabLogic, @@ -38,6 +44,7 @@ export const CompilerContainer = (props: CompilerContainerProps) => { workspaceName, configFilePath, setConfigFilePath, + solJsonBinData, //@ts-ignore pluginProps } = props // eslint-disable-line @@ -50,8 +57,8 @@ export const CompilerContainer = (props: CompilerContainerProps) => { optimize: false, compileTimeout: null, timeout: 300, - allversions: [], customVersions: [], + downloaded: [], compilerLicense: null, selectedVersion: null, defaultVersion: 'soljson-v0.8.22+commit.4fc1097e.js', // this default version is defined: in makeMockCompiler (for browser test) @@ -61,7 +68,9 @@ export const CompilerContainer = (props: CompilerContainerProps) => { language: 'Solidity', remappings: [], evmVersion: '', - createFileOnce: true + createFileOnce: true, + onlyDownloaded: false, + updatedVersionSelectorFromUrlQuery: false, }) const [showFilePathInput, setShowFilePathInput] = useState(false) const [toggleExpander, setToggleExpander] = useState(false) @@ -99,6 +108,16 @@ export const CompilerContainer = (props: CompilerContainerProps) => { } }, [state.useFileConfiguration]) + useEffect(() => { + if(online && state.onlyDownloaded){ + // @ts-ignore + api.call('compilerloader','getJsonBinData') + } + setState((prevState) => { + return {...prevState, onlyDownloaded: !online} + }) + },[online]) + useEffect(() => { const listener = (event) => { if (configFilePathInput.current !== event.target && event.target.innerText !== 'Create') { @@ -113,24 +132,36 @@ export const CompilerContainer = (props: CompilerContainerProps) => { document.removeEventListener('mousedown', listener) document.removeEventListener('touchstart', listener) } - }) + }, []) useEffect(() => { - fetchAllVersion((allversions, selectedVersion, isURL) => { - setState((prevState) => { - return {...prevState, allversions} - }) - if (isURL) _updateVersionSelector(state.defaultVersion, selectedVersion) - else { + if(!solJsonBinData) return + if(!state.updatedVersionSelectorFromUrlQuery && solJsonBinData.binList && solJsonBinData.binList.length) { + const versionFromQueryParameter = getSelectVersionFromQueryParam() + if (versionFromQueryParameter.isURL) _updateVersionSelector(state.defaultVersion, versionFromQueryParameter.selectedVersion) + else{ setState((prevState) => { - return {...prevState, selectedVersion} + return {...prevState, selectedVersion: versionFromQueryParameter.selectedVersion} }) - updateCurrentVersion(selectedVersion) - _updateVersionSelector(selectedVersion) + updateCurrentVersion(versionFromQueryParameter.selectedVersion) + _updateVersionSelector(versionFromQueryParameter.selectedVersion) } - }) - const currentFileName = api.currentFile + setState((prevState) => { + return {...prevState, updatedVersionSelectorFromUrlQuery: true} + }) + } else if(!solJsonBinData.binList || (solJsonBinData.binList && solJsonBinData.binList.length == 0)){ + const version = 'builtin' + setState((prevState) => { + return {...prevState, selectedVersion: version} + }) + updateCurrentVersion(version) + _updateVersionSelector(version, '', false) + } + }, [solJsonBinData]) + + useEffect(() => { + const currentFileName = api.currentFile currentFile(currentFileName) listenToEvents(compileTabLogic, api)(dispatch) }, []) @@ -148,7 +179,7 @@ export const CompilerContainer = (props: CompilerContainerProps) => { setConfigFilePath(configFilePathSaved) setState((prevState) => { - const params = api.getCompilerParameters() + const params = api.getCompilerQueryParameters() const optimize = params.optimize const runs = params.runs as string const evmVersion = compileTabLogic.evmVersions.includes(params.evmVersion) ? params.evmVersion : 'default' @@ -203,16 +234,13 @@ export const CompilerContainer = (props: CompilerContainerProps) => { useEffect(() => { if (compilerContainer.editor.mode) { - switch (compilerContainer.editor.mode) { - case 'sessionSwitched': + if (compilerContainer.editor.mode.startsWith('sessionSwitched')) { sessionSwitched() - resetEditorMode()(dispatch) - break - case 'contentChanged': + return + } else if (compilerContainer.editor.mode.startsWith('contentChanged')) { contentChanged() - resetEditorMode()(dispatch) - break - } + return + } } }, [compilerContainer.editor.mode]) @@ -298,30 +326,15 @@ export const CompilerContainer = (props: CompilerContainerProps) => { return semver.coerce(version) ? semver.coerce(version).version : '' } - // fetching both normal and wasm builds and creating a [version, baseUrl] map - const fetchAllVersion = async (callback) => { - let selectedVersion, allVersionsWasm, isURL - let allVersions = [ - { - path: 'builtin', - longVersion: 'latest local version - ' + state.defaultVersion - } - ] - // fetch normal builds - const binRes: AxiosResponse = await axios(`${baseURLBin}/list.json`) - // fetch wasm builds - const wasmRes: AxiosResponse = await axios(`${baseURLWasm}/list.json`) - if (binRes.status !== 200 && wasmRes.status !== 200) { - selectedVersion = 'builtin' - return callback(allVersions, selectedVersion) - } + const getSelectVersionFromQueryParam = () => { + let selectedVersion = state.defaultVersion + let isURL = false try { - const versions = binRes.data.builds.slice().reverse() + const versions = [...solJsonBinData.binList] + versions.reverse() - allVersions = [...allVersions, ...versions] - selectedVersion = state.defaultVersion - if (api.getCompilerParameters().version) { - const versionFromURL = api.getCompilerParameters().version + if (api.getCompilerQueryParameters().version) { + const versionFromURL = api.getCompilerQueryParameters().version // Check if version is a URL and corresponding filename starts with 'soljson' if (versionFromURL.startsWith('https://')) { const urlArr = versionFromURL.split('/') @@ -337,29 +350,12 @@ export const CompilerContainer = (props: CompilerContainerProps) => { if (selectedVersionArr.length) selectedVersion = selectedVersionArr[0].path } } - if (wasmRes.status === 200) { - allVersionsWasm = wasmRes.data.builds.slice().reverse() - } + } catch (e) { tooltip(intl.formatMessage({id: 'solidity.tooltipText5'}) + e) } - // replace in allVersions those compiler builds which exist in allVersionsWasm with new once - if (allVersionsWasm && allVersions) { - allVersions.forEach((compiler, index) => { - const wasmIndex = allVersionsWasm.findIndex((wasmCompiler) => { - return wasmCompiler.longVersion === compiler.longVersion - }) - const URLWasm: string = process && process.env && process.env['NX_WASM_URL'] ? process.env['NX_WASM_URL'] : baseURLWasm - const URLBin: string = process && process.env && process.env['NX_BIN_URL'] ? process.env['NX_BIN_URL'] : baseURLBin - if (wasmIndex !== -1) { - allVersions[index] = allVersionsWasm[wasmIndex] - pathToURL[compiler.path] = URLWasm - } else { - pathToURL[compiler.path] = URLBin - } - }) - } - callback(allVersions, selectedVersion, isURL) + + return {selectedVersion, isURL} } /** @@ -378,15 +374,15 @@ export const CompilerContainer = (props: CompilerContainerProps) => { // Load solc compiler version according to pragma in contract file const _setCompilerVersionFromPragma = (filename: string) => { - if (!state.allversions) return + if (!solJsonBinData.selectorList) return api.readFile(filename).then((data) => { if (!data) return const pragmaArr = data.match(/(pragma solidity (.+?);)/g) if (pragmaArr && pragmaArr.length === 1) { const pragmaStr = pragmaArr[0].replace('pragma solidity', '').trim() const pragma = pragmaStr.substring(0, pragmaStr.length - 1) - const releasedVersions = state.allversions.filter((obj) => !obj.prerelease).map((obj) => obj.version) - const allVersions = state.allversions.map((obj) => _retrieveVersion(obj.version)) + const releasedVersions = solJsonBinData.selectorList.filter((obj) => !obj.prerelease).map((obj) => obj.version) + const allVersions = solJsonBinData.selectorList.map((obj) => _retrieveVersion(obj.version)) const currentCompilerName = _retrieveVersion(state.selectedVersion) // contains only numbers part, for example '0.4.22' const pureVersion = _retrieveVersion() @@ -398,7 +394,7 @@ export const CompilerContainer = (props: CompilerContainerProps) => { const isOfficial = allVersions.includes(currentCompilerName) if (isOfficial && !isInRange && !isNewestNightly) { const compilerToLoad = semver.maxSatisfying(releasedVersions, pragma) - const compilerPath = state.allversions.filter((obj) => !obj.prerelease && obj.version === compilerToLoad)[0].path + const compilerPath = solJsonBinData.selectorList.filter((obj) => !obj.prerelease && obj.version === compilerToLoad)[0].path if (state.selectedVersion !== compilerPath) { // @ts-ignore api.call('notification', 'toast', intl.formatMessage({id: 'solidity.toastMessage'}, {version: _retrieveVersion(compilerPath)})) @@ -536,7 +532,7 @@ export const CompilerContainer = (props: CompilerContainerProps) => { compileTabLogic.runCompiler(externalCompType) } - const _updateVersionSelector = (version, customUrl = '') => { + const _updateVersionSelector = (version, customUrl = '', setQueryParameter = true) => { // update selectedversion of previous one got filtered out let selectedVersion = version if (!selectedVersion || !_shouldBeAdded(selectedVersion)) { @@ -546,7 +542,8 @@ export const CompilerContainer = (props: CompilerContainerProps) => { }) } updateCurrentVersion(selectedVersion) - api.setCompilerParameters({version: selectedVersion}) + if(setQueryParameter) + api.setCompilerQueryParameters({version: selectedVersion}) let url if (customUrl !== '') { @@ -560,7 +557,8 @@ export const CompilerContainer = (props: CompilerContainerProps) => { }) updateCurrentVersion(selectedVersion) url = customUrl - api.setCompilerParameters({version: selectedVersion}) + if(setQueryParameter) + api.setCompilerQueryParameters({version: selectedVersion}) } else { if (checkSpecialChars(selectedVersion)) { return console.log('loading ' + selectedVersion + ' not allowed, special chars not allowed.') @@ -576,7 +574,7 @@ export const CompilerContainer = (props: CompilerContainerProps) => { // "Uncaught RangeError: Maximum call stack size exceeded" error on Chromium, // resort to non-worker version in that case. if (selectedVersion === 'builtin') selectedVersion = state.defaultVersion - if (selectedVersion !== 'builtin' && canUseWorker(selectedVersion)) { + if (selectedVersion !== 'builtin' && (canUseWorker(selectedVersion) || platform === appPlatformTypes.desktop)) { compileTabLogic.compiler.loadVersion(true, url) } else { compileTabLogic.compiler.loadVersion(false, url) @@ -630,6 +628,7 @@ export const CompilerContainer = (props: CompilerContainerProps) => { } const handleLoadVersion = (value) => { + if(value !== 'builtin' && !pathToURL[value]) return setState((prevState) => { return {...prevState, selectedVersion: value, matomoAutocompileOnce: true} }) @@ -706,6 +705,14 @@ export const CompilerContainer = (props: CompilerContainerProps) => { }) } + const handleOnlyDownloadedChange = (e) => { + const checked = e.target.checked + if (!checked) handleLoadVersion(state.defaultVersion) + setState((prevState) => { + return {...prevState, onlyDownloaded: checked} + }) + } + const handleLanguageChange = (value) => { compileTabLogic.setLanguage(value) state.autoCompile && compile() @@ -765,6 +772,7 @@ export const CompilerContainer = (props: CompilerContainerProps) => { + { > showCompilerLicense()}> - + { solJsonBinData && solJsonBinData.selectorList && solJsonBinData.selectorList.length > 0 ? ( + ):null}
@@ -818,6 +806,13 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
+ {platform === appPlatformTypes.desktop ? +
+ + +
:null}
void, + _shouldBeAdded: (version: string) => boolean, + onlyDownloaded: boolean +} + +export const CompilerDropdown = (props: compilerDropdownProps) => { + const online = useContext(onLineContext) + const platform = useContext(platformContext) + const { customVersions, selectedVersion, defaultVersion, allversions, handleLoadVersion, _shouldBeAdded, onlyDownloaded } = props + return ( + + +
+
+ {customVersions.map((url, i) => { + if (selectedVersion === url) return (custom) + })} + {allversions.map((build, i) => { + + if ((selectedVersion || defaultVersion) === build.path) { + return ({build.longVersion}) + } + })} +
+
+
+ + + {allversions.length <= 0 && ( + {}} + > +
+ {selectedVersion === defaultVersion ? : null} +
+
+ {defaultVersion} +
+
+
+
+ )} + {allversions.length <= 0 && ( + {}} + > +
+ {selectedVersion === "builtin" ? : null} +
+
+ builtin +
+
+
+
+ )} + {customVersions.map((url, i) => ( + handleLoadVersion(url)} + > +
+ {selectedVersion === url ? : null} +
+
+ custom: {url} +
+
+
+
+ ))} + {allversions.map((build, i) => { + if (onlyDownloaded && !build.isDownloaded) return null + return _shouldBeAdded(build.longVersion) ? ( + handleLoadVersion(build.path)} + > +
+ {selectedVersion === build.path ? : null} +
+
+ {build.longVersion} +
+
+ {platform == appPlatformTypes.desktop ? (build.isDownloaded ?
:
) : null} +
+
+ ) : null + })} +
+
+ ); +} \ No newline at end of file diff --git a/libs/remix-ui/solidity-compiler/src/lib/components/compiler-menu.tsx b/libs/remix-ui/solidity-compiler/src/lib/components/compiler-menu.tsx new file mode 100644 index 0000000000..3f9414b291 --- /dev/null +++ b/libs/remix-ui/solidity-compiler/src/lib/components/compiler-menu.tsx @@ -0,0 +1,66 @@ +import React, { useEffect, useState, useRef, useReducer, useContext, Ref } from 'react' +export const CompilerMenu = React.forwardRef( + ( + { + children, + style, + 'data-id': dataId, + className, + 'aria-labelledby': labeledBy + }: { + 'children': React.ReactNode + 'style'?: React.CSSProperties + 'data-id'?: string + 'className': string + 'aria-labelledby'?: string + }, + ref: Ref + ) => { + const height = window.innerHeight * 0.6 + return ( +
+
    + {children} +
+
+ ) + } +) + +export const CompilerMenuToggle = React.forwardRef( + ( + { + children, + onClick, + icon, + className = '' + }: { + children: React.ReactNode + onClick: (e) => void + icon: string + className: string + }, + ref: Ref + ) => ( + + ) +) \ No newline at end of file diff --git a/libs/remix-ui/solidity-compiler/src/lib/logic/compileTabLogic.ts b/libs/remix-ui/solidity-compiler/src/lib/logic/compileTabLogic.ts index 958ef3a06a..0369ca930c 100644 --- a/libs/remix-ui/solidity-compiler/src/lib/logic/compileTabLogic.ts +++ b/libs/remix-ui/solidity-compiler/src/lib/logic/compileTabLogic.ts @@ -11,7 +11,7 @@ const _paq = window._paq = window._paq || [] //eslint-disable-line export class CompileTabLogic { public compiler - public api + public api: ICompilerApi public contentImport public optimize public runs @@ -32,16 +32,16 @@ export class CompileTabLogic { } init () { - this.optimize = this.api.getCompilerParameters().optimize - this.api.setCompilerParameters({ optimize: this.optimize }) + this.optimize = this.api.getCompilerQueryParameters().optimize + this.api.setCompilerQueryParameters({ optimize: this.optimize }) this.compiler.set('optimize', this.optimize) - this.runs = this.api.getCompilerParameters().runs + this.runs = this.api.getCompilerQueryParameters().runs this.runs = this.runs && this.runs !== 'undefined' ? this.runs : 200 - this.api.setCompilerParameters({ runs: this.runs }) + this.api.setCompilerQueryParameters({ runs: this.runs }) this.compiler.set('runs', this.runs) - this.evmVersion = this.api.getCompilerParameters().evmVersion + this.evmVersion = this.api.getCompilerQueryParameters().evmVersion if ( this.evmVersion === 'undefined' || this.evmVersion === 'null' || @@ -49,10 +49,10 @@ export class CompileTabLogic { !this.evmVersions.includes(this.evmVersion)) { this.evmVersion = null } - this.api.setCompilerParameters({ evmVersion: this.evmVersion }) + this.api.setCompilerQueryParameters({ evmVersion: this.evmVersion }) this.compiler.set('evmVersion', this.evmVersion) - this.language = getValidLanguage(this.api.getCompilerParameters().language) + this.language = getValidLanguage(this.api.getCompilerQueryParameters().language) if (this.language != null) { this.compiler.set('language', this.language) } @@ -60,7 +60,7 @@ export class CompileTabLogic { setOptimize (newOptimizeValue: boolean) { this.optimize = newOptimizeValue - this.api.setCompilerParameters({ optimize: this.optimize }) + this.api.setCompilerQueryParameters({ optimize: this.optimize }) this.compiler.set('optimize', this.optimize) } @@ -75,13 +75,13 @@ export class CompileTabLogic { setRuns (runs) { this.runs = runs - this.api.setCompilerParameters({ runs: this.runs }) + this.api.setCompilerQueryParameters({ runs: this.runs }) this.compiler.set('runs', this.runs) } setEvmVersion (newEvmVersion) { this.evmVersion = newEvmVersion - this.api.setCompilerParameters({ evmVersion: this.evmVersion }) + this.api.setCompilerQueryParameters({ evmVersion: this.evmVersion }) this.compiler.set('evmVersion', this.evmVersion) } @@ -95,7 +95,7 @@ export class CompileTabLogic { */ setLanguage (lang) { this.language = lang - this.api.setCompilerParameters({ language: lang }) + this.api.setCompilerQueryParameters({ language: lang }) this.compiler.set('language', lang) } diff --git a/libs/remix-ui/solidity-compiler/src/lib/solidity-compiler.tsx b/libs/remix-ui/solidity-compiler/src/lib/solidity-compiler.tsx index 6c5a7d423a..2251fa1247 100644 --- a/libs/remix-ui/solidity-compiler/src/lib/solidity-compiler.tsx +++ b/libs/remix-ui/solidity-compiler/src/lib/solidity-compiler.tsx @@ -1,17 +1,19 @@ -import React, {useEffect, useState} from 'react' // eslint-disable-line -import {CompileErrors, ContractsFile, SolidityCompilerProps} from './types' -import {CompilerContainer} from './compiler-container' // eslint-disable-line -import {ContractSelection} from './contract-selection' // eslint-disable-line -import {Toaster} from '@remix-ui/toaster' // eslint-disable-line -import {ModalDialog} from '@remix-ui/modal-dialog' // eslint-disable-line -import {Renderer} from '@remix-ui/renderer' // eslint-disable-line +import React, { useEffect, useState } from 'react' // eslint-disable-line +import { CompileErrors, ContractsFile, SolidityCompilerProps } from './types' +import { CompilerContainer } from './compiler-container' // eslint-disable-line +import { ContractSelection } from './contract-selection' // eslint-disable-line +import { Toaster } from '@remix-ui/toaster' // eslint-disable-line +import { ModalDialog } from '@remix-ui/modal-dialog' // eslint-disable-line +import { Renderer } from '@remix-ui/renderer' // eslint-disable-line +import { baseURLBin, baseURLWasm, pathToURL } from '@remix-project/remix-solidity' import './css/style.css' +import { iSolJsonBinData, iSolJsonBinDataBuild } from '@remix-project/remix-lib' export const SolidityCompiler = (props: SolidityCompilerProps) => { const { api, - api: {currentFile, compileTabLogic, configurationSettings} + api: { currentFile, compileTabLogic, configurationSettings } } = props const [state, setState] = useState({ @@ -30,21 +32,23 @@ export const SolidityCompiler = (props: SolidityCompilerProps) => { title: '', message: null, okLabel: '', - okFn: () => {}, + okFn: () => { }, donotHideOnOkClick: false, cancelLabel: '', - cancelFn: () => {}, + cancelFn: () => { }, handleHide: null - } + }, + solJsonBinData: null, + defaultVersion: 'soljson-v0.8.22+commit.4fc1097e.js', // this default version is defined: in makeMockCompiler (for browser test) }) const [currentVersion, setCurrentVersion] = useState('') const [hideWarnings, setHideWarnings] = useState(false) - const [compileErrors, setCompileErrors] = useState>({[currentFile]: api.compileErrors}) - const [badgeStatus, setBadgeStatus] = useState>({}) + const [compileErrors, setCompileErrors] = useState>({ [currentFile]: api.compileErrors }) + const [badgeStatus, setBadgeStatus] = useState>({}) const [contractsFile, setContractsFile] = useState({}) useEffect(() => { - ;(async () => { + ; (async () => { const hide = ((await api.getAppParameter('hideWarnings')) as boolean) || false setHideWarnings(hide) })() @@ -54,7 +58,7 @@ export const SolidityCompiler = (props: SolidityCompilerProps) => { if (badgeStatus[currentFile]) { api.emit('statusChanged', badgeStatus[currentFile]) } else { - api.emit('statusChanged', {key: 'none'}) + api.emit('statusChanged', { key: 'none' }) } }, [badgeStatus[currentFile], currentFile]) @@ -67,7 +71,7 @@ export const SolidityCompiler = (props: SolidityCompilerProps) => { api.onCurrentFileChanged = (currentFile: string) => { setState((prevState) => { - return {...prevState, currentFile} + return { ...prevState, currentFile } }) } @@ -90,24 +94,24 @@ export const SolidityCompiler = (props: SolidityCompilerProps) => { api.onFileRemoved = (path: string) => { if (path === state.configFilePath) setState((prevState) => { - return {...prevState, configFilePath: ''} + return { ...prevState, configFilePath: '' } }) } api.onNoFileSelected = () => { setState((prevState) => { - return {...prevState, currentFile: ''} + return { ...prevState, currentFile: '' } }) setCompileErrors({} as Record) } api.onCompilationFinished = (compilationDetails: { - contractMap: {file: string} | Record + contractMap: { file: string } | Record contractsDetails: Record target?: string input?: Record }) => { - const {contractMap, contractsDetails, target, input} = compilationDetails + const { contractMap, contractsDetails, target, input } = compilationDetails const contractList = contractMap ? Object.keys(contractMap).map((key) => { return { @@ -119,37 +123,78 @@ export const SolidityCompiler = (props: SolidityCompilerProps) => { setContractsFile({ ...contractsFile, - [target]: {contractList, contractsDetails, input} + [target]: { contractList, contractsDetails, input } }) - setCompileErrors({...compileErrors, [currentFile]: api.compileErrors}) + setCompileErrors({ ...compileErrors, [currentFile]: api.compileErrors }) } api.onFileClosed = (name) => { if (name === currentFile) { - setCompileErrors({...compileErrors, [currentFile]: {} as CompileErrors}) - setBadgeStatus({...badgeStatus, [currentFile]: {key: 'none'}}) + setCompileErrors({ ...compileErrors, [currentFile]: {} as CompileErrors }) + setBadgeStatus({ ...badgeStatus, [currentFile]: { key: 'none' } }) } } - api.statusChanged = (data: {key: string; title?: string; type?: string}) => { - setBadgeStatus({...badgeStatus, [currentFile]: data}) + api.statusChanged = (data: { key: string; title?: string; type?: string }) => { + setBadgeStatus({ ...badgeStatus, [currentFile]: data }) + } + + api.setSolJsonBinData = (data: iSolJsonBinData) => { + setSolJsonBinData(data) } + const setSolJsonBinData = (data: iSolJsonBinData) => { + const builtin: iSolJsonBinDataBuild = + { + path: 'builtin', + longVersion: 'latest local version - ' + state.defaultVersion, + binURL: '', + wasmURL: '', + isDownloaded: true, + version: 'builtin', + build: '', + prerelease: '' + } + const binVersions = [...data.binList] + const selectorList = binVersions + + const wasmVersions = data.wasmList + selectorList.forEach((compiler, index) => { + const wasmIndex = wasmVersions.findIndex((wasmCompiler) => { + return wasmCompiler.longVersion === compiler.longVersion + }) + if (wasmIndex !== -1) { + const URLWasm: string = process && process.env && process.env['NX_WASM_URL'] ? process.env['NX_WASM_URL'] : wasmVersions[wasmIndex].wasmURL || data.baseURLWasm + selectorList[index] = wasmVersions[wasmIndex] + pathToURL[compiler.path] = URLWasm + } else { + const URLBin: string = process && process.env && process.env['NX_BIN_URL'] ? process.env['NX_BIN_URL'] : compiler.binURL || data.baseURLBin + pathToURL[compiler.path] = URLBin + } + }) + data.selectorList = selectorList + data.selectorList.reverse() + data.selectorList.unshift(builtin) + setState((prevState) => { + return { ...prevState, solJsonBinData: data } + }) + } + + const setConfigFilePath = (path: string) => { setState((prevState) => { - return {...prevState, configFilePath: path} + return { ...prevState, configFilePath: path } }) } const toast = (message: string) => { setState((prevState) => { - return {...prevState, toasterMsg: message} + return { ...prevState, toasterMsg: message } }) } const updateCurrentVersion = (value) => { setCurrentVersion(value) - api.setCompilerParameters({version: value}) } const modal = async ( @@ -181,7 +226,7 @@ export const SolidityCompiler = (props: SolidityCompilerProps) => { const handleHideModal = () => { setState((prevState) => { - return {...prevState, modal: {...state.modal, hide: true, message: null}} + return { ...prevState, modal: { ...state.modal, hide: true, message: null } } }) } @@ -203,6 +248,12 @@ export const SolidityCompiler = (props: SolidityCompilerProps) => {
) + useEffect(() => { + if(!state.solJsonBinData && api.solJsonBinData){ + setSolJsonBinData(api.solJsonBinData) + } + },[]) + return ( <>
@@ -222,6 +273,7 @@ export const SolidityCompiler = (props: SolidityCompilerProps) => { configurationSettings={configurationSettings} configFilePath={state.configFilePath} setConfigFilePath={setConfigFilePath} + solJsonBinData={state.solJsonBinData} /> {contractsFile[currentFile] && contractsFile[currentFile].contractsDetails && ( @@ -256,10 +308,10 @@ export const SolidityCompiler = (props: SolidityCompilerProps) => { compileErrors[currentFile].errors.map((err, index) => { if (hideWarnings) { if (err.severity !== 'warning') { - return + return } } else { - return + return } })} diff --git a/libs/remix-ui/solidity-compiler/src/lib/types/index.ts b/libs/remix-ui/solidity-compiler/src/lib/types/index.ts index 4b991c0f4c..691a63150c 100644 --- a/libs/remix-ui/solidity-compiler/src/lib/types/index.ts +++ b/libs/remix-ui/solidity-compiler/src/lib/types/index.ts @@ -1,4 +1,4 @@ -import { ICompilerApi, ConfigurationSettings } from '@remix-project/remix-lib' +import { ICompilerApi, ConfigurationSettings, iSolJsonBinData } from '@remix-project/remix-lib' import { CompileTabLogic } from '../logic/compileTabLogic' export type onCurrentFileChanged = (fileName: string) => void @@ -20,8 +20,11 @@ export interface CompilerContainerProps { updateCurrentVersion: any, configurationSettings: ConfigurationSettings, configFilePath: string, - setConfigFilePath: (path: string) => void + setConfigFilePath: (path: string) => void, + solJsonBinData: iSolJsonBinData } + + export interface ContractSelectionProps { api: ICompilerApi, compiledFileName: string, diff --git a/libs/remix-ui/solidity-uml-gen/src/lib/solidity-uml-gen.tsx b/libs/remix-ui/solidity-uml-gen/src/lib/solidity-uml-gen.tsx index fa21607c1c..95893b64e1 100644 --- a/libs/remix-ui/solidity-uml-gen/src/lib/solidity-uml-gen.tsx +++ b/libs/remix-ui/solidity-uml-gen/src/lib/solidity-uml-gen.tsx @@ -1,7 +1,7 @@ import React, {Fragment, useCallback, useEffect, useState} from 'react' import {FormattedMessage} from 'react-intl' import {TransformComponent, TransformWrapper} from 'react-zoom-pan-pinch' -import {GlassMagnifier, MagnifierContainer} from 'react-image-magnifiers' +import {GlassMagnifier, MagnifierContainer} from '@ricarso/react-image-magnifiers' import {ThemeSummary} from '../types' import UmlDownload from './components/UmlDownload' import './css/solidity-uml-gen.css' diff --git a/libs/remix-ui/solidity-unit-testing/src/lib/solidity-unit-testing.tsx b/libs/remix-ui/solidity-unit-testing/src/lib/solidity-unit-testing.tsx index 8018b23e69..3a916beded 100644 --- a/libs/remix-ui/solidity-unit-testing/src/lib/solidity-unit-testing.tsx +++ b/libs/remix-ui/solidity-unit-testing/src/lib/solidity-unit-testing.tsx @@ -1,4 +1,4 @@ -import React, { useState, useRef, useEffect, ReactElement } from 'react' // eslint-disable-line +import React, { useState, useRef, useEffect, ReactElement, useContext } from 'react' // eslint-disable-line import { FormattedMessage, useIntl } from 'react-intl' import * as semver from 'semver' import { eachOfSeries } from 'async' // eslint-disable-line @@ -9,6 +9,9 @@ import { Toaster } from '@remix-ui/toaster' // eslint-disable-line import { format } from 'util' import './css/style.css' import { CustomTooltip } from '@remix-ui/helper' +import { appPlatformTypes, platformContext } from '@remix-ui/app' + + const _paq = ((window as any)._paq = (window as any)._paq || []) // eslint-disable-line @typescript-eslint/no-explicit-any @@ -43,7 +46,7 @@ interface FinalResult { export const SolidityUnitTesting = (props: Record) => { // eslint-disable-line @typescript-eslint/no-explicit-any - + const platform = useContext(platformContext) const { helper, testTab, initialPath } = props const { testTabLogic } = testTab @@ -172,10 +175,10 @@ export const SolidityUnitTesting = (props: Record) => { return tmp ? tmp[1] : version } - testTab.fileManager.events.on('noFileSelected', async () => { + testTab.on('fileManager', 'noFileSelected', async () => { await updateForNewCurrent() }) - testTab.fileManager.events.on('currentFileChanged', async (file: string) => { + testTab.on('fileManager', 'currentFileChanged', async (file: string) => { await updateForNewCurrent(file) }) testTab.on('solidity', 'compilerLoaded', async (version: string, license: string) => { @@ -611,7 +614,7 @@ export const SolidityUnitTesting = (props: Record) => { currentCompilerUrl, evmVersion, optimize, - usingWorker: canUseWorker(currentVersion), + usingWorker: canUseWorker(currentVersion) || platform === appPlatformTypes.desktop, runs, } const deployCb = async (file: string, contractAddress: string) => { diff --git a/libs/remix-ui/static-analyser/src/staticanalyser.d.ts b/libs/remix-ui/static-analyser/src/staticanalyser.d.ts index 91ab488009..df314ede72 100644 --- a/libs/remix-ui/static-analyser/src/staticanalyser.d.ts +++ b/libs/remix-ui/static-analyser/src/staticanalyser.d.ts @@ -2,7 +2,7 @@ import { CompilationResult, SourceWithTarget } from '@remixproject/plugin-api' import { ViewPlugin } from '@remixproject/engine-web'; import { EventEmitter } from 'events'; -import Registry from '../state/registry'; +import {Registry} from '@remix-project/remix-lib'; export declare class AnalysisTab extends ViewPlugin { event: EventManager; events: EventEmitter; diff --git a/libs/remix-ui/terminal/src/lib/remix-ui-terminal.tsx b/libs/remix-ui/terminal/src/lib/remix-ui-terminal.tsx index f726aef84a..88c55a465e 100644 --- a/libs/remix-ui/terminal/src/lib/remix-ui-terminal.tsx +++ b/libs/remix-ui/terminal/src/lib/remix-ui-terminal.tsx @@ -94,7 +94,7 @@ export const RemixUiTerminal = (props: RemixUiTerminalProps) => { const intl = useIntl() const scrollToBottom = () => { - messagesEndRef.current.scrollIntoView({ behavior: 'smooth' }) + messagesEndRef.current && messagesEndRef.current.scrollIntoView({ behavior: 'smooth' }) } useEffect(() => { @@ -579,63 +579,64 @@ export const RemixUiTerminal = (props: RemixUiTerminalProps) => { const classNameBlock = 'remix_ui_terminal_block px-4 py-1 text-break' return ( -
-
-
- : } - > - - -
- }> - - -
- }> -
0
-
-
- - + ( !props.visible? <>: +
+
+
+ : } + > + - - +
+ }> + + +
+ }> +
0
-
-
- - setSearchInput(event.target.value.trim())} - type="text" - className="remix_ui_terminal_filter border form-control" - id="searchInput" - placeholder={intl.formatMessage({ id: 'terminal.search' })} - data-id="terminalInputSearch" - /> +
+ + + + + + +
+
+ + setSearchInput(event.target.value.trim())} + type="text" + className="remix_ui_terminal_filter border form-control" + id="searchInput" + placeholder={intl.formatMessage({ id: 'terminal.search' })} + data-id="terminalInputSearch" + /> +
-
-
- {handleAutoComplete()} -
-
- {!clearConsole && } - {newstate.journalBlocks && +
+ {handleAutoComplete()} +
+
+ {!clearConsole && } + {newstate.journalBlocks && newstate.journalBlocks.map((x, index) => { if (x.name === EMPTY_BLOCK) { return ( @@ -772,41 +773,41 @@ export const RemixUiTerminal = (props: RemixUiTerminalProps) => { } } })} -
-
- {isOpen && ( -
- {'>'} - onChange(event)} - onKeyDown={(event) => handleKeyDown(event)} - value={autoCompletState.userInput} - onPaste={handlePaste} - > +
- )} + {isOpen && ( +
+ {'>'} + onChange(event)} + onKeyDown={(event) => handleKeyDown(event)} + value={autoCompletState.userInput} + onPaste={handlePaste} + > +
+ )} +
+ + {toaster && } + {toastProvider.show && }
- - {toaster && } - {toastProvider.show && } -
- ) + )) } const typewrite = (elementsRef, message, callback) => { diff --git a/libs/remix-ui/terminal/src/lib/types/terminalTypes.ts b/libs/remix-ui/terminal/src/lib/types/terminalTypes.ts index d9537fcfd4..29d5af476a 100644 --- a/libs/remix-ui/terminal/src/lib/types/terminalTypes.ts +++ b/libs/remix-ui/terminal/src/lib/types/terminalTypes.ts @@ -28,5 +28,6 @@ export const CMD_HISTORY = 'cmdHistory' export interface RemixUiTerminalProps { plugin: any, - onReady: (api: any) => void + onReady: (api: any) => void, + visible: boolean, } diff --git a/libs/remix-ui/tooltip-popup/src/lib/tooltip-popup.tsx b/libs/remix-ui/tooltip-popup/src/lib/tooltip-popup.tsx index 4d4a7f3c2a..ea6f875141 100644 --- a/libs/remix-ui/tooltip-popup/src/lib/tooltip-popup.tsx +++ b/libs/remix-ui/tooltip-popup/src/lib/tooltip-popup.tsx @@ -5,10 +5,10 @@ import './tooltip-popup.module.css' const popover = (title?: string, content?: string | React.ReactNode) => ( - + {title || 'Tooltip'} - - {content} + + {content} ) diff --git a/libs/remix-ui/tree-view/src/lib/remix-ui-tree-view.tsx b/libs/remix-ui/tree-view/src/lib/remix-ui-tree-view.tsx index e1deb79ea3..fe7749e4ea 100644 --- a/libs/remix-ui/tree-view/src/lib/remix-ui-tree-view.tsx +++ b/libs/remix-ui/tree-view/src/lib/remix-ui-tree-view.tsx @@ -1,4 +1,4 @@ -import React from 'react' // eslint-disable-line +import React, { useEffect } from 'react' // eslint-disable-line import {TreeViewProps} from '../types' import './remix-ui-tree-view.css' diff --git a/libs/remix-ui/vertical-icons-panel/src/lib/remix-ui-vertical-icons-panel.tsx b/libs/remix-ui/vertical-icons-panel/src/lib/remix-ui-vertical-icons-panel.tsx index 96f655ff50..453a1ddbc7 100644 --- a/libs/remix-ui/vertical-icons-panel/src/lib/remix-ui-vertical-icons-panel.tsx +++ b/libs/remix-ui/vertical-icons-panel/src/lib/remix-ui-vertical-icons-panel.tsx @@ -1,11 +1,13 @@ -import React, {Fragment, useEffect, useReducer, useRef, useState} from 'react' -import {Plugin} from '@remixproject/engine' +import React, { Fragment, useContext, useEffect, useReducer, useRef, useState } from 'react' +import { Plugin } from '@remixproject/engine' import './remix-ui-vertical-icons-panel.css' import IconList from './components/IconList' import Home from './components/Home' -import {verticalScrollReducer} from './reducers/verticalScrollReducer' -import {Chevron} from './components/Chevron' -import {IconRecord} from './types' +import { verticalScrollReducer } from './reducers/verticalScrollReducer' +import { Chevron } from './components/Chevron' +import { IconRecord } from './types' +import { onLineContext } from '@remix-ui/app' +import { CustomTooltip } from '@remix-ui/helper' export interface RemixUiVerticalIconsPanelProps { verticalIconsPlugin: Plugin icons: IconRecord[] @@ -17,11 +19,12 @@ const initialState = { scrollState: false } -const RemixUiVerticalIconsPanel = ({verticalIconsPlugin, icons}: RemixUiVerticalIconsPanelProps) => { +const RemixUiVerticalIconsPanel = ({ verticalIconsPlugin, icons }: RemixUiVerticalIconsPanelProps) => { const scrollableRef = useRef() const iconPanelRef = useRef() const [activateScroll, dispatchScrollAction] = useReducer(verticalScrollReducer, initialState) const [theme, setTheme] = useState('dark') + const online = useContext(onLineContext) const evaluateScrollability = () => { dispatchScrollAction({ @@ -115,6 +118,20 @@ const RemixUiVerticalIconsPanel = ({verticalIconsPlugin, icons}: RemixUiVertical verticalIconsPlugin={verticalIconsPlugin} itemContextAction={itemContextAction} /> + {online ? + + + + : + + + }
diff --git a/libs/remix-ui/workspace/src/lib/actions/events.ts b/libs/remix-ui/workspace/src/lib/actions/events.ts index 526bc2c467..932285bddf 100644 --- a/libs/remix-ui/workspace/src/lib/actions/events.ts +++ b/libs/remix-ui/workspace/src/lib/actions/events.ts @@ -1,5 +1,6 @@ import { fileDecoration } from '@remix-ui/file-decorators' import { extractParentFromKey } from '@remix-ui/helper' +import isElectron from 'is-electron' import React from 'react' import { action, FileTree, WorkspaceTemplate } from '../types' import { ROOT_PATH } from '../utils/constants' @@ -53,6 +54,7 @@ export const listenOnPluginEvents = (filePanelPlugin) => { }) plugin.on('fileManager', 'rootFolderChanged', async (path: string) => { + console.log('rootFolderChanged', path) rootFolderChanged(path) }) @@ -100,6 +102,10 @@ export const listenOnProviderEvents = (provider) => (reducerDispatch: React.Disp await switchToWorkspace(workspaceProvider.workspace) }) + provider.event.on('refresh', () => { + fetchWorkspaceDirectory('/') + }) + provider.event.on('connected', () => { plugin.fileManager.setMode('localhost') dispatch(setMode('localhost')) @@ -112,7 +118,7 @@ export const listenOnProviderEvents = (provider) => (reducerDispatch: React.Disp dispatch(loadLocalhostRequest()) }) - provider.event.on('fileExternallyChanged', (path: string, content: string) => { + provider.event.on('fileExternallyChanged', (path: string, content: string, showAlert: boolean = true) => { const config = plugin.registry.get('config').api const editor = plugin.registry.get('editor').api @@ -121,14 +127,17 @@ export const listenOnProviderEvents = (provider) => (reducerDispatch: React.Disp if (config.get('currentFile') === path) { // if it's the current file and the content is different: - dispatch(displayNotification( - path + ' changed', - 'This file has been changed outside of Remix IDE.', - 'Replace by the new content', 'Keep the content displayed in Remix', - () => { - editor.setText(path, content) - } - )) + if(showAlert){ + dispatch(displayNotification( + path + ' changed', + 'This file has been changed outside of Remix IDE.', + 'Replace by the new content', 'Keep the content displayed in Remix', + () => { + editor.setText(path, content) + } + ))}else{ + editor.setText(path, content) + } } else { // this isn't the current file, we can silently update the model editor.setText(path, content) @@ -167,6 +176,13 @@ const removePluginActions = (plugin, cb: (err: Error, result?: string | number | } const fileAdded = async (filePath: string) => { + if (isElectron()) { + const path = extractParentFromKey(filePath) || ROOT_PATH + const isExpanded = await plugin.call('filePanel', 'isExpanded', path) + + if (!isExpanded) return + } + await dispatch(fileAddedSuccess(filePath)) if (filePath.includes('_test.sol')) { plugin.emit('newTestFileCreated', filePath) @@ -176,7 +192,11 @@ const fileAdded = async (filePath: string) => { const folderAdded = async (folderPath: string) => { const provider = plugin.fileManager.currentFileProvider() const path = extractParentFromKey(folderPath) || ROOT_PATH - + if (isElectron()) { + const isExpanded = await plugin.call('filePanel', 'isExpanded', path) + if (!isExpanded) return + } + const promise: Promise = new Promise((resolve) => { provider.resolveDirectory(path, (error, fileTree: FileTree) => { if (error) console.error(error) @@ -200,6 +220,7 @@ const fileRemoved = async (removePath: string) => { const fileRenamed = async (oldPath: string) => { const provider = plugin.fileManager.currentFileProvider() const path = extractParentFromKey(oldPath) || ROOT_PATH + const promise: Promise = new Promise((resolve) => { provider.resolveDirectory(path, (error, fileTree: FileTree) => { if (error) console.error(error) diff --git a/libs/remix-ui/workspace/src/lib/actions/index.ts b/libs/remix-ui/workspace/src/lib/actions/index.ts index 2285090e6d..1395ae06d4 100644 --- a/libs/remix-ui/workspace/src/lib/actions/index.ts +++ b/libs/remix-ui/workspace/src/lib/actions/index.ts @@ -2,14 +2,14 @@ import React from 'react' import { extractNameFromKey, createNonClashingNameAsync } from '@remix-ui/helper' import Gists from 'gists' import { customAction } from '@remixproject/plugin-api' -import { displayNotification, displayPopUp, fetchDirectoryError, fetchDirectoryRequest, fetchDirectorySuccess, focusElement, fsInitializationCompleted, hidePopUp, removeInputFieldSuccess, setCurrentWorkspace, setExpandPath, setMode, setWorkspaces } from './payload' +import { displayNotification, displayPopUp, fetchDirectoryError, fetchDirectoryRequest, fetchDirectorySuccess, focusElement, fsInitializationCompleted, hidePopUp, removeInputFieldSuccess, setCurrentLocalFilePath, setCurrentWorkspace, setExpandPath, setMode, setWorkspaces } from './payload' import { listenOnPluginEvents, listenOnProviderEvents } from './events' import { createWorkspaceTemplate, getWorkspaces, loadWorkspacePreset, setPlugin, workspaceExists } from './workspace' import { QueryParams } from '@remix-project/remix-lib' import { fetchContractFromEtherscan } from '@remix-project/core-plugin' // eslint-disable-line import JSZip from 'jszip' -import isElectron from 'is-electron' import { Actions, FileTree } from '../types' +import {Registry} from '@remix-project/remix-lib' export * from './events' export * from './workspace' @@ -24,6 +24,7 @@ export type UrlParametersType = { code: string, url: string, address: string + opendir: string, } const basicWorkspaceInit = async (workspaces: { name: string; isGitRepo: boolean; }[], workspaceProvider) => { @@ -51,9 +52,24 @@ export const initWorkspace = (filePanelPlugin) => async (reducerDispatch: React. setPlugin(plugin, dispatch) const workspaceProvider = filePanelPlugin.fileProviders.workspace const localhostProvider = filePanelPlugin.fileProviders.localhost + const electrOnProvider = filePanelPlugin.fileProviders.electron const params = queryParams.get() as UrlParametersType - const workspaces = await getWorkspaces() || [] - dispatch(setWorkspaces(workspaces)) + let editorMounted = false + let filePathToOpen = null + let workspaces = [] + plugin.on('editor', 'editorMounted', async () => { + editorMounted = true + if(filePathToOpen){ + setTimeout(async () => { + await plugin.fileManager.openFile(filePathToOpen) + filePathToOpen = null + }, 1000) + } + }) + if (!(Registry.getInstance().get('platform').api.isDesktop())) { + workspaces = await getWorkspaces() || [] + dispatch(setWorkspaces(workspaces)) + } if (params.gist) { await createWorkspaceTemplate('code-sample', 'gist-template') plugin.setWorkspace({ name: 'code-sample', isLocalhost: false }) @@ -64,7 +80,14 @@ export const initWorkspace = (filePanelPlugin) => async (reducerDispatch: React. plugin.setWorkspace({ name: 'code-sample', isLocalhost: false }) dispatch(setCurrentWorkspace({ name: 'code-sample', isGitRepo: false })) const filePath = await loadWorkspacePreset('code-template') - plugin.on('editor', 'editorMounted', async () => await plugin.fileManager.openFile(filePath)) + plugin.on('filePanel', 'workspaceInitializationCompleted', async () => { + if (editorMounted){ + setTimeout(async () => { + await plugin.fileManager.openFile(filePath)}, 1000) + }else{ + filePathToOpen = filePath + } + }) } else if (params.address) { if (params.address.startsWith('0x') && params.address.length === 42) { const contractAddress = params.address @@ -75,11 +98,11 @@ export const initWorkspace = (filePanelPlugin) => async (reducerDispatch: React. let etherscanKey = await plugin.call('config', 'getAppParameter', 'etherscan-access-token') if (!etherscanKey) etherscanKey = '2HKUX5ZVASZIKWJM8MIQVCRUVZ6JAWT531' const networks = [ - {id: 1, name: 'mainnet'}, - {id: 3, name: 'ropsten'}, - {id: 4, name: 'rinkeby'}, - {id: 42, name: 'kovan'}, - {id: 5, name: 'goerli'} + { id: 1, name: 'mainnet' }, + { id: 3, name: 'ropsten' }, + { id: 4, name: 'rinkeby' }, + { id: 42, name: 'kovan' }, + { id: 5, name: 'goerli' } ] let found = false const workspaceName = 'code-sample' @@ -107,16 +130,39 @@ export const initWorkspace = (filePanelPlugin) => async (reducerDispatch: React. for (filePath in data.compilationTargets) await workspaceProvider.set(filePath, data.compilationTargets[filePath]['content']) } - plugin.on('editor', 'editorMounted', async () => await plugin.fileManager.openFile(filePath)) - plugin.call('notification', 'toast', `Added ${count} verified contract${count === 1 ? '': 's'} from ${foundOnNetworks.join(',')} network${foundOnNetworks.length === 1 ? '': 's'} of Etherscan for contract address ${contractAddress} !!`) + + plugin.on('filePanel', 'workspaceInitializationCompleted', async () => { + if (editorMounted){ + setTimeout(async () => { + await plugin.fileManager.openFile(filePath)}, 1000) + }else{ + filePathToOpen = filePath + } + }) + plugin.call('notification', 'toast', `Added ${count} verified contract${count === 1 ? '' : 's'} from ${foundOnNetworks.join(',')} network${foundOnNetworks.length === 1 ? '' : 's'} of Etherscan for contract address ${contractAddress} !!`) } catch (error) { await basicWorkspaceInit(workspaces, workspaceProvider) } } else await basicWorkspaceInit(workspaces, workspaceProvider) - } else if (isElectron()) { - plugin.call('notification', 'toast', `connecting to localhost...`) - await basicWorkspaceInit(workspaces, workspaceProvider) - await plugin.call('manager', 'activatePlugin', 'remixd') + } else if (Registry.getInstance().get('platform').api.isDesktop()) { + if (params.opendir) { + params.opendir = decodeURIComponent(params.opendir) + plugin.call('notification', 'toast', `opening ${params.opendir}...`) + await plugin.call('fs', 'setWorkingDir', params.opendir) + } + const currentPath = await plugin.call('fs', 'getWorkingDir') + dispatch(setCurrentLocalFilePath(currentPath)) + plugin.setWorkspace({ name: 'electron', isLocalhost: false }) + + dispatch(setCurrentWorkspace({ name: 'electron', isGitRepo: false })) + electrOnProvider.init() + listenOnProviderEvents(electrOnProvider)(dispatch) + listenOnPluginEvents(plugin) + dispatch(setMode('browser')) + dispatch(fsInitializationCompleted()) + plugin.emit('workspaceInitializationCompleted') + return + } else if (localStorage.getItem("currentWorkspace")) { const index = workspaces.findIndex(element => element.name == localStorage.getItem("currentWorkspace")) if (index !== -1) { @@ -124,10 +170,10 @@ export const initWorkspace = (filePanelPlugin) => async (reducerDispatch: React. workspaceProvider.setWorkspace(name) plugin.setWorkspace({ name: name, isLocalhost: false }) dispatch(setCurrentWorkspace({ name: name, isGitRepo: false })) - }else{ + } else { _paq.push(['trackEvent', 'Storage', 'error', `Workspace in localstorage not found: ${localStorage.getItem("currentWorkspace")}`]) await basicWorkspaceInit(workspaces, workspaceProvider) - } + } } else { await basicWorkspaceInit(workspaces, workspaceProvider) } @@ -135,7 +181,13 @@ export const initWorkspace = (filePanelPlugin) => async (reducerDispatch: React. listenOnPluginEvents(plugin) listenOnProviderEvents(workspaceProvider)(dispatch) listenOnProviderEvents(localhostProvider)(dispatch) - dispatch(setMode('browser')) + listenOnProviderEvents(electrOnProvider)(dispatch) + if (Registry.getInstance().get('platform').api.isDesktop()) { + dispatch(setMode('browser')) + } else { + dispatch(setMode('browser')) + } + plugin.setWorkspaces(await getWorkspaces()) dispatch(fsInitializationCompleted()) plugin.emit('workspaceInitializationCompleted') @@ -182,11 +234,11 @@ export const publishToGist = async (path?: string, type?: string) => { const accessToken = config.get('settings/gist-access-token') if (!accessToken) { - dispatch(displayNotification('Authorize Token', 'Remix requires an access token (which includes gists creation permission). Please go to the settings tab to create one.', 'Close', null, () => {})) + dispatch(displayNotification('Authorize Token', 'Remix requires an access token (which includes gists creation permission). Please go to the settings tab to create one.', 'Close', null, () => { })) } else { const params = queryParams.get() as SolidityConfiguration const description = 'Created using remix-ide: Realtime Ethereum Contract Compiler and Runtime. \n Load this file by pasting this gists URL or ID at https://remix.ethereum.org/#version=' + - params.version + '&optimize=' + params.optimize + '&runs=' + params.runs + '&gist=' + params.version + '&optimize=' + params.optimize + '&runs=' + params.runs + '&gist=' const gists = new Gists({ token: accessToken }) if (id) { @@ -234,7 +286,7 @@ export const publishToGist = async (path?: string, type?: string) => { } } catch (error) { console.log(error) - dispatch(displayNotification('Publish to gist Failed', 'Failed to create gist: ' + error.message, 'Close', null, async () => {})) + dispatch(displayNotification('Publish to gist Failed', 'Failed to create gist: ' + error.message, 'Close', null, async () => { })) } } @@ -250,8 +302,9 @@ export const createNewFile = async (path: string, rootDir: string) => { if (!createFile) { return dispatch(displayPopUp('Failed to create file ' + newName)) } else { - const path = newName.indexOf(rootDir + '/') === 0 ? newName.replace(rootDir + '/', '') : newName - + let path = newName.indexOf(rootDir + '/') === 0 ? newName.replace(rootDir + '/', '') : newName + // remove leading slash + path = path.indexOf('/') === 0 ? path.slice(1) : path await fileManager.open(path) setFocusElement([{ key: path, type: 'file' }]) } @@ -267,10 +320,12 @@ export const createNewFolder = async (path: string, rootDir: string) => { const exists = await fileManager.exists(dirName) if (exists) { - return dispatch(displayNotification('Failed to create folder', `A folder ${extractNameFromKey(path)} already exists at this location. Please choose a different name.`, 'Close', null, () => {})) + return dispatch(displayNotification('Failed to create folder', `A folder ${extractNameFromKey(path)} already exists at this location. Please choose a different name.`, 'Close', null, () => { })) } await fileManager.mkdir(dirName) path = path.indexOf(rootDir + '/') === 0 ? path.replace(rootDir + '/', '') : path + // remove leading slash + path = path.indexOf('/') === 0 ? path.slice(1) : path dispatch(focusElement([{ key: path, type: 'folder' }])) } @@ -293,7 +348,7 @@ export const renamePath = async (oldPath: string, newPath: string) => { const exists = await fileManager.exists(newPath) if (exists) { - dispatch(displayNotification('Rename File Failed', `A file or folder ${extractNameFromKey(newPath)} already exists at this location. Please choose a different name.`, 'Close', null, () => {})) + dispatch(displayNotification('Rename File Failed', `A file or folder ${extractNameFromKey(newPath)} already exists at this location. Please choose a different name.`, 'Close', null, () => { })) } else { await fileManager.rename(oldPath, newPath) } @@ -354,6 +409,7 @@ export const handleClickFile = async (path: string, type: 'file' | 'folder' | 'g } export const handleExpandPath = (paths: string[]) => { + plugin.emit('expandPathChanged', paths) dispatch(setExpandPath(paths)) } @@ -456,7 +512,7 @@ const handleGistResponse = (error, data) => { if (data.html_url) { dispatch(displayNotification('Gist is ready', `The gist is at ${data.html_url}. Would you like to open it in a new window?`, 'OK', 'Cancel', () => { window.open(data.html_url, '_blank') - }, () => {})) + }, () => { })) } else { const error = JSON.stringify(data.errors, null, '\t') || '' const message = data.message === 'Not Found' ? data.message + '. Please make sure the API token has right to create a gist.' : data.message diff --git a/libs/remix-ui/workspace/src/lib/actions/payload.ts b/libs/remix-ui/workspace/src/lib/actions/payload.ts index e023c4eaf7..c19e93f4c5 100644 --- a/libs/remix-ui/workspace/src/lib/actions/payload.ts +++ b/libs/remix-ui/workspace/src/lib/actions/payload.ts @@ -307,3 +307,17 @@ export const setGitConfig = (config: {username: string, token: string, email: st payload: config } } + +export const setElectronRecentFolders = (folders: string[]): Action<'SET_ELECTRON_RECENT_FOLDERS'> => { + return { + type: 'SET_ELECTRON_RECENT_FOLDERS', + payload: folders + } +} + +export const setCurrentLocalFilePath = (path: string): Action<'SET_CURRENT_LOCAL_FILE_PATH'> => { + return { + type: 'SET_CURRENT_LOCAL_FILE_PATH', + payload: path + } +} diff --git a/libs/remix-ui/workspace/src/lib/actions/workspace.ts b/libs/remix-ui/workspace/src/lib/actions/workspace.ts index a40e0a53a7..3a932a8f9d 100644 --- a/libs/remix-ui/workspace/src/lib/actions/workspace.ts +++ b/libs/remix-ui/workspace/src/lib/actions/workspace.ts @@ -27,7 +27,9 @@ import { setRenameWorkspace, setCurrentWorkspaceIsGitRepo, setGitConfig, + setElectronRecentFolders, setCurrentWorkspaceHasGitSubmodules, + setCurrentLocalFilePath, } from './payload' import { addSlash, checkSlash, checkSpecialChars } from '@remix-ui/helper' @@ -49,6 +51,7 @@ declare global { const LOCALHOST = ' - connect to localhost - ' const NO_WORKSPACE = ' - none - ' +const ELECTRON = 'electron' const queryParams = new QueryParams() const _paq = (window._paq = window._paq || []) //eslint-disable-line let plugin, dispatch: React.Dispatch @@ -85,6 +88,11 @@ export const setPlugin = (filePanelPlugin, reducerDispatch) => { await checkGit() } }) + plugin.on('fs', 'workingDirChanged', async (dir: string) => { + dispatch(setCurrentLocalFilePath(dir)) + await checkGit() + }) + checkGit() getGitConfig() } @@ -125,6 +133,12 @@ export const createWorkspace = async ( isGitRepo: boolean = false, createCommit: boolean = true ) => { + if (plugin.registry.get('platform').api.isDesktop()) { + if (workspaceTemplateName) { + await plugin.call('remix-templates', 'loadTemplateInNewWindow', workspaceTemplateName, opts) + } + return + } await plugin.fileManager.closeAllFiles() const metadata = TEMPLATE_METADATA[workspaceTemplateName] const promise = createWorkspaceTemplate(workspaceName, workspaceTemplateName, metadata) @@ -226,6 +240,7 @@ export type UrlParametersType = { export const loadWorkspacePreset = async (template: WorkspaceTemplate = 'remixDefault', opts?) => { const workspaceProvider = plugin.fileProviders.workspace + const electronProvider = plugin.fileProviders.electron const params = queryParams.get() as UrlParametersType switch (template) { @@ -362,11 +377,14 @@ export const workspaceExists = async (name: string) => { } export const fetchWorkspaceDirectory = async (path: string) => { + if (!path) return const provider = plugin.fileManager.currentFileProvider() - const promise: Promise = new Promise((resolve) => { + const promise: Promise = new Promise((resolve, reject) => { provider.resolveDirectory(path, (error, fileTree: FileTree) => { - if (error) console.error(error) + if (error) { + reject(error) + } resolve(fileTree) }) }) @@ -440,6 +458,12 @@ export const switchToWorkspace = async (name: string) => { // if there is no other workspace, create remix default workspace plugin.call('notification', 'toast', `No workspace found! Creating default workspace ....`) await createWorkspace('default_workspace', 'remixDefault') + } else if (name === ELECTRON) { + await plugin.fileProviders.workspace.setWorkspace(name) + await plugin.setWorkspace({ name, isLocalhost: false }) + dispatch(setMode('browser')) + dispatch(setCurrentWorkspace({ name, isGitRepo: false })) + } else { const isActive = await plugin.call('manager', 'isActive', 'remixd') @@ -540,8 +564,8 @@ export const getWorkspaces = async (): Promise<{ name: string; isGitRepo: boolea try { const workspaces: { name: string; isGitRepo: boolean; hasGitSubmodules: boolean; branches?: { remote: any; name: string }[]; currentBranch?: string }[] = await new Promise((resolve, reject) => { const workspacesPath = plugin.fileProviders.workspace.workspacesPath - plugin.fileProviders.browser.resolveDirectory('/' + workspacesPath, (error, items) => { + if (error) { return reject(error) } @@ -585,60 +609,73 @@ export const cloneRepository = async (url: string) => { const token = config.get('settings/gist-access-token') const repoConfig = { url, token } - try { - const repoName = await getRepositoryTitle(url) + if (plugin.registry.get('platform').api.isDesktop()) { + try { + await plugin.call('dGitProvider', 'clone', repoConfig) + } catch (e) { + console.log(e) + plugin.call('notification', 'alert', { + id: 'cloneGitRepository', + message: e + }) + } + } else { + try { + const repoName = await getRepositoryTitle(url) - await createWorkspace(repoName, 'blank', null, true, null, true, false) - const promise = plugin.call('dGitProvider', 'clone', repoConfig, repoName, true) + await createWorkspace(repoName, 'blank', null, true, null, true, false) + const promise = plugin.call('dGitProvider', 'clone', repoConfig, repoName, true) - dispatch(cloneRepositoryRequest()) - promise - .then(async () => { - const isActive = await plugin.call('manager', 'isActive', 'dgit') + dispatch(cloneRepositoryRequest()) + promise + .then(async () => { + const isActive = await plugin.call('manager', 'isActive', 'dgit') - if (!isActive) await plugin.call('manager', 'activatePlugin', 'dgit') - await fetchWorkspaceDirectory(ROOT_PATH) - const workspacesPath = plugin.fileProviders.workspace.workspacesPath - const branches = await getGitRepoBranches(workspacesPath + '/' + repoName) + if (!isActive) await plugin.call('manager', 'activatePlugin', 'dgit') + await fetchWorkspaceDirectory(ROOT_PATH) + const workspacesPath = plugin.fileProviders.workspace.workspacesPath + const branches = await getGitRepoBranches(workspacesPath + '/' + repoName) - dispatch(setCurrentWorkspaceBranches(branches)) - const currentBranch = await getGitRepoCurrentBranch(workspacesPath + '/' + repoName) + dispatch(setCurrentWorkspaceBranches(branches)) + const currentBranch = await getGitRepoCurrentBranch(workspacesPath + '/' + repoName) - dispatch(setCurrentWorkspaceCurrentBranch(currentBranch)) - dispatch(cloneRepositorySuccess()) - }) - .catch(() => { - const cloneModal = { - id: 'cloneGitRepository', - title: 'Clone Git Repository', - message: + dispatch(setCurrentWorkspaceCurrentBranch(currentBranch)) + dispatch(cloneRepositorySuccess()) + }).catch(() => { + const cloneModal = { + id: 'cloneGitRepository', + title: 'Clone Git Repository', + message: 'An error occurred: Please check that you have the correct URL for the repo. If the repo is private, you need to add your github credentials (with the valid token permissions) in Settings plugin', - modalType: 'modal', - okLabel: 'OK', - okFn: async () => { - await deleteWorkspace(repoName) - dispatch(cloneRepositoryFailed()) - }, - hideFn: async () => { - await deleteWorkspace(repoName) - dispatch(cloneRepositoryFailed()) - }, - } - plugin.call('notification', 'modal', cloneModal) - }) - } catch (e) { - dispatch(displayPopUp('An error occured: ' + e)) + modalType: 'modal', + okLabel: plugin.registry.get('platform').api.isDesktop() ? 'Select or create folder':'OK', + okFn: async () => { + await deleteWorkspace(repoName) + dispatch(cloneRepositoryFailed()) + }, + hideFn: async () => { + await deleteWorkspace(repoName) + dispatch(cloneRepositoryFailed()) + } + } + plugin.call('notification', 'modal', cloneModal) + }) + } catch (e) { + dispatch(displayPopUp('An error occured: ' + e)) + } } } export const checkGit = async () => { - const isGitRepo = await plugin.fileManager.isGitRepo() - const hasGitSubmodule = await plugin.fileManager.hasGitSubmodules() - dispatch(setCurrentWorkspaceIsGitRepo(isGitRepo)) - dispatch(setCurrentWorkspaceHasGitSubmodules(hasGitSubmodule)) - await refreshBranches() - const currentBranch = await plugin.call('dGitProvider', 'currentbranch') - dispatch(setCurrentWorkspaceCurrentBranch(currentBranch)) + try { + const isGitRepo = await plugin.fileManager.isGitRepo() + const hasGitSubmodule = await plugin.fileManager.hasGitSubmodules() + dispatch(setCurrentWorkspaceIsGitRepo(isGitRepo)) + dispatch(setCurrentWorkspaceHasGitSubmodules(hasGitSubmodule)) + await refreshBranches() + const currentBranch = await plugin.call('dGitProvider', 'currentbranch') + dispatch(setCurrentWorkspaceCurrentBranch(currentBranch)) + } catch (e) {} } export const getRepositoryTitle = async (url: string) => { @@ -679,6 +716,7 @@ export const getGitRepoCurrentBranch = async (workspaceName: string) => { } export const showAllBranches = async () => { + const isActive = await plugin.call('manager', 'isActive', 'dgit') if (!isActive) await plugin.call('manager', 'activatePlugin', 'dgit') plugin.call('menuicons', 'select', 'dgit') @@ -864,6 +902,21 @@ export const checkoutRemoteBranch = async (branch: string, remote: string) => { } } +export const openElectronFolder = async (path: string) => { + await plugin.call('fs', 'openFolderInSameWindow', path) +} + +export const getElectronRecentFolders = async () => { + const folders = await plugin.call('fs', 'getRecentFolders') + dispatch(setElectronRecentFolders(folders)) + return folders +} + +export const removeRecentElectronFolder = async (path: string) => { + await plugin.call('fs', 'removeRecentFolder', path) + await getElectronRecentFolders() +} + export const hasLocalChanges = async () => { const filesStatus = await plugin.call('dGitProvider', 'status') const uncommittedFiles = getUncommittedFiles(filesStatus) diff --git a/libs/remix-ui/workspace/src/lib/components/electron-menu.tsx b/libs/remix-ui/workspace/src/lib/components/electron-menu.tsx new file mode 100644 index 0000000000..b5b4eff32b --- /dev/null +++ b/libs/remix-ui/workspace/src/lib/components/electron-menu.tsx @@ -0,0 +1,68 @@ +import React, { MouseEventHandler, useContext, useEffect, useState } from "react" +import { FileSystemContext } from "../contexts" +import { appPlatformTypes, platformContext } from '@remix-ui/app' +import { FormattedMessage } from "react-intl" +import '../css/electron-menu.css' +import { CustomTooltip } from '@remix-ui/helper' + + + +export const ElectronMenu = () => { + const platform = useContext(platformContext) + const global = useContext(FileSystemContext) + + useEffect(() => { + if (platform === appPlatformTypes.desktop) { + global.dispatchGetElectronRecentFolders() + } + }, []) + + const openFolderElectron = async (path: string) => { + global.dispatchOpenElectronFolder(path) + } + + const lastFolderName = (path: string) => { + const pathArray = path.split('/') + return pathArray[pathArray.length - 1] + } + + return ( + (platform !== appPlatformTypes.desktop) ? null : + (global.fs.browser.isSuccessfulWorkspace ? null : + <> +
{ await openFolderElectron(null) }} className='btn btn-primary'>
+ {global.fs.browser.recentFolders.length > 0 ? + <> + +
    + {global.fs.browser.recentFolders.map((folder, index) => { + return
  • + +
    + { await openFolderElectron(folder) }} className="pl-2 recentfolder_name pr-2">{lastFolderName(folder)} + { await openFolderElectron(folder) }} data-id={{ folder }} className="recentfolder_path pr-2">{folder} + { + global.dispatchRemoveRecentFolder(folder) + }} + className="fas fa-times recentfolder_delete pr-2" + > + + +
    +
    +
  • + })} +
+ + : null} + + ) + ) +} \ No newline at end of file diff --git a/libs/remix-ui/workspace/src/lib/components/electron-workspace-name.tsx b/libs/remix-ui/workspace/src/lib/components/electron-workspace-name.tsx new file mode 100644 index 0000000000..96f59a16fe --- /dev/null +++ b/libs/remix-ui/workspace/src/lib/components/electron-workspace-name.tsx @@ -0,0 +1,47 @@ +import { CustomTooltip } from "@remix-ui/helper" +import React from "react" +import path from 'path' + + +interface ElectronWorkspaceNameProps { + path: string + plugin: any +} + +export const ElectronWorkspaceName = (props: ElectronWorkspaceNameProps) => { + const { path: dir } = props + + const parsePath = () => { + const pathArray = dir.split(path.posix.sep) + return pathArray[pathArray.length - 1] + } + + const openInExplorer = () => { + props.plugin.call('fs', 'revealInExplorer', { + path: [dir] + }, true) + } + + return ( + (dir === undefined || dir === '') ? <> : +
+ +
{parsePath()}
+
+ + + +
+ + ) +} diff --git a/libs/remix-ui/workspace/src/lib/components/file-explorer-context-menu.tsx b/libs/remix-ui/workspace/src/lib/components/file-explorer-context-menu.tsx index a11b5ccf41..4fe50450ca 100644 --- a/libs/remix-ui/workspace/src/lib/components/file-explorer-context-menu.tsx +++ b/libs/remix-ui/workspace/src/lib/components/file-explorer-context-menu.tsx @@ -1,10 +1,11 @@ -import React, {useRef, useEffect, useState} from 'react' // eslint-disable-line +import React, {useRef, useEffect, useState, useContext} from 'react' // eslint-disable-line import {useIntl} from 'react-intl' import {action, FileExplorerContextMenuProps} from '../types' import '../css/file-explorer-context-menu.css' import {customAction} from '@remixproject/plugin-api' import UploadFile from './upload-file' +import { appPlatformTypes, platformContext } from '@remix-ui/app' declare global { interface Window { @@ -14,6 +15,7 @@ declare global { const _paq = (window._paq = window._paq || []) //eslint-disable-line export const FileExplorerContextMenu = (props: FileExplorerContextMenuProps) => { + const platform = useContext(platformContext) const { actions, createNewFile, @@ -82,10 +84,11 @@ export const FileExplorerContextMenu = (props: FileExplorerContextMenuProps) => } const itemMatchesCondition = (item: action, itemType: string, itemPath: string) => { - if (item.type && Array.isArray(item.type) && item.type.findIndex((name) => name === itemType) !== -1) return true - else if (item.path && Array.isArray(item.path) && item.path.findIndex((key) => key === itemPath) !== -1) return true - else if (item.extension && Array.isArray(item.extension) && item.extension.findIndex((ext) => itemPath.endsWith(ext)) !== -1) return true - else if (item.pattern && Array.isArray(item.pattern) && item.pattern.filter((value) => itemPath.match(new RegExp(value))).length > 0) return true + if( platform === appPlatformTypes.desktop && item.platform && item.platform === appPlatformTypes.web) return false + else if (item.type && Array.isArray(item.type) && (item.type.findIndex(name => name === itemType) !== -1)) return true + else if (item.path && Array.isArray(item.path) && (item.path.findIndex(key => key === itemPath) !== -1)) return true + else if (item.extension && Array.isArray(item.extension) && (item.extension.findIndex(ext => itemPath.endsWith(ext)) !== -1)) return true + else if (item.pattern && Array.isArray(item.pattern) && (item.pattern.filter(value => itemPath.match(new RegExp(value))).length > 0)) return true else return false } @@ -117,6 +120,7 @@ export const FileExplorerContextMenu = (props: FileExplorerContextMenuProps) => return (
  • { @@ -136,6 +140,7 @@ export const FileExplorerContextMenu = (props: FileExplorerContextMenuProps) => return (
  • { @@ -153,6 +158,7 @@ export const FileExplorerContextMenu = (props: FileExplorerContextMenuProps) => return (
  • { diff --git a/libs/remix-ui/workspace/src/lib/components/file-explorer-menu.tsx b/libs/remix-ui/workspace/src/lib/components/file-explorer-menu.tsx index 89d777f6fd..243f68e1a9 100644 --- a/libs/remix-ui/workspace/src/lib/components/file-explorer-menu.tsx +++ b/libs/remix-ui/workspace/src/lib/components/file-explorer-menu.tsx @@ -1,48 +1,58 @@ import {CustomTooltip} from '@remix-ui/helper' -import React, {useState, useEffect} from 'react' //eslint-disable-line +import React, {useState, useEffect, useContext} from 'react' //eslint-disable-line import {FormattedMessage} from 'react-intl' import {Placement} from 'react-bootstrap/esm/Overlay' import {FileExplorerMenuProps} from '../types' +import { FileSystemContext } from '../contexts' +import { appPlatformTypes, platformContext } from '@remix-ui/app' const _paq = (window._paq = window._paq || []) export const FileExplorerMenu = (props: FileExplorerMenuProps) => { + const global = useContext(FileSystemContext) + const platform = useContext(platformContext) const [state, setState] = useState({ menuItems: [ { action: 'createNewFile', title: 'Create new file', icon: 'far fa-file', - placement: 'top' + placement: 'top', + platforms:[appPlatformTypes.web, appPlatformTypes.desktop] }, { action: 'createNewFolder', title: 'Create new folder', icon: 'far fa-folder', - placement: 'top' + placement: 'top', + platforms:[appPlatformTypes.web, appPlatformTypes.desktop] }, { action: 'publishToGist', title: 'Publish current workspace to GitHub gist', icon: 'fab fa-github', - placement: 'top' + placement: 'top', + platforms:[appPlatformTypes.web] }, { action: 'uploadFile', title: 'Upload files into current workspace', icon: 'far fa-upload', - placement: 'top' + placement: 'top', + platforms:[appPlatformTypes.web] }, { action: 'uploadFolder', title: 'Upload folder into current workspace', icon: 'far fa-folder-upload', - placement: 'top' + placement: 'top', + platforms:[appPlatformTypes.web] }, { action: 'updateGist', title: 'Update the current [gist] explorer', icon: 'fab fa-github', - placement: 'bottom-start' + placement: 'bottom-start', + platforms:[appPlatformTypes.web] } ].filter( (item) => @@ -66,107 +76,110 @@ export const FileExplorerMenu = (props: FileExplorerMenuProps) => { }, []) return ( - <> - - {state.menuItems.map(({action, title, icon, placement}, index) => { - if (action === 'uploadFile') { - return ( - } - key={`index-${action}-${placement}-${icon}`} - > - - - ) - } else if (action === 'uploadFolder') { - return ( - } - key={`index-${action}-${placement}-${icon}`} - > - + + ) + } else if (action === 'uploadFolder') { + return ( + } key={`index-${action}-${placement}-${icon}`} > - { + + + ) + } else { + return ( + } + key={`${action}-${title}-${index}`} + > + - - ) - } else { - return ( - } - key={`${action}-${title}-${index}`} - > - - - ) - } - })} - - + className={icon + ' mx-1 remixui_menuItem'} + key={`${action}-${title}-${index}`} + > + + ) + } + })} + + ) ) } diff --git a/libs/remix-ui/workspace/src/lib/components/file-explorer.tsx b/libs/remix-ui/workspace/src/lib/components/file-explorer.tsx index f2cec10ee1..39e20428d4 100644 --- a/libs/remix-ui/workspace/src/lib/components/file-explorer.tsx +++ b/libs/remix-ui/workspace/src/lib/components/file-explorer.tsx @@ -1,18 +1,16 @@ -import React, {useEffect, useState, useRef, SyntheticEvent} from 'react' // eslint-disable-line -import {useIntl} from 'react-intl' -import {TreeView} from '@remix-ui/tree-view' // eslint-disable-line -import {FileExplorerMenu} from './file-explorer-menu' // eslint-disable-line -import {FileExplorerContextMenu} from './file-explorer-context-menu' // eslint-disable-line -import {FileExplorerProps, FileType, WorkSpaceState, WorkspaceElement} from '../types' +import React, { useEffect, useState, useRef, SyntheticEvent, useTransition } from 'react' // eslint-disable-line +import { useIntl } from 'react-intl' +import { TreeView } from '@remix-ui/tree-view' // eslint-disable-line +import { FileExplorerMenu } from './file-explorer-menu' // eslint-disable-line +import { FileExplorerContextMenu } from './file-explorer-context-menu' // eslint-disable-line +import { FileExplorerProps, FileType, WorkSpaceState, WorkspaceElement } from '../types' import '../css/file-explorer.css' -import {checkSpecialChars, extractNameFromKey, extractParentFromKey, joinPath} from '@remix-ui/helper' +import { checkSpecialChars, extractNameFromKey, extractParentFromKey, getPathIcon, joinPath } from '@remix-ui/helper' // eslint-disable-next-line @typescript-eslint/no-unused-vars -import {FileRender} from './file-render' -import {Drag, Draggable} from '@remix-ui/drag-n-drop' -import {ROOT_PATH} from '../utils/constants' -import { fileKeySort } from '../utils' +import { ROOT_PATH } from '../utils/constants' import { moveFileIsAllowed, moveFolderIsAllowed } from '../actions' +import { FlatTree } from './flat-tree' export const FileExplorer = (props: FileExplorerProps) => { const intl = useIntl() @@ -21,6 +19,7 @@ export const FileExplorer = (props: FileExplorerProps) => { contextMenuItems, removedContextMenuItems, files, + flatTree, workspaceState, toGist, addMenuItems, @@ -33,8 +32,8 @@ export const FileExplorer = (props: FileExplorerProps) => { fileState } = props const [state, setState] = useState(workspaceState) + const [isPending, startTransition] = useTransition(); const treeRef = useRef(null) - const [childrenKeys, setChildrenKeys] = useState([]) useEffect(() => { if (contextMenuItems) { @@ -42,6 +41,8 @@ export const FileExplorer = (props: FileExplorerProps) => { } }, [contextMenuItems]) + + useEffect(() => { if (removedContextMenuItems) { removeMenuItems(removedContextMenuItems) @@ -73,7 +74,7 @@ export const FileExplorer = (props: FileExplorerProps) => { const keyPressHandler = (e: KeyboardEvent) => { if (e.shiftKey) { setState((prevState) => { - return {...prevState, ctrlKey: true} + return { ...prevState, ctrlKey: true } }) } } @@ -81,7 +82,7 @@ export const FileExplorer = (props: FileExplorerProps) => { const keyUpHandler = (e: KeyboardEvent) => { if (!e.shiftKey) { setState((prevState) => { - return {...prevState, ctrlKey: false} + return { ...prevState, ctrlKey: false } }) } } @@ -106,10 +107,10 @@ export const FileExplorer = (props: FileExplorerProps) => { props.dispatchCreateNewFile(newFilePath, ROOT_PATH) } catch (error) { return props.modal( - intl.formatMessage({id: 'filePanel.fileCreationFailed'}), + intl.formatMessage({ id: 'filePanel.fileCreationFailed' }), typeof error === 'string' ? error : error.message, - intl.formatMessage({id: 'filePanel.close'}), - async () => {} + intl.formatMessage({ id: 'filePanel.close' }), + async () => { } ) } } @@ -119,10 +120,10 @@ export const FileExplorer = (props: FileExplorerProps) => { props.dispatchCreateNewFolder(newFolderPath, ROOT_PATH) } catch (e) { return props.modal( - intl.formatMessage({id: 'filePanel.folderCreationFailed'}), + intl.formatMessage({ id: 'filePanel.folderCreationFailed' }), typeof e === 'string' ? e : e.message, - intl.formatMessage({id: 'filePanel.close'}), - async () => {} + intl.formatMessage({ id: 'filePanel.close' }), + async () => { } ) } } @@ -132,22 +133,22 @@ export const FileExplorer = (props: FileExplorerProps) => { props.dispatchRenamePath(oldPath, newPath) } catch (error) { props.modal( - intl.formatMessage({id: 'filePanel.renameFileFailed'}), - intl.formatMessage({id: 'filePanel.renameFileFailedMsg'}, {error: typeof error === 'string' ? error : error.message}), - intl.formatMessage({id: 'filePanel.close'}), - async () => {} + intl.formatMessage({ id: 'filePanel.renameFileFailed' }), + intl.formatMessage({ id: 'filePanel.renameFileFailedMsg' }, { error: typeof error === 'string' ? error : error.message }), + intl.formatMessage({ id: 'filePanel.close' }), + async () => { } ) } } const publishToGist = (path?: string, type?: string) => { props.modal( - intl.formatMessage({id: 'filePanel.createPublicGist'}), - intl.formatMessage({id: 'filePanel.createPublicGistMsg4'}, {name}), - intl.formatMessage({id: 'filePanel.ok'}), + intl.formatMessage({ id: 'filePanel.createPublicGist' }), + intl.formatMessage({ id: 'filePanel.createPublicGistMsg4' }, { name }), + intl.formatMessage({ id: 'filePanel.ok' }), () => toGist(path, type), - intl.formatMessage({id: 'filePanel.cancel'}), - () => {} + intl.formatMessage({ id: 'filePanel.cancel' }), + () => { } ) } @@ -164,7 +165,7 @@ export const FileExplorer = (props: FileExplorerProps) => { return !(el.key === '' && el.type === 'folder') }) - nonRootFocus.push({key: path, type}) + nonRootFocus.push({ key: path, type }) props.dispatchSetFocusElement(nonRootFocus) } } @@ -181,7 +182,7 @@ export const FileExplorer = (props: FileExplorerProps) => { return !(el.key === '' && el.type === 'folder') }) - nonRootFocus.push({key: path, type}) + nonRootFocus.push({ key: path, type }) props.dispatchSetFocusElement(nonRootFocus) } } else { @@ -193,8 +194,7 @@ export const FileExplorer = (props: FileExplorerProps) => { } else { expandPath = [...new Set(props.expandPath.filter((key) => key && typeof key === 'string' && !key.startsWith(path)))] } - - props.dispatchSetFocusElement([{key: path, type}]) + props.dispatchSetFocusElement([{ key: path, type }]) props.dispatchHandleExpandPath(expandPath) } } @@ -209,42 +209,42 @@ export const FileExplorer = (props: FileExplorerProps) => { setState((prevState) => { return { ...prevState, - focusEdit: {element: null, isNew: false, type: '', lastEdit: ''} + focusEdit: { element: null, isNew: false, type: '', lastEdit: '' } } }) } else { setState((prevState) => { return { ...prevState, - focusEdit: {element: null, isNew: false, type: '', lastEdit: ''} + focusEdit: { element: null, isNew: false, type: '', lastEdit: '' } } }) } } else { - if (state.focusEdit.lastEdit === content) { + if (state.focusEdit.lastEdit === content && state.focusEdit.isNew === false) { return setState((prevState) => { return { ...prevState, - focusEdit: {element: null, isNew: false, type: '', lastEdit: ''} + focusEdit: { element: null, isNew: false, type: '', lastEdit: '' } } }) } if (checkSpecialChars(content)) { props.modal( - intl.formatMessage({id: 'filePanel.validationError'}), - intl.formatMessage({id: 'filePanel.validationErrorMsg'}), - intl.formatMessage({id: 'filePanel.ok'}), - () => {} + intl.formatMessage({ id: 'filePanel.validationError' }), + intl.formatMessage({ id: 'filePanel.validationErrorMsg' }), + intl.formatMessage({ id: 'filePanel.ok' }), + () => { } ) } else { if (state.focusEdit.isNew) { if (hasReservedKeyword(content)) { props.dispatchRemoveInputField(parentFolder) props.modal( - intl.formatMessage({id: 'filePanel.reservedKeyword'}), - intl.formatMessage({id: 'filePanel.reservedKeywordMsg'}, {content}), - intl.formatMessage({id: 'filePanel.close'}), - () => {} + intl.formatMessage({ id: 'filePanel.reservedKeyword' }), + intl.formatMessage({ id: 'filePanel.reservedKeywordMsg' }, { content }), + intl.formatMessage({ id: 'filePanel.close' }), + () => { } ) } else { state.focusEdit.type === 'file' ? createNewFile(joinPath(parentFolder, content)) : createNewFolder(joinPath(parentFolder, content)) @@ -253,10 +253,10 @@ export const FileExplorer = (props: FileExplorerProps) => { } else { if (hasReservedKeyword(content)) { props.modal( - intl.formatMessage({id: 'filePanel.reservedKeyword'}), - intl.formatMessage({id: 'filePanel.reservedKeywordMsg'}, {content}), - intl.formatMessage({id: 'filePanel.close'}), - () => {} + intl.formatMessage({ id: 'filePanel.reservedKeyword' }), + intl.formatMessage({ id: 'filePanel.reservedKeywordMsg' }, { content }), + intl.formatMessage({ id: 'filePanel.close' }), + () => { } ) } else { if (state.focusEdit.element) { @@ -271,7 +271,7 @@ export const FileExplorer = (props: FileExplorerProps) => { setState((prevState) => { return { ...prevState, - focusEdit: {element: null, isNew: false, type: '', lastEdit: ''} + focusEdit: { element: null, isNew: false, type: '', lastEdit: '' } } }) } @@ -293,7 +293,7 @@ export const FileExplorer = (props: FileExplorerProps) => { } const handleFileMove = async (dest: string, src: string) => { - if(await moveFileIsAllowed(src, dest) === false) return + if (await moveFileIsAllowed(src, dest) === false) return try { props.modal( intl.formatMessage({ id: 'filePanel.moveFile' }), @@ -301,20 +301,20 @@ export const FileExplorer = (props: FileExplorerProps) => { intl.formatMessage({ id: 'filePanel.yes' }), () => props.dispatchMoveFile(src, dest), intl.formatMessage({ id: 'filePanel.cancel' }), - () => {} + () => { } ) } catch (error) { props.modal( intl.formatMessage({ id: 'filePanel.movingFileFailed' }), intl.formatMessage({ id: 'filePanel.movingFileFailedMsg' }, { src }), intl.formatMessage({ id: 'filePanel.close' }), - async () => {} + async () => { } ) } } const handleFolderMove = async (dest: string, src: string) => { - if(await moveFolderIsAllowed(src, dest) === false) return + if (await moveFolderIsAllowed(src, dest) === false) return try { props.modal( intl.formatMessage({ id: 'filePanel.moveFile' }), @@ -322,93 +322,91 @@ export const FileExplorer = (props: FileExplorerProps) => { intl.formatMessage({ id: 'filePanel.yes' }), () => props.dispatchMoveFolder(src, dest), intl.formatMessage({ id: 'filePanel.cancel' }), - () => {} + () => { } ) } catch (error) { props.modal( intl.formatMessage({ id: 'filePanel.movingFolderFailed' }), intl.formatMessage({ id: 'filePanel.movingFolderFailedMsg' }, { src }), intl.formatMessage({ id: 'filePanel.close' }), - async () => {} + async () => { } ) } } - const dragStatus = (isDragged: boolean) => { - props.dragStatus(isDragged) - } + const handleTreeClick = (event: SyntheticEvent) => { + let target = event.target as HTMLElement + while (target && target.getAttribute && !target.getAttribute('data-path')) { + target = target.parentElement + } + if (target && target.getAttribute) { + const path = target.getAttribute('data-path') + const type = target.getAttribute('data-type') + if (path && type === 'file') { + event.stopPropagation() + if (state.focusEdit.element !== path) handleClickFile(path, type) + + } else if (path && type === 'folder') { + event.stopPropagation() + if (state.focusEdit.element !== path) handleClickFolder(path, type) - useEffect(() => { - if (files[ROOT_PATH]){ - try { - const children: FileType[] = files[ROOT_PATH] as any - setChildrenKeys(fileKeySort(children)) - } catch (error) { - setChildrenKeys(Object.keys(files[ROOT_PATH])) } - } else{ - setChildrenKeys([]) + if (props.showIconsMenu === true) props.hideIconsMenu(!props.showIconsMenu) } - }, [props]) + + } + return ( - -
    - -
  • -
    - -
    - -
    -
    -
    -
  • -
    - - {files[ROOT_PATH] && - childrenKeys.map((key, index) => ( - - )) - } - +
    +
    + +
    +
    + +
    + +
    +
    - -
    -
    - +
    +
    - +
    ) } diff --git a/libs/remix-ui/workspace/src/lib/components/file-label.tsx b/libs/remix-ui/workspace/src/lib/components/file-label.tsx deleted file mode 100644 index c379d980d4..0000000000 --- a/libs/remix-ui/workspace/src/lib/components/file-label.tsx +++ /dev/null @@ -1,96 +0,0 @@ -// eslint-disable-next-line no-use-before-define -import {fileDecoration} from '@remix-ui/file-decorators' -import {CustomTooltip} from '@remix-ui/helper' -import {FormattedMessage} from 'react-intl' -import React, {useEffect, useRef, useState} from 'react' -import {FileType} from '../types' -export interface FileLabelProps { - file: FileType - focusEdit: { - element: string - type: string - isNew: boolean - lastEdit: string - } - fileDecorations: fileDecoration[] - editModeOff: (content: string) => void - dragStatus: boolean -} - -export const FileLabel = (props: FileLabelProps) => { - const {file, focusEdit, editModeOff, fileDecorations} = props - const [isEditable, setIsEditable] = useState(false) - const [fileStateClasses, setFileStateClasses] = useState('') - const labelRef = useRef(null) - - useEffect(() => { - if (focusEdit.element && file.path) { - setIsEditable(focusEdit.element === file.path) - } - }, [file.path, focusEdit]) - - useEffect(() => { - const state = props.fileDecorations.find((state: fileDecoration) => { - if (state.path === props.file.path) return true - if (state.bubble && props.file.isDirectory && state.path.startsWith(props.file.path)) return true - }) - if (state && state.fileStateLabelClass) { - setFileStateClasses(state.fileStateLabelClass) - } else { - setFileStateClasses('') - } - }, [fileDecorations]) - - useEffect(() => { - if (labelRef.current) { - setTimeout(() => { - labelRef.current.focus() - }, 0) - } - }, [isEditable]) - - const handleEditInput = (event: React.KeyboardEvent) => { - if (event.which === 13) { - event.preventDefault() - editModeOff(labelRef.current.innerText) - labelRef.current.innerText = file.name - } - if (event.which === 27) { - event.preventDefault() - // don't change it - editModeOff(file.name) - } - } - - const handleEditBlur = (event: React.SyntheticEvent) => { - event.stopPropagation() - editModeOff(labelRef.current.innerText) - labelRef.current.innerText = file.name - } - - // The tooltip is setted up on the label and not the whole line to avoid unnecessary tooltips on the short filenames. - // It has the delay for the same reason. - return ( -
    - - - {file.name} - - -
    - ) -} diff --git a/libs/remix-ui/workspace/src/lib/components/file-render.tsx b/libs/remix-ui/workspace/src/lib/components/file-render.tsx deleted file mode 100644 index fcec4b5860..0000000000 --- a/libs/remix-ui/workspace/src/lib/components/file-render.tsx +++ /dev/null @@ -1,175 +0,0 @@ -// eslint-disable-next-line no-use-before-define -import React, {SyntheticEvent, useEffect, useState} from 'react' -import {FileType, WorkspaceElement} from '../types' -// eslint-disable-next-line @typescript-eslint/no-unused-vars -import {TreeView, TreeViewItem} from '@remix-ui/tree-view' -import {getPathIcon} from '@remix-ui/helper' -// eslint-disable-next-line @typescript-eslint/no-unused-vars -import {FileLabel} from './file-label' -import {fileDecoration, FileDecorationIcons} from '@remix-ui/file-decorators' -import {Draggable} from '@remix-ui/drag-n-drop' -import { fileKeySort } from '../utils' - -export interface RenderFileProps { - file: FileType - index: number - focusEdit: {element: string; type: string; isNew: boolean; lastEdit: string} - focusElement: {key: string; type: WorkspaceElement}[] - focusContext: {element: string; x: number; y: number; type: string} - ctrlKey: boolean - expandPath: string[] - hideIconsMenu?: React.Dispatch> - showIconsMenu?: boolean - editModeOff: (content: string) => void - handleClickFolder: (path: string, type: string) => void - handleClickFile: (path: string, type: string) => void - handleContextMenu: (pageX: number, pageY: number, path: string, content: string, type: string) => void - fileDecorations: fileDecoration[] - dragStatus: boolean -} - -export const FileRender = (props: RenderFileProps) => { - const [file, setFile] = useState({} as FileType) - const [hover, setHover] = useState(false) - const [icon, setIcon] = useState('') - const [childrenKeys, setChildrenKeys] = useState([]) - - useEffect(() => { - if (props.file && props.file.path && props.file.type) { - setFile(props.file) - setIcon(getPathIcon(props.file.path)) - } - }, [props.file]) - - useEffect(() => { - if (file.child) { - try { - const children: FileType[] = file.child as any - setChildrenKeys(fileKeySort(children)) - } catch (e) { - setChildrenKeys(Object.keys(file.child)) - } - } else { - setChildrenKeys([]) - } - }, [file.child, props.expandPath, props.file]) - - const labelClass = - props.focusEdit.element === file.path - ? 'bg-light' - : props.focusElement.findIndex((item) => item.key === file.path) !== -1 - ? 'bg-secondary' - : hover - ? 'bg-light border-no-shift' - : props.focusContext.element === file.path && props.focusEdit.element !== file.path - ? 'bg-light border-no-shift' - : '' - - const spreadProps = { - onClick: (e) => e.stopPropagation() - } - - const handleFolderClick = (event: SyntheticEvent) => { - event.stopPropagation() - if (props.focusEdit.element !== file.path) props.handleClickFolder(file.path, file.type) - if (props.showIconsMenu === true) props.hideIconsMenu(!props.showIconsMenu) - } - - const handleFileClick = (event: SyntheticEvent) => { - event.stopPropagation() - if (props.focusEdit.element !== file.path) props.handleClickFile(file.path, file.type) - if (props.showIconsMenu === true) props.hideIconsMenu(!props.showIconsMenu) - } - - const handleContextMenu = (event: PointerEvent) => { - event.preventDefault() - event.stopPropagation() - props.handleContextMenu(event.pageX, event.pageY, file.path, (event.target as HTMLElement).textContent, file.type) - } - - const handleMouseOut = (event: SyntheticEvent) => { - event.stopPropagation() - setHover(false) - } - - const handleMouseOver = (event: SyntheticEvent) => { - event.stopPropagation() - setHover(true) - } - - if (file.isDirectory) { - return ( - - -
    - - -
    -
    - - } - onClick={handleFolderClick} - onContextMenu={handleContextMenu} - labelClass={labelClass} - controlBehaviour={props.ctrlKey} - expand={props.expandPath.includes(file.path)} - onMouseOver={handleMouseOver} - onMouseOut={handleMouseOut} - > - {file.child ? ( - - {childrenKeys.map((key, index) => ( - - ))} - - ) : ( - - )} -
    - ) - } else { - return ( - - -
    - - -
    -
    - - } - onClick={handleFileClick} - onContextMenu={handleContextMenu} - icon={icon} - labelClass={labelClass} - onMouseOver={handleMouseOver} - onMouseOut={handleMouseOut} - /> - ) - } -} diff --git a/libs/remix-ui/workspace/src/lib/components/flat-tree-drop.tsx b/libs/remix-ui/workspace/src/lib/components/flat-tree-drop.tsx new file mode 100644 index 0000000000..e1d7fc72c5 --- /dev/null +++ b/libs/remix-ui/workspace/src/lib/components/flat-tree-drop.tsx @@ -0,0 +1,87 @@ +import React, { SyntheticEvent, startTransition, useEffect, useRef, useState } from 'react' +import { FileType } from '../types' +import { getEventTarget } from '../utils/getEventTarget' +import { extractParentFromKey } from '@remix-ui/helper' +interface FlatTreeDropProps { + moveFile: (dest: string, src: string) => void + moveFolder: (dest: string, src: string) => void + getFlatTreeItem: (path: string) => FileType + handleClickFolder: (path: string, type: string) => void + dragSource: FileType + children: React.ReactNode + expandPath: string[] +} +export const FlatTreeDrop = (props: FlatTreeDropProps) => { + + const { getFlatTreeItem, dragSource, moveFile, moveFolder, handleClickFolder, expandPath } = props + // delay timer + const [timer, setTimer] = useState() + // folder to open + const [folderToOpen, setFolderToOpen] = useState() + + + const onDragOver = async (e: SyntheticEvent) => { + e.preventDefault() + const target = await getEventTarget(e) + + if (!target || !target.path) { + clearTimeout(timer) + setFolderToOpen(null) + return + } + + const dragDestination = getFlatTreeItem(target.path) + if (dragDestination && !dragDestination.isDirectory) { + clearTimeout(timer) + setFolderToOpen(null) + } + if (dragDestination && dragDestination.isDirectory && !expandPath.includes(dragDestination.path) && folderToOpen !== dragDestination.path && props.handleClickFolder) { + + setFolderToOpen(dragDestination.path) + timer && clearTimeout(timer) + setTimer( + setTimeout(() => { + handleClickFolder(dragDestination.path, dragDestination.type) + setFolderToOpen(null) + }, 600) + ) + } + } + + const onDrop = async (event: SyntheticEvent) => { + event.preventDefault() + + const target = await getEventTarget(event) + let dragDestination: any + if (!target || !target.path) { + dragDestination = { + path: '/', + isDirectory: true + } + } else { + dragDestination = getFlatTreeItem(target.path) + } + + if (dragDestination.isDirectory) { + if (dragSource.isDirectory) { + moveFolder(dragDestination.path, dragSource.path) + } else { + moveFile(dragDestination.path, dragSource.path) + } + } else { + const path = extractParentFromKey(dragDestination.path) || '/' + + if (dragSource.isDirectory) { + moveFolder(path, dragSource.path) + } else { + moveFile(path, dragSource.path) + } + } + } + + + return (
    {props.children}
    ) +} \ No newline at end of file diff --git a/libs/remix-ui/workspace/src/lib/components/flat-tree-item-input.tsx b/libs/remix-ui/workspace/src/lib/components/flat-tree-item-input.tsx new file mode 100644 index 0000000000..d920565f0b --- /dev/null +++ b/libs/remix-ui/workspace/src/lib/components/flat-tree-item-input.tsx @@ -0,0 +1,65 @@ +import React, { useState, useRef, useEffect } from "react" +import { FileType } from "../types" + +interface FlatTreeItemInputProps { + file: FileType + editModeOff: (content: string) => void +} + +export const FlatTreeItemInput = (props: FlatTreeItemInputProps) => { + const { file, editModeOff } = props + const [value, setValue] = useState(file.name) + const ref = useRef(null) + + const handleKeyDown = (e: any) => { + if (e.which === 13) { + e.preventDefault() + editModeOff(value) + } + if (e.which === 27) { + e.preventDefault() + // don't change it + editModeOff(file.name) + } + } + + const handleEditBlur = (event: React.SyntheticEvent) => { + event.stopPropagation() + // don't change it + editModeOff(file.name) + } + + const handleFocus = (e: any) => { + // select the file name without the extension + const val = e.target.value + const dotIndex = val.lastIndexOf('.') + if (dotIndex > 0) { + e.target.setSelectionRange(0, dotIndex) + } else { + e.target.setSelectionRange(0, val.length) + } + } + + const changeValue = (e: any) => { + setValue(e.target.value) + } + + useEffect(() => { + ref.current.focus() + },[]) + + return( + ) +} \ No newline at end of file diff --git a/libs/remix-ui/workspace/src/lib/components/flat-tree.tsx b/libs/remix-ui/workspace/src/lib/components/flat-tree.tsx new file mode 100644 index 0000000000..d8c6dbc6a4 --- /dev/null +++ b/libs/remix-ui/workspace/src/lib/components/flat-tree.tsx @@ -0,0 +1,298 @@ +import React, { SyntheticEvent, useEffect, useRef, useState, RefObject, useMemo } from 'react' +import { Popover } from 'react-bootstrap' +import { FileType, WorkspaceElement } from '../types' +import { getPathIcon } from '@remix-ui/helper'; +import { Virtuoso, VirtuosoHandle } from 'react-virtuoso' +import { FlatTreeItemInput } from './flat-tree-item-input'; +import { FlatTreeDrop } from './flat-tree-drop'; +import { getEventTarget } from '../utils/getEventTarget'; +import { fileDecoration, FileDecorationIcons } from '@remix-ui/file-decorators'; + +export default function useOnScreen(ref: RefObject) { + + const [isIntersecting, setIntersecting] = useState(false) + + const observer = useMemo(() => new IntersectionObserver( + ([entry]) => setIntersecting(entry.isIntersecting) + ), [ref]) + + + useEffect(() => { + observer.observe(ref.current) + return () => observer.disconnect() + }, []) + + return isIntersecting +} + +interface FlatTreeProps { + files: { [x: string]: Record }, + flatTree: FileType[], + expandPath: string[], + focusEdit: { element: string; type: string; isNew: boolean; lastEdit: string } + editModeOff: (content: string) => void + focusElement: { key: string; type: WorkspaceElement }[] + focusContext: { element: string; x: number; y: number; type: string } + handleContextMenu: (pageX: number, pageY: number, path: string, content: string, type: string) => void + handleTreeClick: (e: SyntheticEvent) => void + handleClickFolder: (path: string, type: string) => void + moveFile: (dest: string, src: string) => void + moveFolder: (dest: string, src: string) => void + fileState: fileDecoration[] + +} + +let mouseTimer: any = { + path: null, + timer: null +} + +export const FlatTree = (props: FlatTreeProps) => { + const { files, flatTree, expandPath, focusEdit, editModeOff, handleTreeClick, moveFile, moveFolder, fileState, focusElement, handleClickFolder } = props + const [hover, setHover] = useState('') + const [mouseOverTarget, setMouseOverTarget] = useState<{ + path: string, + type: string, + content: string, + position: { + top: number, + left: number + } + }>(null) + const [showMouseOverTarget, setShowMouseOverTarget] = useState(false) + const [dragSource, setDragSource] = useState() + const [isDragging, setIsDragging] = useState(false) + const ref = useRef(null) + const [size, setSize] = useState(0) + const containerRef = useRef(null) + const virtuoso = useRef(null) + const isOnScreen = useOnScreen(containerRef) + + useEffect(() => { + if (isOnScreen) { + setViewPortHeight() + } + }, [isOnScreen]) + + + const labelClass = (file: FileType) => + props.focusEdit.element === file.path + ? 'bg-light' + : props.focusElement.findIndex((item) => item.key === file.path) !== -1 + ? 'bg-secondary' + : hover == file.path + ? 'bg-light border-no-shift' + : props.focusContext.element === file.path && props.focusEdit.element !== file.path + ? 'bg-light border-no-shift' + : '' + + const getIndentLevelDiv = (path: string) => { + // remove double slash + path = path.replace(/\/\//g, '/') + // remove leading slash + path = path.replace(/^\//g, '') + const pathArray = path.split('/') + const level = pathArray.length - 1 + const indent = level * 4 + return (
    ) + } + + const handleContextMenu = async (e: any) => { + const target = await getEventTarget(e) + if (target) { + e.preventDefault() + e.stopPropagation() + props.handleContextMenu(e.pageX, e.pageY, target.path, target.content, target.type) + } + } + + const onDragStart = async (event: SyntheticEvent) => { + const target = await getEventTarget(event) + setDragSource(flatTree.find((item) => item.path === target.path)) + setIsDragging(true) + } + + useEffect(() => { + if (isDragging) { + mouseTimer = { + path: null, + timer: null + } + } + }, [isDragging]) + + const onDragEnd = (event: SyntheticEvent) => { + setIsDragging(false) + } + + const getFlatTreeItem = (path: string) => { + return flatTree.find((item) => item.path === path) + } + + const getFileStateClasses = (file: FileType) => { + const state = fileState.find((state: fileDecoration) => { + if (state.path === file.path) return true + if (state.bubble && file.isDirectory && state.path.startsWith(file.path)) return true + }) + if (state && state.fileStateLabelClass) { + return state.fileStateLabelClass + } + } + + const getFileStateIcons = (file: FileType) => { + const state = fileState.find((state: fileDecoration) => { + if (state.path === file.path) return true + if (state.bubble && file.isDirectory && state.path.startsWith(file.path)) return true + }) + if (state) { + return + } + } + + const onMouseMove = async (e: any) => { + const target = await getEventTarget(e, true) + if (target && target.path) { + if (mouseTimer.path !== target.path) { + setShowMouseOverTarget(false) + mouseTimer = { + path: target.path, + timer: setTimeout(() => { + if (mouseTimer.path === target.path) { + setShowMouseOverTarget(true) + setMouseOverTarget(target) + } + }, 1000) + } + } + } else { + mouseTimer = { + path: null, + timer: null + } + setShowMouseOverTarget(false) + } + } + + const onMouseLeave = async (e: any) => { + mouseTimer = { + path: null, + timer: null + } + setShowMouseOverTarget(false) + } + + + const setViewPortHeight = () => { + const boundingRect = containerRef.current.getBoundingClientRect() + setSize(boundingRect.height - 40) + } + + + useEffect(() => { + window.addEventListener('resize', setViewPortHeight) + return () => { + window.removeEventListener('resize', setViewPortHeight) + } + }, []) + + useEffect(() => { + setViewPortHeight() + }, [containerRef.current]) + + + useEffect(() => { + if (focusEdit && focusEdit.element) { + const index = flatTree.findIndex((item) => item.path === focusEdit.element) + index && virtuoso.current.scrollIntoView({ + index, + align: 'center' + }) + } + }, [focusEdit]) + + + const Row = (index: number) => { + const node = Object.keys(flatTree)[index] + const file = flatTree[node] + return (
  • setHover(file.path)} + onMouseOut={() => setHover(file.path)} + data-type={file.isDirectory ? 'folder' : 'file'} + data-path={`${file.path}`} + data-id={`treeViewLitreeViewItem${file.path}`} + > +
    + {getIndentLevelDiv(file.path)} + +
    + {focusEdit && file.path && focusEdit.element === file.path ? + : + <>
    + {file.name} + +
    + {getFileStateIcons(file)} + + } +
    +
  • ) + } + + return (<> +
    + +
    + {showMouseOverTarget && mouseOverTarget && !isDragging && + + + {mouseOverTarget && mouseOverTarget.path} + + + } + Row(index)} + /> +
    +
    +
    + ) + +} diff --git a/libs/remix-ui/workspace/src/lib/components/workspace-hamburger-item.tsx b/libs/remix-ui/workspace/src/lib/components/workspace-hamburger-item.tsx index 56e6c7746b..82a873c4bc 100644 --- a/libs/remix-ui/workspace/src/lib/components/workspace-hamburger-item.tsx +++ b/libs/remix-ui/workspace/src/lib/components/workspace-hamburger-item.tsx @@ -1,8 +1,8 @@ -import React from 'react' +import React, { useContext } from 'react' import {CustomTooltip, CustomMenu, CustomIconsToggle} from '@remix-ui/helper' import {Dropdown, NavDropdown} from 'react-bootstrap' import {FormattedMessage} from 'react-intl' - +import { appPlatformTypes, platformContext } from '@remix-ui/app' const _paq = (window._paq = window._paq || []) export interface HamburgerMenuItemProps { @@ -10,30 +10,33 @@ export interface HamburgerMenuItemProps { kind: string actionOnClick: () => void fa: string + platforms: appPlatformTypes[] } export function HamburgerMenuItem(props: HamburgerMenuItemProps) { const {hideOption} = props + const platform = useContext(platformContext) const uid = 'workspace' + props.kind return ( <> - - }> -
    { - props.actionOnClick() - _paq.push(['trackEvent', 'fileExplorer', 'workspaceMenu', uid]) - }} - > - - - - -
    -
    -
    + {props.platforms.includes(platform) && !hideOption?( + + }> +
    { + props.actionOnClick() + _paq.push(['trackEvent', 'fileExplorer', 'workspaceMenu', uid]) + }} + > + + + + +
    +
    +
    ):null} ) } @@ -69,14 +72,15 @@ export interface HamburgerSubMenuItemProps { id: string title: string subMenus: Array + platforms: appPlatformTypes[] } export function HamburgerSubMenuItem(props: HamburgerSubMenuItemProps) { return ( <> - + {props.subMenus.map((item) => ( - + ))} diff --git a/libs/remix-ui/workspace/src/lib/components/workspace-hamburger.tsx b/libs/remix-ui/workspace/src/lib/components/workspace-hamburger.tsx index 399d85e215..00ee0db432 100644 --- a/libs/remix-ui/workspace/src/lib/components/workspace-hamburger.tsx +++ b/libs/remix-ui/workspace/src/lib/components/workspace-hamburger.tsx @@ -1,3 +1,4 @@ +import { appPlatformTypes } from '@remix-ui/app' import React from 'react' import {Dropdown} from 'react-bootstrap' import {HamburgerMenuItem, HamburgerSubMenuItem} from './workspace-hamburger-item' @@ -19,10 +20,11 @@ export interface HamburgerMenuProps { showIconsMenu: boolean hideWorkspaceOptions: boolean hideLocalhostOptions: boolean + hideFileOperations: boolean } export function HamburgerMenu(props: HamburgerMenuProps) { - const {showIconsMenu, hideWorkspaceOptions, hideLocalhostOptions} = props + const {showIconsMenu, hideWorkspaceOptions, hideLocalhostOptions, hideFileOperations} = props return ( <> + { + props.createWorkspace() + props.hideIconsMenu(!showIconsMenu) + }} + platforms={[appPlatformTypes.desktop]} > { props.addGithubAction() props.hideIconsMenu(!showIconsMenu) }} + platforms={[appPlatformTypes.web, appPlatformTypes.desktop]} > { props.addTsSolTestGithubAction() props.hideIconsMenu(!showIconsMenu) }} + platforms={[appPlatformTypes.web, appPlatformTypes.desktop]} > { props.addSlitherGithubAction() props.hideIconsMenu(!showIconsMenu) }} + platforms={[appPlatformTypes.web, appPlatformTypes.desktop]} > { props.addHelperScripts('etherscan') props.hideIconsMenu(!showIconsMenu) }} + platforms={[appPlatformTypes.web, appPlatformTypes.desktop]} > { props.addHelperScripts('deployer') props.hideIconsMenu(!showIconsMenu) }} + platforms={[appPlatformTypes.web, appPlatformTypes.desktop]} > ) @@ -156,7 +181,7 @@ export function HamburgerMenu(props: HamburgerMenuProps) { subMenus={[ { kind:'etherscan-script', - fa: 'fak fa-ts-logo', + fa: 'fa-kit fa-ts-logo', hideOption: hideWorkspaceOptions, actionOnClick: () => { alert('etherscan') @@ -166,7 +191,7 @@ export function HamburgerMenu(props: HamburgerMenuProps) { }, { kind:'contract-deployer-factory-script', - fa: 'fak fa-ts-logo', + fa: 'fa-kit fa-ts-logo', hideOption: hideWorkspaceOptions, actionOnClick: () => { alert('deloyer') diff --git a/libs/remix-ui/workspace/src/lib/components/workspace-selector.tsx b/libs/remix-ui/workspace/src/lib/components/workspace-selector.tsx new file mode 100644 index 0000000000..e69de29bb2 diff --git a/libs/remix-ui/workspace/src/lib/contexts/index.ts b/libs/remix-ui/workspace/src/lib/contexts/index.ts index 23337569a6..115767831d 100644 --- a/libs/remix-ui/workspace/src/lib/contexts/index.ts +++ b/libs/remix-ui/workspace/src/lib/contexts/index.ts @@ -3,7 +3,7 @@ import { createContext, SyntheticEvent } from 'react' import { BrowserState } from '../reducers/workspace' export const FileSystemContext = createContext<{ - fs: BrowserState, + fs: any, plugin: any, modal:(title: string | JSX.Element, message: string | JSX.Element, okLabel: string, okFn: () => void, cancelLabel?: string, cancelFn?: () => void) => void, dispatchInitWorkspace:() => Promise, @@ -46,6 +46,9 @@ export const FileSystemContext = createContext<{ dispatchCreateTsSolGithubAction: () => Promise, dispatchCreateSlitherGithubAction: () => Promise dispatchCreateHelperScripts: (script: string) => Promise + dispatchOpenElectronFolder: (path: string) => Promise + dispatchGetElectronRecentFolders: () => Promise + dispatchRemoveRecentFolder: (path: string) => Promise dispatchUpdateGitSubmodules: () => Promise }>(null) diff --git a/libs/remix-ui/workspace/src/lib/css/electron-menu.css b/libs/remix-ui/workspace/src/lib/css/electron-menu.css new file mode 100644 index 0000000000..a5b0aff3f0 --- /dev/null +++ b/libs/remix-ui/workspace/src/lib/css/electron-menu.css @@ -0,0 +1,27 @@ +.recentfolder { + display: flex; + min-width: 0; + cursor: pointer; +} + +.recentfolder_path { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.recentfolder_name { + flex-shrink: 0; + color: var(--text); +} + +.recentfolder_name:hover { + color: var(--primary); + text-decoration: underline; +} + +.recentfolder_delete { + flex-shrink: 0; + margin-left: auto; + color: var(--text); +} \ No newline at end of file diff --git a/libs/remix-ui/workspace/src/lib/providers/FileSystemProvider.tsx b/libs/remix-ui/workspace/src/lib/providers/FileSystemProvider.tsx index 0ddbe42ac9..66f55d997d 100644 --- a/libs/remix-ui/workspace/src/lib/providers/FileSystemProvider.tsx +++ b/libs/remix-ui/workspace/src/lib/providers/FileSystemProvider.tsx @@ -46,6 +46,9 @@ import { createTsSolGithubAction, createSlitherGithubAction, createHelperScripts, + openElectronFolder, + getElectronRecentFolders, + removeRecentElectronFolder, updateGitSubmodules } from '../actions' import {Modal, WorkspaceProps, WorkspaceTemplate} from '../types' @@ -90,7 +93,11 @@ export const FileSystemProvider = (props: WorkspaceProps) => { } const dispatchFetchWorkspaceDirectory = async (path: string) => { - await fetchWorkspaceDirectory(path) + try { + await fetchWorkspaceDirectory(path) + } catch (err) { + console.warn(err) + } } const dispatchSwitchToWorkspace = async (name: string) => { @@ -225,6 +232,19 @@ export const FileSystemProvider = (props: WorkspaceProps) => { await createHelperScripts(script) } + const dispatchOpenElectronFolder = async (path: string) => { + await openElectronFolder(path) + } + + const dispatchGetElectronRecentFolders = async () => { + await getElectronRecentFolders() + } + + const dispatchRemoveRecentFolder = async (path: string) => { + await removeRecentElectronFolder(path) + } + + const dispatchUpdateGitSubmodules = async () => { await updateGitSubmodules() } @@ -278,6 +298,10 @@ export const FileSystemProvider = (props: WorkspaceProps) => { } }, [fs.popup]) + useEffect(() => { + plugin.expandPath = fs.browser.expandPath + },[fs.browser.expandPath]) + const handleHideModal = () => { setFocusModal((modal) => { return {...modal, hide: true, message: null} @@ -347,6 +371,9 @@ export const FileSystemProvider = (props: WorkspaceProps) => { dispatchCreateTsSolGithubAction, dispatchCreateSlitherGithubAction, dispatchCreateHelperScripts, + dispatchOpenElectronFolder, + dispatchGetElectronRecentFolders, + dispatchRemoveRecentFolder, dispatchUpdateGitSubmodules } return ( diff --git a/libs/remix-ui/workspace/src/lib/reducers/workspace.ts b/libs/remix-ui/workspace/src/lib/reducers/workspace.ts index 93a0a34069..2d6b15a26c 100644 --- a/libs/remix-ui/workspace/src/lib/reducers/workspace.ts +++ b/libs/remix-ui/workspace/src/lib/reducers/workspace.ts @@ -1,8 +1,10 @@ -import {extractNameFromKey} from '@remix-ui/helper' +import {extractNameFromKey, extractParentFromKey} from '@remix-ui/helper' import {action, Actions, FileType, WorkspaceElement} from '../types' import * as _ from 'lodash' import {fileDecoration} from '@remix-ui/file-decorators' import {ROOT_PATH} from '../utils/constants' +import isElectron from 'is-electron' +import { fileKeySort } from '../utils' export interface BrowserState { browser: { currentWorkspace: string @@ -17,6 +19,7 @@ export interface BrowserState { currentBranch?: string }[] files: {[x: string]: Record} + flatTree: FileType[] expandPath: string[] isRequestingDirectory: boolean isSuccessfulDirectory: boolean @@ -31,10 +34,13 @@ export interface BrowserState { error: string } fileState: fileDecoration[] + recentFolders: string[] + currentLocalFilePath?: string } localhost: { sharedFolder: string files: {[x: string]: Record} + flatTree: FileType[] expandPath: string[] isRequestingDirectory: boolean isSuccessfulDirectory: boolean @@ -70,6 +76,7 @@ export const browserInitialState: BrowserState = { currentWorkspace: '', workspaces: [], files: {}, + flatTree: [], expandPath: [], isRequestingDirectory: false, isSuccessfulDirectory: false, @@ -83,11 +90,14 @@ export const browserInitialState: BrowserState = { removedMenuItems: [], error: null }, - fileState: [] + fileState: [], + recentFolders: [], + currentLocalFilePath: '' }, localhost: { sharedFolder: '', files: {}, + flatTree: [], expandPath: [], isRequestingDirectory: false, isSuccessfulDirectory: false, @@ -179,6 +189,8 @@ export const browserReducer = (state = browserInitialState, action: Actions) => case 'FETCH_DIRECTORY_SUCCESS': { const payload = action.payload + const fd = fetchDirectoryContent(state, payload) + const flatTree = flattenTree(fd, state.mode === 'browser'? state.browser.expandPath : state.localhost.expandPath) return { ...state, @@ -186,8 +198,9 @@ export const browserReducer = (state = browserInitialState, action: Actions) => ...state.browser, files: state.mode === 'browser' - ? fetchDirectoryContent(state, payload) + ? fd : state.browser.files, + flatTree: state.mode === 'browser' ? flatTree : state.browser.flatTree, isRequestingDirectory: false, isSuccessfulDirectory: true, error: null @@ -196,8 +209,9 @@ export const browserReducer = (state = browserInitialState, action: Actions) => ...state.localhost, files: state.mode === 'localhost' - ? fetchDirectoryContent(state, payload) + ? fd : state.localhost.files, + flatTree: state.mode === 'localhost' ? flatTree : state.localhost.flatTree, isRequestingDirectory: false, isSuccessfulDirectory: true, error: null @@ -243,6 +257,8 @@ export const browserReducer = (state = browserInitialState, action: Actions) => case 'FETCH_WORKSPACE_DIRECTORY_SUCCESS': { const payload = action.payload + const fd = fetchWorkspaceDirectoryContent(state, payload) + const flatTree = flattenTree(fd, state.mode === 'browser'? state.browser.expandPath : state.localhost.expandPath) return { ...state, @@ -250,8 +266,9 @@ export const browserReducer = (state = browserInitialState, action: Actions) => ...state.browser, files: state.mode === 'browser' - ? fetchWorkspaceDirectoryContent(state, payload) + ? fd : state.browser.files, + flatTree: state.mode === 'browser' ? flatTree : state.browser.flatTree, isRequestingWorkspace: false, isSuccessfulWorkspace: true, error: null @@ -260,8 +277,9 @@ export const browserReducer = (state = browserInitialState, action: Actions) => ...state.localhost, files: state.mode === 'localhost' - ? fetchWorkspaceDirectoryContent(state, payload) + ? fd : state.localhost.files, + flatTree: state.mode === 'localhost' ? flatTree : state.localhost.flatTree, isRequestingWorkspace: false, isSuccessfulWorkspace: true, error: null, @@ -316,95 +334,95 @@ export const browserReducer = (state = browserInitialState, action: Actions) => case 'FILE_ADDED_SUCCESS': { const payload = action.payload - + const fd = fileAdded(state, payload) + const dir = extractParentFromKey(payload) + const browserExpandPath = state.mode === 'browser' && !isElectron() ? [...new Set([...state.browser.expandPath, payload])] : state.browser.expandPath + const localhostExpandPath = state.mode === 'localhost' ? [...new Set([...state.localhost.expandPath, payload])] : state.localhost.expandPath + const flatTree = flattenTree(fd, state.mode === 'browser'? browserExpandPath : localhostExpandPath) return { ...state, browser: { ...state.browser, files: state.mode === 'browser' - ? fileAdded(state, payload) + ? fd : state.browser.files, + flatTree: state.mode === 'browser' ? flatTree : state.browser.flatTree, expandPath: - state.mode === 'browser' - ? [...new Set([...state.browser.expandPath, payload])] - : state.browser.expandPath + browserExpandPath }, localhost: { ...state.localhost, files: state.mode === 'localhost' - ? fileAdded(state, payload) + ? fd : state.localhost.files, + flatTree: state.mode === 'localhost' ? flatTree : state.localhost.flatTree, expandPath: - state.mode === 'localhost' - ? [...new Set([...state.localhost.expandPath, payload])] - : state.localhost.expandPath + localhostExpandPath } } } case 'FOLDER_ADDED_SUCCESS': { const payload = action.payload - + const fd = fetchDirectoryContent(state, payload) + const browserExpandPath = state.mode === 'browser' && !isElectron() ? [...new Set([...state.browser.expandPath, payload.folderPath])] : state.browser.expandPath + const localhostExpandPath = state.mode === 'localhost' ? [...new Set([...state.localhost.expandPath, payload.folderPath])] : state.localhost.expandPath + const flatTree = flattenTree(fd, state.mode === 'browser'? browserExpandPath : localhostExpandPath) return { ...state, browser: { ...state.browser, files: state.mode === 'browser' - ? fetchDirectoryContent(state, payload) + ? fd : state.browser.files, + flatTree: state.mode === 'browser' ? flatTree : state.browser.flatTree, expandPath: - state.mode === 'browser' - ? [...new Set([...state.browser.expandPath, payload.folderPath])] - : state.browser.expandPath + browserExpandPath }, localhost: { ...state.localhost, files: state.mode === 'localhost' - ? fetchDirectoryContent(state, payload) + ? fd : state.localhost.files, + flatTree: state.mode === 'localhost' ? flatTree : state.localhost.flatTree, expandPath: - state.mode === 'localhost' - ? [ - ...new Set([ - ...state.localhost.expandPath, - payload.folderPath - ]) - ] - : state.localhost.expandPath + localhostExpandPath } } } case 'FILE_REMOVED_SUCCESS': { const payload = action.payload - + const fd = fileRemoved(state, payload) + const browserExpandPath = state.mode === 'browser' && !isElectron() ? [...state.browser.expandPath.filter((path) => path !== payload)] : state.browser.expandPath + const localhostExpandPath = state.mode === 'localhost' ? [...state.localhost.expandPath.filter((path) => path !== payload)] : state.localhost.expandPath + const flatTree = flattenTree(fd, state.mode === 'browser'? browserExpandPath : localhostExpandPath) + return { ...state, browser: { ...state.browser, files: state.mode === 'browser' - ? fileRemoved(state, payload) + ? fd : state.browser.files, + flatTree: state.mode === 'browser' ? flatTree : state.browser.flatTree, expandPath: - state.mode === 'browser' - ? [...state.browser.expandPath.filter((path) => path !== payload)] - : state.browser.expandPath + browserExpandPath }, localhost: { ...state.localhost, files: state.mode === 'localhost' - ? fileRemoved(state, payload) + ? fd : state.localhost.files, + flatTree: state.mode === 'localhost' ? flatTree : state.localhost.flatTree, expandPath: - state.mode === 'localhost' - ? [...state.browser.expandPath.filter((path) => path !== payload)] - : state.localhost.expandPath + localhostExpandPath } } } @@ -423,45 +441,51 @@ export const browserReducer = (state = browserInitialState, action: Actions) => case 'ADD_INPUT_FIELD': { const payload = action.payload - + const fd = fetchDirectoryContent(state, payload) + const flatTree = flattenTree(fd, state.mode === 'browser'? state.browser.expandPath : state.localhost.expandPath) return { ...state, browser: { ...state.browser, files: state.mode === 'browser' - ? fetchDirectoryContent(state, payload) - : state.browser.files + ? fd + : state.browser.files, + flatTree: state.mode === 'browser' ? flatTree : state.browser.flatTree, }, localhost: { ...state.localhost, files: state.mode === 'localhost' - ? fetchDirectoryContent(state, payload) - : state.localhost.files + ? fd + : state.localhost.files, + flatTree: state.mode === 'localhost' ? flatTree : state.localhost.flatTree, }, - focusEdit: payload.path + '/' + 'blank' + focusEdit: payload.path + '/' + '....blank' } } case 'REMOVE_INPUT_FIELD': { const payload = action.payload - + const fd = removeInputField(state, payload.path) + const flatTree = flattenTree(fd, state.mode === 'browser'? state.browser.expandPath : state.localhost.expandPath) return { ...state, browser: { ...state.browser, files: state.mode === 'browser' - ? removeInputField(state, payload.path) - : state.browser.files + ? fd + : state.browser.files, + flatTree: state.mode === 'browser' ? flatTree : state.browser.flatTree, }, localhost: { ...state.localhost, files: state.mode === 'localhost' - ? removeInputField(state, payload.path) - : state.localhost.files + ? fd + : state.localhost.files, + flatTree: state.mode === 'localhost' ? flatTree : state.localhost.flatTree, }, focusEdit: null } @@ -478,22 +502,25 @@ export const browserReducer = (state = browserInitialState, action: Actions) => case 'FILE_RENAMED_SUCCESS': { const payload = action.payload - + const fd = fetchDirectoryContent(state, payload, payload.oldPath) + const flatTree = flattenTree(fd, state.mode === 'browser'? state.browser.expandPath : state.localhost.expandPath) return { ...state, browser: { ...state.browser, files: state.mode === 'browser' - ? fetchDirectoryContent(state, payload, payload.oldPath) - : state.browser.files + ? fd + : state.browser.files, + flatTree: state.mode === 'browser' ? flatTree : state.browser.flatTree, }, localhost: { ...state.localhost, files: state.mode === 'localhost' - ? fetchDirectoryContent(state, payload, payload.oldPath) - : state.localhost.files + ? fd + : state.localhost.files, + flatTree: state.mode === 'localhost' ? flatTree : state.localhost.flatTree, } } } @@ -603,7 +630,7 @@ export const browserReducer = (state = browserInitialState, action: Actions) => popup: '' } } - + case 'SET_FOCUS_ELEMENT': { const payload = action.payload @@ -658,15 +685,17 @@ export const browserReducer = (state = browserInitialState, action: Actions) => case 'SET_EXPAND_PATH': { const payload = action.payload as string[] - + const flatTree = flattenTree(state.mode === 'browser' ? state.browser.files : state.localhost.files, payload) return { ...state, browser: { ...state.browser, + flatTree: state.mode === 'browser' ? flatTree : state.browser.flatTree, expandPath: payload }, localhost: { ...state.localhost, + flatTree: state.mode === 'localhost' ? flatTree : state.localhost.flatTree, expandPath: payload } } @@ -833,11 +862,59 @@ export const browserReducer = (state = browserInitialState, action: Actions) => } } + + case 'SET_ELECTRON_RECENT_FOLDERS': { + const payload: string[] = action.payload + return { + ...state, + browser: { + ...state.browser, + recentFolders: payload + } + } + } + + case 'SET_CURRENT_LOCAL_FILE_PATH': { + const payload: string = action.payload + return { + ...state, + browser: { + ...state.browser, + currentLocalFilePath: payload + } + } + } + default: throw new Error() } } +const flattenTree = (files, expandPath: string[]) =>{ + const flatTree = [] + const mapChild = (file: FileType) => { + + if (!file || !file.path) return + + flatTree.push(file) + + if (file.isDirectory && file.child && expandPath && expandPath.find((path) => path === file.path || path.startsWith(file.path + '/')) ) { + const sorted = fileKeySort(file.child) + Object.keys(sorted).map((key) => { + mapChild(sorted[key]) + }) + } + } + if(files){ + const sorted = fileKeySort(files[ROOT_PATH]) + Object.keys(sorted).map((key) => { + mapChild(sorted[key]) + }) + } + + return flatTree +} + const fileAdded = ( state: BrowserState, path: string @@ -845,6 +922,7 @@ const fileAdded = ( let files = state.mode === 'browser' ? state.browser.files : state.localhost.files const _path = splitPath(state, path) + const childPath = _path.slice(0, _path.length - 1) files = _.setWith( files, @@ -857,6 +935,17 @@ const fileAdded = ( }, Object ) + const prevFiles = _.get(files, childPath) + + files = _.setWith( + files, + childPath, + { + ...prevFiles + }, + Object + ) + return files } @@ -878,10 +967,9 @@ const removeInputField = ( ): {[x: string]: Record} => { let files = state.mode === 'browser' ? state.browser.files : state.localhost.files - const root = state.mode === 'browser' ? ROOT_PATH : state.mode - + const root = ROOT_PATH if (path === root) { - delete files[root][path + '/' + 'blank'] + delete files[root][path + '/' + '....blank'] return files } const _path = splitPath(state, path) @@ -889,8 +977,8 @@ const removeInputField = ( if (prevFiles) { prevFiles.child && - prevFiles.child[path + '/' + 'blank'] && - delete prevFiles.child[path + '/' + 'blank'] + prevFiles.child[path + '/' + '....blank'] && + delete prevFiles.child[path + '/' + '....blank'] files = _.setWith( files, _path, @@ -946,7 +1034,7 @@ const fetchDirectoryContent = ( prevFiles.child ) if (deletePath) { - if (deletePath.endsWith('/blank')) delete prevFiles.child[deletePath] + if (deletePath.endsWith('/....blank')) delete prevFiles.child[deletePath] else { deletePath = extractNameFromKey(deletePath) delete prevFiles.child[deletePath] @@ -981,7 +1069,7 @@ const fetchDirectoryContent = ( prevFiles.child ) if (deletePath) { - if (deletePath.endsWith('/blank')) delete prevFiles.child[deletePath] + if (deletePath.endsWith('/....blank')) delete prevFiles.child[deletePath] else { deletePath = extractNameFromKey(deletePath) delete prevFiles.child[deletePath] @@ -1043,7 +1131,7 @@ const normalize = ( }) if (newInputType === 'folder') { - const path = directory + '/blank' + const path = directory + '/....blank' folders[path] = { path: path, @@ -1052,7 +1140,7 @@ const normalize = ( type: 'folder' } } else if (newInputType === 'file') { - const path = directory + '/blank' + const path = directory + '/....blank' files[path] = { path: path, diff --git a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx index f8a5209cb9..a71d5b897e 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -11,13 +11,18 @@ import {HamburgerMenu} from './components/workspace-hamburger' import {MenuItems, WorkSpaceState} from './types' import {contextMenuActions} from './utils' import FileExplorerContextMenu from './components/file-explorer-context-menu' -import {customAction} from '@remixproject/plugin-api' +import { customAction } from '@remixproject/plugin-api' +import { appPlatformTypes, platformContext } from '@remix-ui/app' +import { ElectronMenu } from './components/electron-menu' +import { ElectronWorkspaceName } from './components/electron-workspace-name' + const _paq = (window._paq = window._paq || []) const canUpload = window.File || window.FileReader || window.FileList || window.Blob export function Workspace() { + const platform = useContext(platformContext) const LOCALHOST = ' - connect to localhost - ' const NO_WORKSPACE = ' - none - ' const [currentWorkspace, setCurrentWorkspace] = useState(NO_WORKSPACE) @@ -112,6 +117,18 @@ export function Workspace() { } setCurrentWorkspace(workspaceName) resetFocus() + + // expose some UI to the plugin, perhaps not the best way to do it + if (global.plugin) { + global.plugin.loadTemplate = async () => { + await global.plugin.call('menuicons', 'select', 'filePanel') + createWorkspace() + } + global.plugin.clone = async () => { + await global.plugin.call('menuicons', 'select', 'filePanel') + cloneGitRepository() + } + } }, []) useEffect(() => { @@ -175,9 +192,9 @@ export function Workspace() { } const createWorkspace = () => { global.modal( - intl.formatMessage({id: 'filePanel.workspace.create'}), + intl.formatMessage({id: (platform !== appPlatformTypes.desktop)? 'filePanel.workspace.create': 'filePanel.workspace.create.desktop'}), createModalMessage(), - intl.formatMessage({id: 'filePanel.ok'}), + intl.formatMessage({id: (platform !== appPlatformTypes.desktop)? 'filePanel.ok':'filePanel.selectFolder'}), onFinishCreateWorkspace, intl.formatMessage({id: 'filePanel.cancel'}) ) @@ -228,7 +245,7 @@ export function Workspace() { global.modal( intl.formatMessage({id: 'filePanel.workspace.clone'}), cloneModalMessage(), - intl.formatMessage({id: 'filePanel.ok'}), + intl.formatMessage({id: (platform !== appPlatformTypes.desktop)? 'filePanel.ok':'filePanel.selectFolder'}), handleTypingUrl, intl.formatMessage({id: 'filePanel.cancel'}) ) @@ -322,7 +339,7 @@ export function Workspace() { await global.dispatchCreateWorkspace(workspaceName, workspaceTemplateName, opts, initGitRepo) } catch (e) { global.modal( - intl.formatMessage({id: 'filePanel.workspace.create'}), + intl.formatMessage({id: (platform !== appPlatformTypes.desktop)? 'filePanel.workspace.create': 'filePanel.workspace.create.desktop'}), e.message, intl.formatMessage({id: 'filePanel.ok'}), () => {}, @@ -413,7 +430,7 @@ export function Workspace() { global.modal( intl.formatMessage({id: 'filePanel.workspace.clone'}), intl.formatMessage({id: 'filePanel.workspace.cloneMessage'}), - intl.formatMessage({id: 'filePanel.ok'}), + intl.formatMessage({id: (platform !== appPlatformTypes.desktop)? 'filePanel.ok':'filePanel.selectFolder'}), () => {}, intl.formatMessage({id: 'filePanel.cancel'}) ) @@ -639,7 +656,7 @@ export function Workspace() { await global.dispatchAddInputField(parentFolder, 'file') global.dispatchHandleExpandPath(expandPath) - editModeOn(parentFolder + '/blank', 'file', true) + editModeOn(parentFolder + '/....blank', 'file', true) } const handleNewFolderInput = async (parentFolder?: string) => { @@ -649,7 +666,7 @@ export function Workspace() { await global.dispatchAddInputField(parentFolder, 'folder') global.dispatchHandleExpandPath(expandPath) - editModeOn(parentFolder + '/blank', 'folder', true) + editModeOn(parentFolder + '/....blank', 'folder', true) } const toggleDropdown = (isOpen: boolean) => { @@ -850,7 +867,7 @@ export function Workspace() { className="form-check-input custom-control-input" type="checkbox" disabled={!global.fs.gitConfig.username || !global.fs.gitConfig.email} - onChange={() => {}} + onChange={() => { }} />
    diff --git a/libs/remix-ui/workspace/src/lib/types/index.ts b/libs/remix-ui/workspace/src/lib/types/index.ts index 1984114bca..b3968ac21c 100644 --- a/libs/remix-ui/workspace/src/lib/types/index.ts +++ b/libs/remix-ui/workspace/src/lib/types/index.ts @@ -4,8 +4,10 @@ import { customAction } from '@remixproject/plugin-api' import { fileDecoration } from '@remix-ui/file-decorators' import { RemixAppManager } from 'libs/remix-ui/plugin-manager/src/types' import { ViewPlugin } from '@remixproject/engine-web' +import { appPlatformTypes } from '@remix-ui/app' +import { Placement } from 'react-bootstrap/esm/Overlay' -export type action = { name: string, type?: Array, path?: string[], extension?: string[], pattern?: string[], id: string, multiselect: boolean, label: string, sticky?: boolean, group: number } +export type action = { name: string, type?: Array, path?: string[], extension?: string[], pattern?: string[], id: string, multiselect: boolean, label: string, sticky?: boolean, group: number, platform?: appPlatformTypes } export interface JSONStandardInput { language: 'Solidity' settings?: any @@ -73,6 +75,7 @@ export interface FilePanelType extends ViewPlugin { initialWorkspace: string resetNewFile: () => void getWorkspaces: () => string[] + expandPath: string[] } /* eslint-disable-next-line */ @@ -82,6 +85,7 @@ export interface FileExplorerProps { contextMenuItems: MenuItems, removedContextMenuItems: MenuItems, files: { [x: string]: Record }, + flatTree: FileType[], workspaceState: WorkSpaceState, fileState: fileDecoration[], expandPath: string[], @@ -127,7 +131,7 @@ export interface FileExplorerProps { handleNewFolderInput: (parentFolder?: string) => Promise dragStatus: (status: boolean) => void } -type Placement = import('react-overlays/usePopper').Placement + export interface FileExplorerMenuProps { title: string menuItems: string[] @@ -297,7 +301,9 @@ export interface ActionPayloadTypes { username: string; token: string; email: string - } + }, + SET_ELECTRON_RECENT_FOLDERS: string[] + SET_CURRENT_LOCAL_FILE_PATH: string } export interface Action { diff --git a/libs/remix-ui/workspace/src/lib/utils/getEventTarget.ts b/libs/remix-ui/workspace/src/lib/utils/getEventTarget.ts new file mode 100644 index 0000000000..e61cc7a226 --- /dev/null +++ b/libs/remix-ui/workspace/src/lib/utils/getEventTarget.ts @@ -0,0 +1,25 @@ +export const getEventTarget = async (e: any, useLabel: boolean = false) => { + let target = e.target as HTMLElement + while (target && target.getAttribute && !target.getAttribute(useLabel? 'data-label-path' : 'data-path')) { + target = target.parentElement + } + if (target && target.getAttribute) { + const path = target.getAttribute(useLabel? 'data-label-path' : 'data-path') + const type = target.getAttribute(useLabel? 'data-label-type' : 'data-type') + const position = target.getBoundingClientRect() + // get size of element + + const endPosition = { + top: position.top - position.height * 2 + 4, + left: position.left , + } + + const content = target.textContent + return { + path, + type, + content, + position: endPosition + } + } +} \ No newline at end of file diff --git a/libs/remix-ui/workspace/src/lib/utils/index.ts b/libs/remix-ui/workspace/src/lib/utils/index.ts index b9cca48f09..060dbf561f 100644 --- a/libs/remix-ui/workspace/src/lib/utils/index.ts +++ b/libs/remix-ui/workspace/src/lib/utils/index.ts @@ -1,3 +1,4 @@ +import { appPlatformTypes } from '@remix-ui/app' import { FileType } from '@remix-ui/file-decorators' import { WorkspaceProps, MenuItems } from '../types' @@ -29,7 +30,7 @@ export const contextMenuActions: MenuItems = [{ multiselect: false, label: '', group: 0 -},{ +}, { id: 'deleteAll', name: 'Delete All', type: ['folder', 'file'], @@ -63,7 +64,8 @@ export const contextMenuActions: MenuItems = [{ type: ['file', 'folder', 'workspace'], multiselect: false, label: '', - group: 2 + group: 2, + platform: appPlatformTypes.web }, { id: 'run', name: 'Run', @@ -71,41 +73,46 @@ export const contextMenuActions: MenuItems = [{ multiselect: false, label: '', group: 3 -},{ +}, { id: 'pushChangesToGist', name: 'Push changes to gist', type: ['gist'], multiselect: false, label: '', - group: 4 + group: 4, + platform: appPlatformTypes.web }, { id: 'publishFolderToGist', name: 'Publish folder to gist', type: ['folder'], multiselect: false, label: '', - group: 4 + group: 4, + platform: appPlatformTypes.web }, { id: 'publishFileToGist', name: 'Publish file to gist', type: ['file'], multiselect: false, label: '', - group: 4 + group: 4, + platform: appPlatformTypes.web }, { id: 'uploadFile', name: 'Load a Local File', type: ['folder', 'gist', 'workspace'], multiselect: false, label: 'Load a Local File', - group: 4 + group: 4, + platform: appPlatformTypes.web }, { id: 'publishToGist', name: 'Push changes to gist', type: ['folder', 'gist'], multiselect: false, label: 'Publish all to Gist', - group: 4 + group: 4, + platform: appPlatformTypes.web }, { id: 'publishWorkspace', @@ -113,22 +120,29 @@ export const contextMenuActions: MenuItems = [{ type: ['workspace'], multiselect: false, label: '', - group: 4 + group: 4, + platform: appPlatformTypes.web }] -export const fileKeySort = (children: FileType[]): string[] => { - const directories = Object.keys(children).filter((key: string) => children[key].isDirectory && children[key].name !== '') +export const fileKeySort = (fileTree: any) => { + const directories = Object.keys(fileTree).filter((key: string) => !key.includes('....blank') && fileTree[key].isDirectory) - // sort case insensitive directories.sort((a: string, b: string) => a.toLowerCase().localeCompare(b.toLowerCase())) - const fileKeys = Object.keys(children).filter((key: string) => !children[key].isDirectory && children[key].name !== '') - // sort case insensitive - fileKeys.sort((a: string, b: string) => a.toLowerCase().localeCompare(b.toLowerCase())) + const fileKeys = Object.keys(fileTree).filter((key: string) => !key.includes('....blank') && !fileTree[key].isDirectory) - // find the children with a blank name - const blankChildren = Object.keys(children).filter((key: string) => children[key].name === '') + fileKeys.sort((a: string, b: string) => a.toLowerCase().localeCompare(b.toLowerCase())) + // find the input elementfileTree - const keys = [...directories, ...fileKeys, ...blankChildren] - return keys -} \ No newline at end of file + const blank = Object.keys(fileTree).find((key: string) => key.includes('....blank')) + if (fileTree[blank]) { + fileKeys.push(blank) + } + const keys = [...directories, ...fileKeys] + // rebuild the fileTree using the keys + const newFileTree: FileType[] = [] + keys.forEach((key: string) => { + newFileTree.push(fileTree[key]) + }) + return newFileTree +} diff --git a/libs/remix-ui/xterm/src/index.ts b/libs/remix-ui/xterm/src/index.ts new file mode 100644 index 0000000000..d0850bef79 --- /dev/null +++ b/libs/remix-ui/xterm/src/index.ts @@ -0,0 +1,2 @@ +export * from './lib/components/remix-ui-xterm' +export * from './lib/components/remix-ui-xterminals' \ No newline at end of file diff --git a/libs/remix-ui/xterm/src/lib/components/remix-ui-xterm.tsx b/libs/remix-ui/xterm/src/lib/components/remix-ui-xterm.tsx new file mode 100644 index 0000000000..703b335f7f --- /dev/null +++ b/libs/remix-ui/xterm/src/lib/components/remix-ui-xterm.tsx @@ -0,0 +1,78 @@ +import React, {useState, useEffect, forwardRef} from 'react' // eslint-disable-line +import {ElectronPlugin} from '@remixproject/engine-electron' +import {Xterm} from './xterm-wrap' +import {FitAddon} from './xterm-fit-addOn' + +const config = { + fontSize: 12, + fontFamily: + 'Menlo, "DejaVu Sans Mono", Consolas, "Lucida Console", monospace', + fontWeight: 'normal', + fontWeightBold: 'bold', + lineHeight: 1, + letterSpacing: 0, +} + +const fitAddon = new FitAddon() + +export interface RemixUiXtermProps { + plugin: ElectronPlugin + pid: number + send: (data: string, pid: number) => void + resize: (event: { cols: number; rows: number }, pid: number) => void + timeStamp: number + setTerminalRef: (pid: number, ref: any) => void + theme: { + backgroundColor: string + textColor: string + fillColor: string + } +} + +const RemixUiXterm = (props: RemixUiXtermProps) => { + const {plugin, pid, send, timeStamp, theme, resize} = props + const xtermRef = React.useRef(null) + + useEffect(() => { + props.setTerminalRef(pid, xtermRef.current) + }, [xtermRef.current]) + + useEffect(() => { + xtermRef.current.terminal.options.theme = { + background: theme.backgroundColor, + foreground: theme.textColor, + selection: theme.fillColor, + cursor: theme.textColor, + } + },[theme]) + + useEffect(() => { + fitAddon.fit() + },[timeStamp]) + + const onResize = (event: { cols: number; rows: number }) => { + resize(event, pid) + } + + + + return ( + fitAddon.fit()} + options={{ + fontFamily: config.fontFamily, + fontSize: config.fontSize, + letterSpacing: config.letterSpacing, + lineHeight: config.lineHeight, + }} + ref={xtermRef} + onData={(data) => { + send(data, pid) + }} + > + ) +} + +export default RemixUiXterm diff --git a/libs/remix-ui/xterm/src/lib/components/remix-ui-xterminals.tsx b/libs/remix-ui/xterm/src/lib/components/remix-ui-xterminals.tsx new file mode 100644 index 0000000000..86011372f2 --- /dev/null +++ b/libs/remix-ui/xterm/src/lib/components/remix-ui-xterminals.tsx @@ -0,0 +1,316 @@ +import React, { useState, useEffect } from 'react' // eslint-disable-line +import { ElectronPlugin } from '@remixproject/engine-electron' +import RemixUiXterm from './remix-ui-xterm' +import '../css/index.css' +import { Button, ButtonGroup, Dropdown, Tab, Tabs } from 'react-bootstrap' +import { CustomTooltip } from '@remix-ui/helper' +import { RemixUiTerminal } from '@remix-ui/terminal' +import { FormattedMessage } from 'react-intl' +export interface RemixUiXterminalsProps { + plugin: ElectronPlugin + onReady: (api: any) => void +} + +export interface xtermState { + pid: number + queue: string + timeStamp: number + ref: any + hidden: boolean +} + +export const RemixUiXterminals = (props: RemixUiXterminalsProps) => { + const [terminals, setTerminals] = useState([]) + const [workingDir, setWorkingDir] = useState('') + const [showOutput, setShowOutput] = useState(true) + const [theme, setTheme] = useState(themeCollection[0]) + const [terminalsEnabled, setTerminalsEnabled] = useState(false) + const [shells, setShells] = useState([]) + const { plugin } = props + + useEffect(() => { + setTimeout(async () => { + + plugin.on('xterm', 'data', async (data: string, pid: number) => { + writeToTerminal(data, pid) + }) + + plugin.on('xterm', 'close', async (pid: number) => { + setTerminals(prevState => { + const removed = prevState.filter(xtermState => xtermState.pid !== pid) + if (removed.length > 0) + removed[removed.length - 1].hidden = false + if (removed.length === 0) + setShowOutput(true) + return [...removed] + }) + }) + + plugin.on('xterm', 'new', async (pid: number) => { + setShowOutput(false) + setTerminals(prevState => { + // set all to hidden + prevState.forEach(xtermState => { + xtermState.hidden = true + }) + return [...prevState, { + pid: pid, + queue: '', + timeStamp: Date.now(), + ref: null, + hidden: false + }] + }) + }) + + + plugin.on('fs', 'workingDirChanged', (path: string) => { + setWorkingDir(path) + setTerminalsEnabled(true) + }) + + const workingDir = await plugin.call('fs', 'getWorkingDir') + if(workingDir && workingDir !== '') { + setTerminalsEnabled(true) + setWorkingDir(workingDir) + } + + plugin.on('theme', 'themeChanged', async (theme) => { + handleThemeChange(theme) + }) + + plugin.on('layout', 'resize', async (height: number) => { + setTerminals(prevState => { + const terminal = prevState.find(xtermState => xtermState.hidden === false) + if (terminal) { + if (terminal.ref && terminal.ref.terminal) { + terminal.timeStamp = Date.now() + } + } + return [...prevState] + }) + }) + + const theme = await plugin.call('theme', 'currentTheme') + handleThemeChange(theme) + + }, 2000) + }, []) + + + const handleThemeChange = (theme: any) => { + themeCollection.forEach((themeItem) => { + if (themeItem.themeName === theme.name) { + setTheme(themeItem) + } + }) + } + + + const writeToTerminal = (data: string, pid: number) => { + setTerminals(prevState => { + const terminal = prevState.find(xtermState => xtermState.pid === pid) + if (terminal) { + if (terminal.ref && terminal.ref.terminal) { + terminal.ref.terminal.write(data) + } else { + terminal.queue += data + } + } + return [...prevState] + }) + } + + const send = (data: string, pid: number) => { + plugin.call('xterm', 'keystroke', data, pid) + } + + const resize = (event: { cols: number; rows: number }, pid: number) => { + plugin.call('xterm', 'resize', event, pid) + } + + + const createTerminal = async (shell?: string) => { + const shells = await plugin.call('xterm', 'getShells') + setShells(shells) + const pid = await plugin.call('xterm', 'createTerminal', workingDir, shell) + setShowOutput(false) + setTerminals(prevState => { + // set all to hidden + prevState.forEach(xtermState => { + xtermState.hidden = true + }) + return [...prevState, { + pid: pid, + queue: '', + timeStamp: Date.now(), + ref: null, + hidden: false + }] + }) + } + + const setTerminalRef = (pid: number, ref: any) => { + setTerminals(prevState => { + const terminal = prevState.find(xtermState => xtermState.pid === pid) + terminal.ref = ref + if (terminal.queue) { + ref.terminal.write(terminal.queue) + terminal.queue = '' + } + return [...prevState] + }) + } + + const selectTerminal = (state: xtermState) => { + setTerminals(prevState => { + // set all to hidden + prevState.forEach(xtermState => { + xtermState.hidden = true + }) + const terminal = prevState.find(xtermState => xtermState.pid === state.pid) + terminal.hidden = false + return [...prevState] + }) + } + + const closeTerminal = () => { + const pid = terminals.find(xtermState => xtermState.hidden === false).pid + if (pid) + plugin.call('xterm', 'closeTerminal', pid) + } + + const selectOutput = () => { + props.plugin.call('layout', 'minimize', props.plugin.profile.name, false) + setShowOutput(true) + } + + const showTerminal = () => { + setShowOutput(false) + props.plugin.call('layout', 'minimize', props.plugin.profile.name, false) + if (terminals.length === 0) createTerminal() + } + + const clearTerminal = () => { + const terminal = terminals.find(xtermState => xtermState.hidden === false) + if (terminal && terminal.ref && terminal.ref.terminal) + terminal.ref.terminal.clear() + } + + return (<> +
    +
    + + +
    +
    + + + + + + + + + + {shells.map((shell, index) => { + return ( await createTerminal(shell)}>{shell}) + })} + + + +
    +
    + + + +
    + <> + +
    + {terminals.map((xtermState) => { + return ( +
    + +
    + ) + })} +
    + {terminals.map((xtermState, index) => { + return () + })} +
    +
    + +
    + + + ) +} + +const themeCollection = [ + { + themeName: 'HackerOwl', backgroundColor: '#011628', textColor: '#babbcc', + shapeColor: '#8694a1', fillColor: '#011C32' + }, + { + themeName: 'Cerulean', backgroundColor: '#ffffff', textColor: '#343a40', + shapeColor: '#343a40', fillColor: '#f8f9fa' + }, + { + themeName: 'Cyborg', backgroundColor: '#060606', textColor: '#adafae', + shapeColor: '#adafae', fillColor: '#222222' + }, + { + themeName: 'Dark', backgroundColor: '#222336', textColor: '#babbcc', + shapeColor: '#babbcc', fillColor: '#2a2c3f' + }, + { + themeName: 'Flatly', backgroundColor: '#ffffff', textColor: '#343a40', + shapeColor: '#7b8a8b', fillColor: '#ffffff' + }, + { + themeName: 'Black', backgroundColor: '#1a1a1a', textColor: '#babbcc', + shapeColor: '#b5b4bc', fillColor: '#1f2020' + }, + { + themeName: 'Light', backgroundColor: '#eef1f6', textColor: '#3b445e', + shapeColor: '#343a40', fillColor: '#ffffff' + }, + { + themeName: 'Midcentury', backgroundColor: '#DBE2E0', textColor: '#11556c', + shapeColor: '#343a40', fillColor: '#eeede9' + }, + { + themeName: 'Spacelab', backgroundColor: '#ffffff', textColor: '#343a40', + shapeColor: '#333333', fillColor: '#eeeeee' + }, + { + themeName: 'Candy', backgroundColor: '#d5efff', textColor: '#11556c', + shapeColor: '#343a40', fillColor: '#fbe7f8' + }, + { + themeName: 'Violet', backgroundColor: '#f1eef6', textColor: '#3b445e', + shapeColor: '#343a40', fillColor: '#f8fafe' + }, + { + themeName: 'Pride', backgroundColor: '#f1eef6', textColor: '#343a40', + shapeColor: '#343a40', fillColor: '#f8fafe' + }, +] \ No newline at end of file diff --git a/libs/remix-ui/xterm/src/lib/components/xterm-fit-addOn.ts b/libs/remix-ui/xterm/src/lib/components/xterm-fit-addOn.ts new file mode 100644 index 0000000000..9066fa05d9 --- /dev/null +++ b/libs/remix-ui/xterm/src/lib/components/xterm-fit-addOn.ts @@ -0,0 +1,93 @@ +/** + * Copyright (c) 2017 The xterm.js authors. All rights reserved. + * @license MIT + */ + +import { Terminal, ITerminalAddon } from 'xterm'; + + +interface ITerminalDimensions { + /** + * The number of rows in the terminal. + */ + rows: number; + + /** + * The number of columns in the terminal. + */ + cols: number; +} + +const MINIMUM_COLS = 2; +const MINIMUM_ROWS = 1; + +export class FitAddon implements ITerminalAddon { + private _terminal: Terminal | undefined; + + constructor() {} + + public activate(terminal: Terminal): void { + this._terminal = terminal; + } + + public dispose(): void {} + + public fit(): void { + const dims = this.proposeDimensions(); + if (!dims || !this._terminal || isNaN(dims.cols) || isNaN(dims.rows)) { + return; + } + + // TODO: Remove reliance on private API + const core = (this._terminal as any)._core; + + // Force a full render + if (this._terminal.rows !== dims.rows || this._terminal.cols !== dims.cols) { + core._renderService.clear(); + this._terminal.resize(dims.cols, dims.rows); + } + } + + public proposeDimensions(): ITerminalDimensions | undefined { + if (!this._terminal) { + return undefined; + } + + if (!this._terminal.element || !this._terminal.element.parentElement || !this._terminal.element.parentElement.parentElement) { + return undefined; + } + + // TODO: Remove reliance on private API + const core = (this._terminal as any)._core; + const dims = core._renderService.dimensions; + + if (dims.css.cell.width === 0 || dims.css.cell.height === 0) { + return undefined; + } + + const scrollbarWidth = this._terminal.options.scrollback === 0 ? + 0 : core.viewport.scrollBarWidth; + + + const parentElementStyle = window.getComputedStyle(this._terminal.element.parentElement.parentElement); + const parentElementHeight = parseInt(parentElementStyle.getPropertyValue('height')); + const parentElementWidth = Math.max(0, parseInt(parentElementStyle.getPropertyValue('width'))); + const elementStyle = window.getComputedStyle(this._terminal.element); + const elementPadding = { + top: parseInt(elementStyle.getPropertyValue('padding-top')), + bottom: parseInt(elementStyle.getPropertyValue('padding-bottom')), + right: parseInt(elementStyle.getPropertyValue('padding-right')), + left: parseInt(elementStyle.getPropertyValue('padding-left')) + }; + const elementPaddingVer = elementPadding.top + elementPadding.bottom; + const elementPaddingHor = elementPadding.right + elementPadding.left; + const availableHeight = parentElementHeight - elementPaddingVer; + const availableWidth = parentElementWidth - elementPaddingHor - scrollbarWidth; + const geometry = { + cols: Math.max(MINIMUM_COLS, Math.floor(availableWidth / dims.css.cell.width)), + rows: Math.max(MINIMUM_ROWS, Math.floor((availableHeight - 17) / dims.css.cell.height)) + }; + + return geometry; + } +} diff --git a/libs/remix-ui/xterm/src/lib/components/xterm-wrap.tsx b/libs/remix-ui/xterm/src/lib/components/xterm-wrap.tsx new file mode 100644 index 0000000000..03b54ccf6f --- /dev/null +++ b/libs/remix-ui/xterm/src/lib/components/xterm-wrap.tsx @@ -0,0 +1,237 @@ +import * as React from 'react' +import PropTypes from 'prop-types' + +import 'xterm/css/xterm.css' + +// We are using these as types. +// eslint-disable-next-line no-unused-vars +import { Terminal, ITerminalOptions, ITerminalAddon } from 'xterm' + +interface IProps { + /** + * Class name to add to the terminal container. + */ + className?: string + + /** + * Options to initialize the terminal with. + */ + options?: ITerminalOptions + + /** + * An array of XTerm addons to load along with the terminal. + */ + addons?: Array + + /** + * Adds an event listener for when a binary event fires. This is used to + * enable non UTF-8 conformant binary messages to be sent to the backend. + * Currently this is only used for a certain type of mouse reports that + * happen to be not UTF-8 compatible. + * The event value is a JS string, pass it to the underlying pty as + * binary data, e.g. `pty.write(Buffer.from(data, 'binary'))`. + */ + onBinary?(data: string): void + + /** + * Adds an event listener for the cursor moves. + */ + onCursorMove?(): void + + /** + * Adds an event listener for when a data event fires. This happens for + * example when the user types or pastes into the terminal. The event value + * is whatever `string` results, in a typical setup, this should be passed + * on to the backing pty. + */ + onData?(data: string): void + + /** + * Adds an event listener for when a key is pressed. The event value contains the + * string that will be sent in the data event as well as the DOM event that + * triggered it. + */ + onKey?(event: { key: string; domEvent: KeyboardEvent }): void + + /** + * Adds an event listener for when a line feed is added. + */ + onLineFeed?(): void + + /** + * Adds an event listener for when a scroll occurs. The event value is the + * new position of the viewport. + * @returns an `IDisposable` to stop listening. + */ + onScroll?(newPosition: number): void + + /** + * Adds an event listener for when a selection change occurs. + */ + onSelectionChange?(): void + + /** + * Adds an event listener for when rows are rendered. The event value + * contains the start row and end rows of the rendered area (ranges from `0` + * to `Terminal.rows - 1`). + */ + onRender?(event: { start: number; end: number }): void + + /** + * Adds an event listener for when the terminal is resized. The event value + * contains the new size. + */ + onResize?(event: { cols: number; rows: number }): void + + /** + * Adds an event listener for when an OSC 0 or OSC 2 title change occurs. + * The event value is the new title. + */ + onTitleChange?(newTitle: string): void + + /** + * Attaches a custom key event handler which is run before keys are + * processed, giving consumers of xterm.js ultimate control as to what keys + * should be processed by the terminal and what keys should not. + * + * @param event The custom KeyboardEvent handler to attach. + * This is a function that takes a KeyboardEvent, allowing consumers to stop + * propagation and/or prevent the default action. The function returns + * whether the event should be processed by xterm.js. + */ + customKeyEventHandler?(event: KeyboardEvent): boolean +} + +export class Xterm extends React.Component { + /** + * The ref for the containing element. + */ + terminalRef: React.RefObject + + /** + * XTerm.js Terminal object. + */ + terminal!: Terminal // This is assigned in the setupTerminal() which is called from the constructor + + static propTypes = { + className: PropTypes.string, + options: PropTypes.object, + addons: PropTypes.array, + onBinary: PropTypes.func, + onCursorMove: PropTypes.func, + onData: PropTypes.func, + onKey: PropTypes.func, + onLineFeed: PropTypes.func, + onScroll: PropTypes.func, + onSelectionChange: PropTypes.func, + onRender: PropTypes.func, + onResize: PropTypes.func, + onTitleChange: PropTypes.func, + customKeyEventHandler: PropTypes.func, + } + + constructor(props: IProps) { + super(props) + + this.terminalRef = React.createRef() + + // Bind Methods + this.onData = this.onData.bind(this) + this.onCursorMove = this.onCursorMove.bind(this) + this.onKey = this.onKey.bind(this) + this.onBinary = this.onBinary.bind(this) + this.onLineFeed = this.onLineFeed.bind(this) + this.onScroll = this.onScroll.bind(this) + this.onSelectionChange = this.onSelectionChange.bind(this) + this.onRender = this.onRender.bind(this) + this.onResize = this.onResize.bind(this) + this.onTitleChange = this.onTitleChange.bind(this) + + this.setupTerminal() + } + + setupTerminal() { + // Setup the XTerm terminal. + this.terminal = new Terminal(this.props.options) + + // Load addons if the prop exists. + if (this.props.addons) { + this.props.addons.forEach((addon) => { + this.terminal.loadAddon(addon) + }) + } + + // Create Listeners + this.terminal.onBinary(this.onBinary) + this.terminal.onCursorMove(this.onCursorMove) + this.terminal.onData(this.onData) + this.terminal.onKey(this.onKey) + this.terminal.onLineFeed(this.onLineFeed) + this.terminal.onScroll(this.onScroll) + this.terminal.onSelectionChange(this.onSelectionChange) + this.terminal.onRender(this.onRender) + this.terminal.onResize(this.onResize) + this.terminal.onTitleChange(this.onTitleChange) + + // Add Custom Key Event Handler + if (this.props.customKeyEventHandler) { + this.terminal.attachCustomKeyEventHandler(this.props.customKeyEventHandler) + } + } + + componentDidMount() { + if (this.terminalRef.current) { + // Creates the terminal within the container element. + this.terminal.open(this.terminalRef.current) + } + } + + componentWillUnmount() { + // When the component unmounts dispose of the terminal and all of its listeners. + this.terminal.dispose() + } + + private onBinary(data: string) { + if (this.props.onBinary) this.props.onBinary(data) + } + + private onCursorMove() { + if (this.props.onCursorMove) this.props.onCursorMove() + } + + private onData(data: string) { + if (this.props.onData) this.props.onData(data) + } + + private onKey(event: { key: string; domEvent: KeyboardEvent }) { + if (this.props.onKey) this.props.onKey(event) + } + + private onLineFeed() { + if (this.props.onLineFeed) this.props.onLineFeed() + } + + private onScroll(newPosition: number) { + if (this.props.onScroll) this.props.onScroll(newPosition) + } + + private onSelectionChange() { + if (this.props.onSelectionChange) this.props.onSelectionChange() + } + + private onRender(event: { start: number; end: number }) { + if (this.props.onRender) this.props.onRender(event) + } + + private onResize(event: { cols: number; rows: number }) { + if (this.props.onResize) this.props.onResize(event) + } + + private onTitleChange(newTitle: string) { + if (this.props.onTitleChange) this.props.onTitleChange(newTitle) + } + + render() { + return
    + } +} \ No newline at end of file diff --git a/libs/remix-ui/xterm/src/lib/css/index.css b/libs/remix-ui/xterm/src/lib/css/index.css new file mode 100644 index 0000000000..d7a13a031f --- /dev/null +++ b/libs/remix-ui/xterm/src/lib/css/index.css @@ -0,0 +1,70 @@ +.remix-ui-xterminals-container { + display: flex; + flex-direction: row; + flex: 1; +} +.xterm-panel { + display: flex; + flex-direction: column; + flex: 1; +} + +.remix-ui-xterminals-buttons { + display: flex; + flex-direction: column; +} + +.hide-xterm{ + display: none; +} + +.show-xterm{ + display: block; +} + +.xterm-btn-active { + background-color: var(--primary); +} +.xterm-btn-none { + background-color: var(--secondary); +} + +.xterm-terminal { + flex-grow: 1; + height: 100%; + width: 100%; +} + +.xterm-panel-header-right { + display: flex; + flex-direction: row; + justify-content: flex-end; + align-self: flex-end; +} + +.xterm-panel-header { + display: flex; + flex-direction: row; + +} + +.xterm-panel-header-left { + display: flex; + flex-direction: row; + flex-grow: 1; +} + +.remix-ui-xterminals-section { + display: flex; + flex-direction: row; + width: 100%; + z-index: 3; +} + +.hide-terminals { + width: 0; +} + +.show-terminals { + width: 100%; +} diff --git a/libs/remix-url-resolver/src/resolve.ts b/libs/remix-url-resolver/src/resolve.ts index 3b38c3a0ed..f9b77e2b3e 100644 --- a/libs/remix-url-resolver/src/resolve.ts +++ b/libs/remix-url-resolver/src/resolve.ts @@ -184,7 +184,7 @@ export class RemixURLResolver { } const npm_urls = ["https://cdn.jsdelivr.net/npm/", "https://unpkg.com/"] - process && process.env && process.env['NPM_URL'] && npm_urls.unshift(process.env['NPM_URL']) + process && process.env && process.env['NX_NPM_URL'] && npm_urls.unshift(process.env['NX_NPM_URL']) let content = null // get response from all urls for (let i = 0; i < npm_urls.length; i++) { diff --git a/package.json b/package.json index fa3b757afe..a8b17f8009 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "0.40.0-dev", "license": "MIT", "description": "Ethereum Remix Monorepo", + "main": "index.js", "keywords": [ "ethereum", "solidity", @@ -54,6 +55,7 @@ "publish:libs": "yarn run build:libs && lerna publish --skip-git && yarn run bumpVersion:libs", "publishDev:libs": "yarn run build:libs && lerna publish --npm-tag alpha --skip-git && yarn run bumpVersion:libs", "build:e2e": "node apps/remix-ide-e2e/src/buildGroupTests.js && tsc -p apps/remix-ide-e2e/tsconfig.e2e.json", + "build:desktop": "rm -rf apps/remixdesktop/build/remix-ide && mkdir apps/remixdesktop/build && NX_DESKTOP_FROM_DIST=true nx build remix-ide --configuration=desktop && cp -r dist/apps/remix-ide apps/remixdesktop/build/remix-ide", "babel": "babel", "watch:e2e": "nodemon", "bumpVersion:libs": "gulp & gulp syncLibVersions;", @@ -138,13 +140,16 @@ "@openzeppelin/contracts": "^5.0.0", "@openzeppelin/upgrades-core": "^1.30.0", "@openzeppelin/wizard": "0.4.0", - "@remixproject/engine": "0.3.33", - "@remixproject/engine-web": "0.3.33", - "@remixproject/plugin": "0.3.33", - "@remixproject/plugin-api": "0.3.33", - "@remixproject/plugin-utils": "0.3.33", - "@remixproject/plugin-webview": "0.3.33", - "@remixproject/plugin-ws": "0.3.33", + "@remixproject/engine": "0.3.42", + "@remixproject/engine-electron": "0.3.42", + "@remixproject/engine-web": "0.3.42", + "@remixproject/plugin": "0.3.42", + "@remixproject/plugin-api": "0.3.42", + "@remixproject/plugin-electron": "0.3.42", + "@remixproject/plugin-utils": "0.3.42", + "@remixproject/plugin-webview": "0.3.42", + "@remixproject/plugin-ws": "0.3.42", + "@ricarso/react-image-magnifiers": "^1.9.0", "@types/nightwatch": "^2.3.1", "@web3modal/ethereum": "^2.7.1", "@web3modal/react": "^2.6.2", @@ -166,6 +171,9 @@ "create-hash": "^1.2.0", "deep-equal": "^1.0.1", "document-register-element": "1.13.1", + "electron-squirrel-startup": "^1.0.0", + "esbuild": "^0.19.6", + "esbuild-wasm": "^0.19.6", "eslint-config-prettier": "^8.5.0", "ethers": "^5", "ethjs-util": "^0.1.6", @@ -174,7 +182,7 @@ "file-path-filter": "^3.0.2", "file-saver": "^2.0.5", "form-data": "^4.0.0", - "formik": "^2.2.9", + "formik": "^2.4.5", "from-exponential": "1.1.1", "fs-extra": "^3.0.1", "ganache": "^7.9.1", @@ -187,6 +195,7 @@ "js-yaml": "^4.1.0", "jspdf": "^2.5.1", "jszip": "^3.6.0", + "just-once": "^2.2.0", "latest-version": "^5.1.0", "merge": "^2.1.1", "npm-install-version": "^6.0.2", @@ -196,18 +205,20 @@ "prettier": "^2.8.4", "prettier-plugin-solidity": "^1.0.0-beta.24", "raw-loader": "^4.0.2", - "react": "^17.0.2", + "react": "^18.2.0", "react-beautiful-dnd": "^13.1.0", "react-bootstrap": "^1.6.4", - "react-dom": "^17.0.2", + "react-dom": "^18.2.0", "react-draggable": "^4.4.4", - "react-image-magnifiers": "^1.4.0", "react-intl": "^6.0.4", "react-markdown": "^8.0.5", "react-multi-carousel": "^2.8.2", - "react-router-dom": "^6.3.0", - "react-tabs": "^3.2.2", - "react-zoom-pan-pinch": "^3.0.2", + "react-router-dom": "^6.16.0", + "react-tabs": "^6.0.2", + "react-virtualized": "^9.22.5", + "react-virtuoso": "^4.6.2", + "react-window": "^1.8.10", + "react-zoom-pan-pinch": "^3.1.0", "regenerator-runtime": "0.13.7", "remark-gfm": "^3.0.1", "rlp": "^3.0.0", @@ -226,7 +237,9 @@ "wagmi": "^1.3.10", "web3": "^4.1.0", "winston": "^3.3.3", - "ws": "^7.3.0" + "ws": "^7.3.0", + "xterm": "^5.2.1", + "xterm-addon-search": "^0.12.0" }, "devDependencies": { "@babel/cli": "^7.19.3", @@ -242,18 +255,19 @@ "@babel/preset-stage-0": "^7.0.0", "@babel/preset-typescript": "^7.18.6", "@babel/register": "^7.4.4", + "@electron-forge/cli": "^6.1.1", "@fortawesome/fontawesome-free": "^5.8.1", - "@monaco-editor/react": "4.5.1", - "@nrwl/cli": "^15.7.1", - "@nrwl/eslint-plugin-nx": "^15.7.1", + "@monaco-editor/react": "4.6.0", + "@nrwl/cli": "15.7.1", + "@nrwl/eslint-plugin-nx": "15.7.1", "@nrwl/js": "15.7.1", "@nrwl/linter": "15.7.1", "@nrwl/node": "15.7.1", "@nrwl/react": "15.7.1", - "@nrwl/tao": "^15.7.1", + "@nrwl/tao": "15.7.1", "@nrwl/web": "15.7.1", "@nrwl/webpack": "15.7.1", - "@nrwl/workspace": "^15.7.1", + "@nrwl/workspace": "15.7.1", "@openzeppelin/contracts-upgradeable": "^5.0.0", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.10", "@svgr/webpack": "^6.5.1", @@ -266,11 +280,12 @@ "@types/lodash": "^4.14.172", "@types/mocha": "^9.1.1", "@types/node": "18.16.1", - "@types/react": "^17.0.24", + "@types/react": "^18.2.0", "@types/react-beautiful-dnd": "^13.1.2", - "@types/react-dom": "^17.0.9", + "@types/react-dom": "^18.2.0", "@types/react-image-magnifiers": "^1.3.2", - "@types/react-router-dom": "^5.3.0", + "@types/react-router-dom": "^5.3.3", + "@types/react-window": "^1.8.8", "@types/request": "^2.48.7", "@types/semver": "^7.3.10", "@types/tape": "^4.13.0", @@ -279,6 +294,7 @@ "@typescript-eslint/parser": "^5.40.1", "@uniswap/v2-core": "^1.0.1", "@uniswap/v3-core": "^1.0.1", + "@vercel/webpack-asset-relocator-loader": "^1.7.3", "ace-mode-lexon": "^1.*.*", "ace-mode-move": "0.0.1", "ace-mode-solidity": "^0.1.0", @@ -310,6 +326,7 @@ "css-minimizer-webpack-plugin": "^4.2.2", "csslint": "^1.0.2", "dotenv": "^8.2.0", + "electron": "^24.4.0", "eslint": "^8.26.0", "eslint-config-standard": "^14.1.1", "eslint-plugin-import": "2.26.0", @@ -341,7 +358,7 @@ "minixhr": "^4.0.0", "mkdirp": "^0.5.1", "mocha": "^8.0.1", - "monaco-editor": "0.41.0", + "monaco-editor": "0.44.0", "nanohtml": "^1.6.3", "nightwatch": "^2.3", "nodemon": "^2.0.4", @@ -355,7 +372,6 @@ "os-browserify": "^0.3.0", "process": "^0.11.10", "react-refresh": "^0.14.0", - "react-test-renderer": "^17.0.2", "request": "^2.83.0", "rimraf": "^2.6.1", "selenium-standalone": "^9.0.3", @@ -380,6 +396,6 @@ "webpack-cli": "^4.10.0" }, "resolutions": { - "@types/react": "^17.0.24" + "@types/react": "^18.2.0" } } diff --git a/projects.json b/projects.json new file mode 100644 index 0000000000..33a1d79d2f --- /dev/null +++ b/projects.json @@ -0,0 +1,10035 @@ +{ + "graph": { + "nodes": { + "plugin_api": { + "name": "plugin_api", + "type": "app", + "data": { + "name": "plugin_api", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "apps/remix-ide-e2e/src/local-plugin/src/", + "projectType": "application", + "targets": { + "build": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/webpack:webpack", + "outputs": [ + "{options.outputPath}" + ], + "defaultConfiguration": "development", + "options": { + "compiler": "babel", + "outputPath": "dist/apps/plugin_api", + "index": "apps/remix-ide-e2e/src/local-plugin/src/index.html", + "baseHref": "/", + "main": "apps/remix-ide-e2e/src/local-plugin/src/main.tsx", + "polyfills": "apps/remix-ide-e2e/src/local-plugin/src/polyfills.ts", + "tsConfig": "apps/remix-ide-e2e/src/local-plugin/tsconfig.app.json", + "assets": [], + "styles": [ + "apps/remix-ide-e2e/src/local-plugin/src/styles.css" + ], + "scripts": [], + "webpackConfig": "apps/remix-ide-e2e/src/local-plugin/webpack.config.js" + }, + "configurations": { + "development": {}, + "production": { + "fileReplacements": [ + { + "replace": "apps/remix-ide-e2e/src/local-plugin/src/environments/environment.ts", + "with": "apps/remix-ide-e2e/src/local-plugin/src/environments/environment.prod.ts" + } + ] + } + } + }, + "serve": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/webpack:dev-server", + "defaultConfiguration": "development", + "options": { + "buildTarget": "plugin_api:build", + "hmr": true + }, + "configurations": { + "development": { + "buildTarget": "plugin_api:build:development", + "port": 2020 + }, + "production": { + "buildTarget": "plugin_api:build:production" + } + } + } + }, + "tags": [], + "root": "apps/remix-ide-e2e/src/local-plugin", + "implicitDependencies": [], + "files": [ + { + "file": "apps/remix-ide-e2e/src/local-plugin/.babelrc", + "hash": "9123728aa14807603fbde932031b9ae2d5a58a24" + }, + { + "file": "apps/remix-ide-e2e/src/local-plugin/.browserslistrc", + "hash": "f1d12df4faa25ab7f0f03196105e957395f609af" + }, + { + "file": "apps/remix-ide-e2e/src/local-plugin/.eslintrc", + "hash": "75f60dff87ce81561509d2239dcacfbc4b93878e" + }, + { + "file": "apps/remix-ide-e2e/src/local-plugin/project.json", + "hash": "14d022a9d617533fa2080bd52ee6a45c0f7448ef" + }, + { + "file": "apps/remix-ide-e2e/src/local-plugin/src/app/app.css", + "hash": "ce033a9bb1e09b4c3f344305dbff72c2ace54342" + }, + { + "file": "apps/remix-ide-e2e/src/local-plugin/src/app/app.tsx", + "hash": "88c9bc964644d75dcb6fa6c7350370884af27b5e", + "deps": [ + "npm:react", + "npm:@remixproject/plugin-api", + "npm:@remixproject/plugin-utils" + ] + }, + { + "file": "apps/remix-ide-e2e/src/local-plugin/src/app/Client.ts", + "hash": "488b109db68e60d7019c2f667de35e5c31011213", + "deps": [ + "npm:@remixproject/plugin", + "npm:@remixproject/plugin-webview" + ] + }, + { + "file": "apps/remix-ide-e2e/src/local-plugin/src/app/logger.tsx", + "hash": "4273c609d2b8fb625f11c6721704f7ce40693093", + "deps": [ + "npm:react" + ] + }, + { + "file": "apps/remix-ide-e2e/src/local-plugin/src/assets/.gitkeep", + "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" + }, + { + "file": "apps/remix-ide-e2e/src/local-plugin/src/environments/environment.prod.ts", + "hash": "bc0327dbebdd3df82f242e6e07925985f87f309e" + }, + { + "file": "apps/remix-ide-e2e/src/local-plugin/src/environments/environment.ts", + "hash": "9ae66f8b70d3c2a726b6fea04dbb69e8734218be" + }, + { + "file": "apps/remix-ide-e2e/src/local-plugin/src/favicon.ico", + "hash": "317ebcb2336e0833a22dddf0ab287849f26fda57" + }, + { + "file": "apps/remix-ide-e2e/src/local-plugin/src/index.html", + "hash": "b1a45c177ce5a6170a4f6c0ec8d9e376ab19070d" + }, + { + "file": "apps/remix-ide-e2e/src/local-plugin/src/main.tsx", + "hash": "ac848b3e6f6af98f7a5c2b2de8a15633c25dbd5e", + "deps": [ + "npm:react", + "npm:react-dom" + ] + }, + { + "file": "apps/remix-ide-e2e/src/local-plugin/src/polyfills.ts", + "hash": "53c485753e6e49fd2dac115c6e08dbfe99574861", + "deps": [ + "npm:core-js", + "npm:regenerator-runtime" + ] + }, + { + "file": "apps/remix-ide-e2e/src/local-plugin/src/styles.css", + "hash": "90d4ee0072ce3fc41812f8af910219f9eea3c3de" + }, + { + "file": "apps/remix-ide-e2e/src/local-plugin/tsconfig.app.json", + "hash": "66eb193383959a85e0f8fe67e07c03d2ec0f5315" + }, + { + "file": "apps/remix-ide-e2e/src/local-plugin/tsconfig.json", + "hash": "6b1b431876af020c623710929d51798dea2ef74d" + }, + { + "file": "apps/remix-ide-e2e/src/local-plugin/webpack.config.js", + "hash": "25932a1054942fd0eb68ed530fce0e768e6f9473", + "deps": [ + "npm:@nrwl/webpack" + ] + } + ] + } + }, + "remix-url-resolver": { + "name": "remix-url-resolver", + "type": "lib", + "data": { + "name": "remix-url-resolver", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/remix-url-resolver/src", + "projectType": "library", + "implicitDependencies": [], + "targets": { + "test": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "nx:run-script", + "options": { + "script": "test" + }, + "configurations": {} + }, + "build": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/js:tsc", + "outputs": [ + "{options.outputPath}" + ], + "options": { + "outputPath": "dist/libs/remix-url-resolver", + "main": "libs/remix-url-resolver/src/index.ts", + "tsConfig": "libs/remix-url-resolver/tsconfig.lib.json", + "updateBuildableProjectDepsInPackageJson": false, + "assets": [ + "libs/remix-url-resolver/*.md" + ] + }, + "configurations": {} + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "libs/remix-url-resolver/**/*.ts" + ] + } + } + }, + "tags": [], + "root": "libs/remix-url-resolver", + "files": [ + { + "file": "libs/remix-url-resolver/.eslintrc", + "hash": "4177c24ed7bcd6698d0c2d258e0f234b1921f53c" + }, + { + "file": "libs/remix-url-resolver/.gitignore", + "hash": "849ddff3b7ec917b5f4563e9a6d3ea63ea512a70" + }, + { + "file": "libs/remix-url-resolver/.npmignore", + "hash": "6222042be4c1f1fb28c0aff65eee42d7dd383499" + }, + { + "file": "libs/remix-url-resolver/package.json", + "hash": "a1d94cf5872012dee16556723c58f1a50ceb9f4d", + "deps": [ + "npm:@erebos/bzz-node", + "npm:axios", + "npm:url", + "npm:@types/chai", + "npm:@types/mocha", + "npm:@types/node", + "npm:chai", + "npm:mocha", + "npm:ts-node", + "npm:tslint", + "npm:typescript" + ] + }, + { + "file": "libs/remix-url-resolver/project.json", + "hash": "5bd43c8a614d597f9d935188675c98406220299c" + }, + { + "file": "libs/remix-url-resolver/README.md", + "hash": "bd395d3c46b9f75f67639e5fd116b0f5dcea488d" + }, + { + "file": "libs/remix-url-resolver/src/index.ts", + "hash": "30e99022f848f223bc1cf5912cc2aa7b69d2c3b7" + }, + { + "file": "libs/remix-url-resolver/src/resolve.ts", + "hash": "3b38c3a0edfe614c905affa2052c590629a0c383", + "deps": [ + "npm:axios", + "npm:semver", + "npm:@erebos/bzz-node" + ] + }, + { + "file": "libs/remix-url-resolver/tests/example_1/greeter.sol", + "hash": "95e622d176797e6393c3d85415aeb0f1fdcf26d4" + }, + { + "file": "libs/remix-url-resolver/tests/example_1/mortal.sol", + "hash": "e1a1fa4de8a3f739e75cbd6c76cf64c4db0a3673" + }, + { + "file": "libs/remix-url-resolver/tests/test.ts", + "hash": "952967d9c3c2865eb6443d83e886695482958ada", + "deps": [ + "npm:assert" + ] + }, + { + "file": "libs/remix-url-resolver/tsconfig.json", + "hash": "f74b077096017cd8234aa3b115103fd8ae750f5d" + }, + { + "file": "libs/remix-url-resolver/tsconfig.lib.json", + "hash": "ea82c38ae0e537a7f87e4b5808d6a1ecb41194b8" + }, + { + "file": "libs/remix-url-resolver/tslint.json", + "hash": "56c85deb965aaf22a44b2804b1760f52e288b7ce" + } + ] + } + }, + "remix-ws-templates": { + "name": "remix-ws-templates", + "type": "lib", + "data": { + "name": "remix-ws-templates", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/remix-ws-templates/src", + "projectType": "library", + "implicitDependencies": [], + "targets": { + "build": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/js:tsc", + "outputs": [ + "{options.outputPath}" + ], + "options": { + "outputPath": "dist/libs/remix-ws-templates", + "main": "libs/remix-ws-templates/src/index.ts", + "tsConfig": "libs/remix-ws-templates/tsconfig.lib.json", + "updateBuildableProjectDepsInPackageJson": false, + "assets": [ + { + "glob": "templates/**/*", + "ignore": [ + "templates/**/*/index.ts" + ], + "input": "libs/remix-ws-templates/src/", + "output": "src/" + }, + { + "glob": "*.md", + "input": "libs/remix-ws-templates/", + "output": "/" + }, + { + "glob": "templates/**/.prettierrc", + "input": "libs/remix-ws-templates/src/", + "output": "src/" + } + ] + }, + "configurations": {} + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "libs/remix-ws-templates/**/*.ts" + ] + } + } + }, + "tags": [], + "root": "libs/remix-ws-templates", + "files": [ + { + "file": "libs/remix-ws-templates/.eslintrc", + "hash": "0a49d6ddc4bf2b588c7f6b9265362c29378c68b8" + }, + { + "file": "libs/remix-ws-templates/package.json", + "hash": "43bb75dfaea7208c593e55d61ca6be1f36ce4434", + "deps": [ + "npm:@openzeppelin/contracts", + "npm:@openzeppelin/wizard", + "npm:ethers", + "npm:web3" + ] + }, + { + "file": "libs/remix-ws-templates/project.json", + "hash": "7ebf0408d5a99d72ee2b859b301d74e0a83950e4" + }, + { + "file": "libs/remix-ws-templates/README.md", + "hash": "79e654d127054a6a6a507efe7111119c843794bf" + }, + { + "file": "libs/remix-ws-templates/src/index.ts", + "hash": "e11a422750eecc32011fe80c94cedef94577bbe3" + }, + { + "file": "libs/remix-ws-templates/src/script-templates/contract-deployer/basic-contract-deploy.ts", + "hash": "2753f9bcd09de08b4de0a7112535c8733cf0cc77", + "deps": [ + "npm:ethers" + ] + }, + { + "file": "libs/remix-ws-templates/src/script-templates/contract-deployer/create2-factory-deploy.ts", + "hash": "6de36cfa203ef53f414d84e0d921e63abc5b79cb", + "deps": [ + "npm:ethers" + ] + }, + { + "file": "libs/remix-ws-templates/src/script-templates/contract-deployer/index.ts", + "hash": "93682c8002184c10a075711ae1d14caa2e00488b" + }, + { + "file": "libs/remix-ws-templates/src/script-templates/etherscan/index.ts", + "hash": "3abbe27dd6b188f1b1798fe1ea41563e5e4933cb" + }, + { + "file": "libs/remix-ws-templates/src/script-templates/etherscan/receiptGuidScript.ts", + "hash": "cc96dc14e6ea5f880c44e778bc37c6afcdb6a718" + }, + { + "file": "libs/remix-ws-templates/src/script-templates/etherscan/verifyScript.ts", + "hash": "2126bca90b09f66a1f7536046b968c6bafca76a3" + }, + { + "file": "libs/remix-ws-templates/src/templates/blank/.prettierrc", + "hash": "b2a56f23717b4b9b8f05d45363a0fd58c657ce6e" + }, + { + "file": "libs/remix-ws-templates/src/templates/blank/index.ts", + "hash": "78ac9138793c356790467c4ad4401a1bb029a929" + }, + { + "file": "libs/remix-ws-templates/src/templates/gnosisSafeMultisig/.prettierrc", + "hash": "ea6cfd4a9c6c7d852a90a1f9b220525af3f1a1fa" + }, + { + "file": "libs/remix-ws-templates/src/templates/gnosisSafeMultisig/contracts/MultisigWallet.sol", + "hash": "49761b5e879772a24fc88a49121c432a9f542dae" + }, + { + "file": "libs/remix-ws-templates/src/templates/gnosisSafeMultisig/index.ts", + "hash": "98b3c953ee8db9789d6827d77c01286c1ee44d90" + }, + { + "file": "libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/deploy_with_ethers.ts", + "hash": "b825f91a76bc11d3d9816db94070a23b5a392e80" + }, + { + "file": "libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/deploy_with_web3.ts", + "hash": "744bd81251ac3f78642d0a1564fe6569df03fcac" + }, + { + "file": "libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/ethers-lib.ts", + "hash": "2753f9bcd09de08b4de0a7112535c8733cf0cc77", + "deps": [ + "npm:ethers" + ] + }, + { + "file": "libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/web3-lib.ts", + "hash": "c57e501039a18ff6577256b7b5e601df92887ed9", + "deps": [ + "npm:web3", + "npm:web3-eth-contract" + ] + }, + { + "file": "libs/remix-ws-templates/src/templates/ozerc1155/.prettierrc", + "hash": "b2a56f23717b4b9b8f05d45363a0fd58c657ce6e" + }, + { + "file": "libs/remix-ws-templates/src/templates/ozerc1155/index.ts", + "hash": "2acdbe5539bb0807bc8b9d6e00435a1262eb6b52", + "deps": [ + "npm:@openzeppelin/wizard" + ] + }, + { + "file": "libs/remix-ws-templates/src/templates/ozerc1155/scripts/deploy_with_ethers.ts", + "hash": "63533fd6f59b11353f2c8e1db68d37bd9027bb7c" + }, + { + "file": "libs/remix-ws-templates/src/templates/ozerc1155/scripts/deploy_with_web3.ts", + "hash": "17aaa6972e95bf45db72a9c7ec4e482d86b31757" + }, + { + "file": "libs/remix-ws-templates/src/templates/ozerc1155/scripts/ethers-lib.ts", + "hash": "2753f9bcd09de08b4de0a7112535c8733cf0cc77", + "deps": [ + "npm:ethers" + ] + }, + { + "file": "libs/remix-ws-templates/src/templates/ozerc1155/scripts/web3-lib.ts", + "hash": "921774572a81b0878002614a3bc863c66659d5d7", + "deps": [ + "npm:web3", + "npm:web3-eth-contract" + ] + }, + { + "file": "libs/remix-ws-templates/src/templates/ozerc1155/tests/MyToken_test.sol", + "hash": "73a77e7094f21a9783bdc18c3b507c1027e54699" + }, + { + "file": "libs/remix-ws-templates/src/templates/ozerc20/.prettierrc", + "hash": "b2a56f23717b4b9b8f05d45363a0fd58c657ce6e" + }, + { + "file": "libs/remix-ws-templates/src/templates/ozerc20/index.ts", + "hash": "9dcb4f02f9889fe33934153f25c160b5860f8b5e", + "deps": [ + "npm:@openzeppelin/wizard" + ] + }, + { + "file": "libs/remix-ws-templates/src/templates/ozerc20/scripts/deploy_with_ethers.ts", + "hash": "63533fd6f59b11353f2c8e1db68d37bd9027bb7c" + }, + { + "file": "libs/remix-ws-templates/src/templates/ozerc20/scripts/deploy_with_web3.ts", + "hash": "17aaa6972e95bf45db72a9c7ec4e482d86b31757" + }, + { + "file": "libs/remix-ws-templates/src/templates/ozerc20/scripts/ethers-lib.ts", + "hash": "2753f9bcd09de08b4de0a7112535c8733cf0cc77", + "deps": [ + "npm:ethers" + ] + }, + { + "file": "libs/remix-ws-templates/src/templates/ozerc20/scripts/web3-lib.ts", + "hash": "c57e501039a18ff6577256b7b5e601df92887ed9", + "deps": [ + "npm:web3", + "npm:web3-eth-contract" + ] + }, + { + "file": "libs/remix-ws-templates/src/templates/ozerc20/tests/MyToken_mintable_test.sol", + "hash": "7388cf0b877277b136e0c1b1b61054f27e5ef848" + }, + { + "file": "libs/remix-ws-templates/src/templates/ozerc20/tests/MyToken_test.sol", + "hash": "bdf8f6e69aafd2fd54e8593cd3d916a8cf3deca9" + }, + { + "file": "libs/remix-ws-templates/src/templates/ozerc721/.prettierrc", + "hash": "b2a56f23717b4b9b8f05d45363a0fd58c657ce6e" + }, + { + "file": "libs/remix-ws-templates/src/templates/ozerc721/index.ts", + "hash": "c7bb561e065dd42658687ac3185aefb0a85d0041", + "deps": [ + "npm:@openzeppelin/wizard" + ] + }, + { + "file": "libs/remix-ws-templates/src/templates/ozerc721/scripts/deploy_with_ethers.ts", + "hash": "63533fd6f59b11353f2c8e1db68d37bd9027bb7c" + }, + { + "file": "libs/remix-ws-templates/src/templates/ozerc721/scripts/deploy_with_web3.ts", + "hash": "17aaa6972e95bf45db72a9c7ec4e482d86b31757" + }, + { + "file": "libs/remix-ws-templates/src/templates/ozerc721/scripts/ethers-lib.ts", + "hash": "2753f9bcd09de08b4de0a7112535c8733cf0cc77", + "deps": [ + "npm:ethers" + ] + }, + { + "file": "libs/remix-ws-templates/src/templates/ozerc721/scripts/web3-lib.ts", + "hash": "c57e501039a18ff6577256b7b5e601df92887ed9", + "deps": [ + "npm:web3", + "npm:web3-eth-contract" + ] + }, + { + "file": "libs/remix-ws-templates/src/templates/ozerc721/tests/MyToken_test.sol", + "hash": "0fb1d12117821b2df3d09d3b461adf1860f8fb22" + }, + { + "file": "libs/remix-ws-templates/src/templates/remixDefault/.prettierrc", + "hash": "b2a56f23717b4b9b8f05d45363a0fd58c657ce6e" + }, + { + "file": "libs/remix-ws-templates/src/templates/remixDefault/contracts/1_Storage.sol", + "hash": "dd1e15d25e783b6eb2149c024787678c663616f7" + }, + { + "file": "libs/remix-ws-templates/src/templates/remixDefault/contracts/2_Owner.sol", + "hash": "9949f8cdd6db2acc9bbe98a13e4b89c5e53f9827" + }, + { + "file": "libs/remix-ws-templates/src/templates/remixDefault/contracts/3_Ballot.sol", + "hash": "ffcc6c36096cc7f338d585bf2598922b1acc065a" + }, + { + "file": "libs/remix-ws-templates/src/templates/remixDefault/index.ts", + "hash": "a4a1460cdc517748cba7bced205d26d510f7d0a3" + }, + { + "file": "libs/remix-ws-templates/src/templates/remixDefault/README.txt", + "hash": "e27de83769848424c0b111ee491051dbfd422e9a" + }, + { + "file": "libs/remix-ws-templates/src/templates/remixDefault/scripts/deploy_with_ethers.ts", + "hash": "513d496d7638a86e7b7339272f853a7053429336" + }, + { + "file": "libs/remix-ws-templates/src/templates/remixDefault/scripts/deploy_with_web3.ts", + "hash": "dca0bbcfddbe3f383747e26bc829500ea82e189e" + }, + { + "file": "libs/remix-ws-templates/src/templates/remixDefault/scripts/ethers-lib.ts", + "hash": "2753f9bcd09de08b4de0a7112535c8733cf0cc77", + "deps": [ + "npm:ethers" + ] + }, + { + "file": "libs/remix-ws-templates/src/templates/remixDefault/scripts/web3-lib.ts", + "hash": "c57e501039a18ff6577256b7b5e601df92887ed9", + "deps": [ + "npm:web3", + "npm:web3-eth-contract" + ] + }, + { + "file": "libs/remix-ws-templates/src/templates/remixDefault/tests/Ballot_test.sol", + "hash": "49146e99facba02fce64738239bec0b835cec15b" + }, + { + "file": "libs/remix-ws-templates/src/templates/remixDefault/tests/storage.test.js", + "hash": "8e37b7c39b76b12519a9f931ba858624e573e1f7", + "deps": [ + "npm:chai", + "npm:hardhat" + ] + }, + { + "file": "libs/remix-ws-templates/src/templates/zeroxErc20/.prettierrc", + "hash": "b2a56f23717b4b9b8f05d45363a0fd58c657ce6e" + }, + { + "file": "libs/remix-ws-templates/src/templates/zeroxErc20/contracts/SampleERC20.sol", + "hash": "ecea8b4aa3b50f2fb106dc78a4f4d6bd7cd579e0" + }, + { + "file": "libs/remix-ws-templates/src/templates/zeroxErc20/index.ts", + "hash": "f83c80be62b2d5745cd5fff78475d088c0b52002" + }, + { + "file": "libs/remix-ws-templates/src/templates/zeroxErc20/scripts/deploy_with_ethers.ts", + "hash": "1aadc32123683305c1ba94d88de986db041b11e0" + }, + { + "file": "libs/remix-ws-templates/src/templates/zeroxErc20/scripts/deploy_with_web3.ts", + "hash": "0eecd6d88fa667155fed325d2a060b8bda27b40b" + }, + { + "file": "libs/remix-ws-templates/src/templates/zeroxErc20/scripts/ethers-lib.ts", + "hash": "2753f9bcd09de08b4de0a7112535c8733cf0cc77", + "deps": [ + "npm:ethers" + ] + }, + { + "file": "libs/remix-ws-templates/src/templates/zeroxErc20/scripts/web3-lib.ts", + "hash": "c57e501039a18ff6577256b7b5e601df92887ed9", + "deps": [ + "npm:web3", + "npm:web3-eth-contract" + ] + }, + { + "file": "libs/remix-ws-templates/src/templates/zeroxErc20/tests/SampleERC20_test.sol", + "hash": "b167e1a4782e3bdf7aa7710c4558b77b0f761575" + }, + { + "file": "libs/remix-ws-templates/tsconfig.json", + "hash": "eb1415fa71c5cce2049880364d9ef4f88b929559" + }, + { + "file": "libs/remix-ws-templates/tsconfig.lib.json", + "hash": "165195b7898c6de369e5b856458f8f603218b770" + }, + { + "file": "libs/remix-ws-templates/types/index.d.ts", + "hash": "a7238130dfe3401070400f85c71f96aeeb78cccb" + } + ] + } + }, + "solidity-compiler": { + "name": "solidity-compiler", + "type": "app", + "data": { + "name": "solidity-compiler", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "apps/solidity-compiler/src", + "projectType": "application", + "implicitDependencies": [], + "targets": { + "build": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/webpack:webpack", + "outputs": [ + "{options.outputPath}" + ], + "defaultConfiguration": "development", + "options": { + "compiler": "babel", + "outputPath": "dist/apps/solidity-compiler", + "index": "apps/solidity-compiler/src/index.html", + "baseHref": "/", + "main": "apps/solidity-compiler/src/main.tsx", + "polyfills": "apps/solidity-compiler/src/polyfills.ts", + "tsConfig": "apps/solidity-compiler/tsconfig.app.json", + "assets": [ + "apps/solidity-compiler/src/favicon.ico", + "apps/solidity-compiler/src/assets" + ], + "styles": [ + "apps/solidity-compiler/src/styles.css" + ], + "scripts": [], + "webpackConfig": "apps/solidity-compiler/webpack.config.js" + }, + "configurations": { + "development": {}, + "production": { + "fileReplacements": [ + { + "replace": "apps/solidity-compiler/src/environments/environment.ts", + "with": "apps/solidity-compiler/src/environments/environment.prod.ts" + } + ] + } + } + }, + "serve": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/webpack:dev-server", + "defaultConfiguration": "development", + "options": { + "buildTarget": "solidity-compiler:build" + }, + "configurations": { + "development": { + "buildTarget": "solidity-compiler:build:development" + }, + "production": { + "buildTarget": "solidity-compiler:build:production" + } + } + } + }, + "tags": [], + "root": "apps/solidity-compiler", + "files": [ + { + "file": "apps/solidity-compiler/.babelrc", + "hash": "9123728aa14807603fbde932031b9ae2d5a58a24" + }, + { + "file": "apps/solidity-compiler/.browserslistrc", + "hash": "f1d12df4faa25ab7f0f03196105e957395f609af" + }, + { + "file": "apps/solidity-compiler/project.json", + "hash": "395ec9e94e1a05471f179fea9da81c198f435934" + }, + { + "file": "apps/solidity-compiler/src/app/app.tsx", + "hash": "e9c636ac3d8a1088e23d32e89c5d27a27f97312f", + "deps": [ + "npm:react" + ] + }, + { + "file": "apps/solidity-compiler/src/app/compiler.ts", + "hash": "01543be9952b5e8bba512b14e303712a6599c05e", + "deps": [ + "npm:@remixproject/plugin", + "npm:@remixproject/plugin-webview" + ] + }, + { + "file": "apps/solidity-compiler/src/assets/.gitkeep", + "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" + }, + { + "file": "apps/solidity-compiler/src/assets/img/ipfs.webp", + "hash": "9cdfa7380c503f4ccfed36563f44cef6c5f1b082" + }, + { + "file": "apps/solidity-compiler/src/assets/js/.gitignore", + "hash": "5e7d2734cfc60289debf74293817c0a8f572ff32" + }, + { + "file": "apps/solidity-compiler/src/environments/environment.prod.ts", + "hash": "bc0327dbebdd3df82f242e6e07925985f87f309e" + }, + { + "file": "apps/solidity-compiler/src/environments/environment.ts", + "hash": "9ae66f8b70d3c2a726b6fea04dbb69e8734218be" + }, + { + "file": "apps/solidity-compiler/src/favicon.ico", + "hash": "317ebcb2336e0833a22dddf0ab287849f26fda57" + }, + { + "file": "apps/solidity-compiler/src/index.html", + "hash": "45be468da6a39a5f510708523b44c748713d781f" + }, + { + "file": "apps/solidity-compiler/src/main.tsx", + "hash": "96d7e3743b506e6ca4af665e648962a573f6c345", + "deps": [ + "npm:react", + "npm:react-dom" + ] + }, + { + "file": "apps/solidity-compiler/src/polyfills.ts", + "hash": "53c485753e6e49fd2dac115c6e08dbfe99574861", + "deps": [ + "npm:core-js", + "npm:regenerator-runtime" + ] + }, + { + "file": "apps/solidity-compiler/src/styles.css", + "hash": "90d4ee0072ce3fc41812f8af910219f9eea3c3de" + }, + { + "file": "apps/solidity-compiler/tsconfig.app.json", + "hash": "252904bb73871a10597dc233e4a528e13c6af9c4" + }, + { + "file": "apps/solidity-compiler/tsconfig.json", + "hash": "5aab5e79111d8f97470be7e69da9fdb3ddb5819f" + }, + { + "file": "apps/solidity-compiler/webpack.config.js", + "hash": "23aef38cffdd41246eb36dd1892f2b46b49b173f", + "deps": [ + "npm:@nrwl/webpack", + "npm:@nrwl/react", + "npm:webpack", + "npm:terser-webpack-plugin", + "npm:css-minimizer-webpack-plugin" + ] + } + ] + } + }, + "remix-core-plugin": { + "name": "remix-core-plugin", + "type": "lib", + "data": { + "name": "remix-core-plugin", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/remix-core-plugin/src", + "projectType": "library", + "targets": { + "build": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/js:tsc", + "outputs": [ + "{options.outputPath}" + ], + "options": { + "outputPath": "dist/libs/remix-core-plugin", + "main": "libs/remix-core-plugin/src/index.ts", + "tsConfig": "libs/remix-core-plugin/tsconfig.lib.json", + "assets": [], + "updateBuildableProjectDepsInPackageJson": false + }, + "configurations": {} + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "libs/remix-core-plugin/**/*.ts" + ] + } + } + }, + "tags": [], + "root": "libs/remix-core-plugin", + "implicitDependencies": [], + "files": [ + { + "file": "libs/remix-core-plugin/.eslintrc", + "hash": "43d73eb5414c95bc7acf8ada59bb0beed750d762" + }, + { + "file": "libs/remix-core-plugin/package.json", + "hash": "3ea38618cc8466c13a332e94ea1bf054840a50d6" + }, + { + "file": "libs/remix-core-plugin/project.json", + "hash": "f7d0ab2428af4036e8e5373f41424a1193f749f5" + }, + { + "file": "libs/remix-core-plugin/README.md", + "hash": "fc60297f57115429f26906e76585b54ebdb0260b" + }, + { + "file": "libs/remix-core-plugin/src/index.ts", + "hash": "db3788cd5f4709d077bdfe63aab4352508e38e6f" + }, + { + "file": "libs/remix-core-plugin/src/lib/compiler-artefacts.ts", + "hash": "c37e3a7dab53754c607ed2e4bdcfe499406012d6", + "deps": [ + "npm:@remixproject/engine" + ] + }, + { + "file": "libs/remix-core-plugin/src/lib/compiler-content-imports.ts", + "hash": "50b9b08bb26e5d85e3753621d441965df4a40e4b", + "deps": [ + "npm:@remixproject/engine" + ] + }, + { + "file": "libs/remix-core-plugin/src/lib/compiler-fetch-and-compile.ts", + "hash": "d004888a58dd18463a3747bc40fdf5f9a52b4ccf", + "deps": [ + "npm:@remixproject/engine", + "npm:@ethereumjs/util" + ] + }, + { + "file": "libs/remix-core-plugin/src/lib/compiler-metadata.ts", + "hash": "b45daeb5f0920a837eec564bab3a476e46c1fb5f", + "deps": [ + "npm:@remixproject/engine" + ] + }, + { + "file": "libs/remix-core-plugin/src/lib/constants/uups.ts", + "hash": "3a07dfdc8dd7d26c187bc0e8fd55296ed3df7594" + }, + { + "file": "libs/remix-core-plugin/src/lib/gist-handler.ts", + "hash": "5a1e04d98e13bd51c51b15168927de8305fd769f", + "deps": [ + "npm:@remixproject/engine", + "npm:is-electron" + ] + }, + { + "file": "libs/remix-core-plugin/src/lib/helpers/fetch-etherscan.ts", + "hash": "5cc8460d72a3a49875684d2c3e2efc14cfc806fe" + }, + { + "file": "libs/remix-core-plugin/src/lib/helpers/fetch-sourcify.ts", + "hash": "5765e7e9d6040976990702adfc22ac694f14ab31" + }, + { + "file": "libs/remix-core-plugin/src/lib/link-libraries.ts", + "hash": "84d50d5a1439b669a195c72886c279c1ffe99f68", + "deps": [ + "npm:@remixproject/engine" + ] + }, + { + "file": "libs/remix-core-plugin/src/lib/offset-line-to-column-converter.ts", + "hash": "0c416b2953783c20d57913174ff37d430e6a9193", + "deps": [ + "npm:@remixproject/engine" + ] + }, + { + "file": "libs/remix-core-plugin/src/lib/openzeppelin-proxy.ts", + "hash": "661ead7a6f129aaccb4990cfb2bf28c3a21729e7", + "deps": [ + "npm:@remixproject/engine", + "npm:semver" + ] + }, + { + "file": "libs/remix-core-plugin/src/types/contract.ts", + "hash": "df518ed034f98bbf2bf2ea7fc294b092cf5d342b", + "deps": [ + "npm:@openzeppelin/upgrades-core" + ] + }, + { + "file": "libs/remix-core-plugin/tsconfig.json", + "hash": "c23e61c80035a2b0526de861e767ed5ad82db04e" + }, + { + "file": "libs/remix-core-plugin/tsconfig.lib.json", + "hash": "87520f83f8d3124fde5654d56c1828ecf59d8a09" + } + ] + } + }, + "circuit-compiler": { + "name": "circuit-compiler", + "type": "app", + "data": { + "name": "circuit-compiler", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "apps/circuit-compiler/src", + "projectType": "application", + "implicitDependencies": [ + "remixd" + ], + "targets": { + "build": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/webpack:webpack", + "outputs": [ + "{options.outputPath}" + ], + "defaultConfiguration": "development", + "options": { + "compiler": "babel", + "outputPath": "dist/apps/circuit-compiler", + "index": "apps/circuit-compiler/src/index.html", + "baseHref": "./", + "main": "apps/circuit-compiler/src/main.tsx", + "polyfills": "apps/circuit-compiler/src/polyfills.ts", + "tsConfig": "apps/circuit-compiler/tsconfig.app.json", + "assets": [ + "apps/circuit-compiler/src/profile.json" + ], + "styles": [ + "apps/circuit-compiler/src/css/app.css" + ], + "scripts": [], + "webpackConfig": "apps/circuit-compiler/webpack.config.js" + }, + "configurations": { + "development": {}, + "production": { + "fileReplacements": [ + { + "replace": "apps/circuit-compiler/src/environments/environment.ts", + "with": "apps/circuit-compiler/src/environments/environment.prod.ts" + } + ] + } + } + }, + "serve": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/webpack:dev-server", + "defaultConfiguration": "development", + "options": { + "buildTarget": "circuit-compiler:build", + "hmr": true, + "baseHref": "/" + }, + "configurations": { + "development": { + "buildTarget": "circuit-compiler:build:development", + "port": 2023 + }, + "production": { + "buildTarget": "circuit-compiler:build:production" + } + } + } + }, + "tags": [], + "root": "apps/circuit-compiler", + "files": [ + { + "file": "apps/circuit-compiler/project.json", + "hash": "eb501cc21d781ba7eb365510ac81ea5d0a8365ec" + }, + { + "file": "apps/circuit-compiler/src/app/app.tsx", + "hash": "e922fb0bf9afb68b23d58f08e22d9450300092bc", + "deps": [ + "npm:react" + ] + }, + { + "file": "apps/circuit-compiler/src/app/services/circomPluginClient.ts", + "hash": "f94b1317f49fa73e41b6e423934c5dfdbc790e39", + "deps": [ + "npm:@remixproject/plugin", + "npm:@remixproject/plugin-webview", + "npm:events", + "npm:circom_wasm" + ] + }, + { + "file": "apps/circuit-compiler/src/css/app.css", + "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" + }, + { + "file": "apps/circuit-compiler/src/example/simple.circom", + "hash": "9a2120df7ad652d829481957a9c60989fa5e83c0" + }, + { + "file": "apps/circuit-compiler/src/index.html", + "hash": "adb93d90f1cd581b18f1d45dafd56b2b76894323" + }, + { + "file": "apps/circuit-compiler/src/main.tsx", + "hash": "b63438d84608f33eb5088295999f60daabcad4a5", + "deps": [ + "npm:react", + "npm:react-dom" + ] + }, + { + "file": "apps/circuit-compiler/src/polyfills.ts", + "hash": "2adf3d05b6fcf479dd61c74f6bda95d9edb6ac6b", + "deps": [ + "npm:core-js", + "npm:regenerator-runtime" + ] + }, + { + "file": "apps/circuit-compiler/src/profile.json", + "hash": "e8395e2574a14f492398c870392e4834576351e4" + }, + { + "file": "apps/circuit-compiler/tsconfig.app.json", + "hash": "2272b8a388c56c760e15a8d8e64a4a40e13a4315" + }, + { + "file": "apps/circuit-compiler/tsconfig.json", + "hash": "3b6130a0a823f45efa53e66d3d98f20f751420e3" + }, + { + "file": "apps/circuit-compiler/webpack.config.js", + "hash": "fecff4fa704f694f1ecae0dcac4d650d046194bb", + "deps": [ + "npm:@nrwl/webpack", + "npm:webpack", + "npm:terser-webpack-plugin", + "npm:css-minimizer-webpack-plugin" + ] + } + ] + } + }, + "ghaction-helper": { + "name": "ghaction-helper", + "type": "lib", + "data": { + "name": "ghaction-helper", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/ghaction-helper/src", + "projectType": "library", + "implicitDependencies": [ + "remix-solidity" + ], + "targets": { + "test": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "nx:run-script", + "options": { + "script": "test" + }, + "configurations": {} + }, + "build": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/js:tsc", + "outputs": [ + "{options.outputPath}" + ], + "options": { + "outputPath": "dist/libs/ghaction-helper", + "main": "libs/ghaction-helper/src/index.ts", + "tsConfig": "libs/ghaction-helper/tsconfig.lib.json", + "assets": [], + "updateBuildableProjectDepsInPackageJson": false + }, + "configurations": {} + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "libs/ghaction-helper/**/*.ts" + ] + } + } + }, + "tags": [], + "root": "libs/ghaction-helper", + "files": [ + { + "file": "libs/ghaction-helper/.eslintrc", + "hash": "f57f93144edfd987a71b8c065a0c6ddbbdb24026" + }, + { + "file": "libs/ghaction-helper/.npmignore", + "hash": "aa8e45f12bce4c9ccf69652a97bd54ffc43c7123" + }, + { + "file": "libs/ghaction-helper/package.json", + "hash": "bf4fe18c4c57a1969e1eb3d14b1ee0b9c6931ed7", + "deps": [ + "remix-simulator", + "npm:chai", + "npm:ethers", + "npm:web3", + "remix-solidity", + "npm:@types/chai", + "npm:typescript" + ] + }, + { + "file": "libs/ghaction-helper/project.json", + "hash": "9d93dfcab8ba0d0ad02a008996477b00f619920e" + }, + { + "file": "libs/ghaction-helper/README.md", + "hash": "5055697b95799d8a4836c451bd91846af9101f43" + }, + { + "file": "libs/ghaction-helper/src/artifacts-helper.ts", + "hash": "3cc02ff9b57b2942f0e791c259d2e44ff5ebe804" + }, + { + "file": "libs/ghaction-helper/src/chai.ts", + "hash": "4815a2a31ddc622e2df6f01c97d9e2c48d6855aa", + "deps": [ + "npm:chai" + ] + }, + { + "file": "libs/ghaction-helper/src/ethers.ts", + "hash": "d3941e6dd485531bde16861121503d702571b4c9", + "deps": [ + "npm:ethers" + ] + }, + { + "file": "libs/ghaction-helper/src/index.ts", + "hash": "2ead5cf6053d3e35e62c9c80eeed11b4af5389d0" + }, + { + "file": "libs/ghaction-helper/src/methods.ts", + "hash": "b6558f4eb0c1de836d5681f5f44a58738279fe60", + "deps": [ + "npm:ethers", + "npm:web3" + ] + }, + { + "file": "libs/ghaction-helper/src/signer.ts", + "hash": "ff5626b566db4993fccd0b6acd00e697112c64ea", + "deps": [ + "npm:ethers" + ] + }, + { + "file": "libs/ghaction-helper/tsconfig.json", + "hash": "5ed408bd51c833cbd93c4bfc6d65d0d1d8102678" + }, + { + "file": "libs/ghaction-helper/tsconfig.lib.json", + "hash": "736089467e72cbd60950923fa878c2cadaa4d689" + } + ] + } + }, + "remix-astwalker": { + "name": "remix-astwalker", + "type": "lib", + "data": { + "name": "remix-astwalker", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/remix-astwalker/src", + "projectType": "library", + "implicitDependencies": [ + "remix-lib" + ], + "targets": { + "test": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "nx:run-script", + "options": { + "script": "test" + }, + "configurations": {} + }, + "build": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/js:tsc", + "outputs": [ + "{options.outputPath}" + ], + "options": { + "outputPath": "dist/libs/remix-astwalker", + "main": "libs/remix-astwalker/src/index.ts", + "tsConfig": "libs/remix-astwalker/tsconfig.lib.json", + "assets": [ + "libs/remix-astwalker/*.md" + ], + "updateBuildableProjectDepsInPackageJson": false + }, + "configurations": {} + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "libs/remix-astwalker/**/*.ts" + ] + } + } + }, + "tags": [], + "root": "libs/remix-astwalker", + "files": [ + { + "file": "libs/remix-astwalker/.eslintrc", + "hash": "43d73eb5414c95bc7acf8ada59bb0beed750d762" + }, + { + "file": "libs/remix-astwalker/.gitignore", + "hash": "343b37acb19f34988c20589278167f019943dcea" + }, + { + "file": "libs/remix-astwalker/.npmignore", + "hash": "6222042be4c1f1fb28c0aff65eee42d7dd383499" + }, + { + "file": "libs/remix-astwalker/package.json", + "hash": "636700b360818f8250561a0c6e08496b03b16950", + "deps": [ + "npm:@ethereumjs/block", + "npm:@ethereumjs/tx", + "npm:@ethereumjs/util", + "npm:@ethereumjs/vm", + "remix-lib", + "npm:@types/tape", + "npm:async", + "npm:ethers", + "npm:ethjs-util", + "npm:nyc", + "npm:string-similarity", + "npm:tape", + "npm:ts-node", + "npm:typescript", + "npm:web3", + "npm:tap-spec" + ] + }, + { + "file": "libs/remix-astwalker/project.json", + "hash": "ba70ffc27d019e0ced890144128a61c98c43a23e" + }, + { + "file": "libs/remix-astwalker/README.md", + "hash": "067c8d63c13e076f87c91f3a825bd2156bcf1d99" + }, + { + "file": "libs/remix-astwalker/src/@types/remix-lib/index.d.ts", + "hash": "a91da9393461c74e2d35e2b8836988871f6a62e0" + }, + { + "file": "libs/remix-astwalker/src/astWalker.ts", + "hash": "853ff647b52ce4cd07b3d3c536286f746119ad15", + "deps": [ + "npm:events" + ] + }, + { + "file": "libs/remix-astwalker/src/index.ts", + "hash": "02f371ee1801bd61957440dac3ee1b9dc597dc50" + }, + { + "file": "libs/remix-astwalker/src/sourceMappings.ts", + "hash": "69b279d608f2d33ed0874562c5983a18d2d00672" + }, + { + "file": "libs/remix-astwalker/src/types.ts", + "hash": "469d32c914486df891f57e23f824a4fd567169d2" + }, + { + "file": "libs/remix-astwalker/tests/newTests.ts", + "hash": "3db5320202a89084183de0263f5582bb114fe0e4", + "deps": [ + "npm:tape" + ] + }, + { + "file": "libs/remix-astwalker/tests/resources/ast.ts", + "hash": "d20b63e7bf12e195227ec2c77cae75930ee69c10" + }, + { + "file": "libs/remix-astwalker/tests/resources/legacyAST.ts", + "hash": "6b842f95f057bd395c8aa7990cc1a15ce9456ab9" + }, + { + "file": "libs/remix-astwalker/tests/resources/newAST.ts", + "hash": "cda95ae7563649eea3b27f3a41fdd98d5e236363" + }, + { + "file": "libs/remix-astwalker/tests/resources/test.sol", + "hash": "2df646a8342611177c4df20f0dbd05d9aa882ca9" + }, + { + "file": "libs/remix-astwalker/tests/sourceMappings.ts", + "hash": "1a2bcbdd31f2a9fe501062d60ca6e25ab55d1c97", + "deps": [ + "npm:tape" + ] + }, + { + "file": "libs/remix-astwalker/tsconfig.json", + "hash": "7f163468b26766fff6f1dea5e9bc129e4ee98368" + }, + { + "file": "libs/remix-astwalker/tsconfig.lib.json", + "hash": "4c89a574be11686459a6457a1255a250cf5c56bd" + } + ] + } + }, + "remix-simulator": { + "name": "remix-simulator", + "type": "lib", + "data": { + "name": "remix-simulator", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/remix-simulator/src", + "projectType": "library", + "implicitDependencies": [ + "remix-lib" + ], + "targets": { + "test": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "nx:run-script", + "options": { + "script": "test" + }, + "configurations": {} + }, + "build": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/js:tsc", + "outputs": [ + "{options.outputPath}" + ], + "options": { + "outputPath": "dist/libs/remix-simulator", + "main": "libs/remix-simulator/src/index.ts", + "tsConfig": "libs/remix-simulator/tsconfig.lib.json", + "updateBuildableProjectDepsInPackageJson": false, + "assets": [ + { + "glob": "ethsim", + "input": "libs/remix-simulator/bin/", + "output": "bin/" + }, + { + "glob": "*.md", + "input": "libs/remix-simulator/", + "output": "/" + } + ] + }, + "configurations": {} + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "libs/remix-simulator/**/*.ts" + ] + } + } + }, + "tags": [], + "root": "libs/remix-simulator", + "files": [ + { + "file": "libs/remix-simulator/.eslintrc", + "hash": "8e04356c0081c590e1636803ff4134dad9665cda" + }, + { + "file": "libs/remix-simulator/.npmignore", + "hash": "b59f7e3a95a4d3f2b168d9c8e330be591fc49a6b" + }, + { + "file": "libs/remix-simulator/bin/ethsim", + "hash": "814e2a6a462c528b383aac2545e2531f791f0f57" + }, + { + "file": "libs/remix-simulator/package.json", + "hash": "594f82c8f24f4fb02dc768f31bfbdfa8a1ca7ad2", + "deps": [ + "npm:@ethereumjs/block", + "npm:@ethereumjs/common", + "npm:@ethereumjs/tx", + "npm:@ethereumjs/util", + "npm:@ethereumjs/vm", + "remix-lib", + "npm:ansi-gray", + "npm:async", + "npm:body-parser", + "npm:color-support", + "npm:commander", + "npm:cors", + "npm:ethers", + "npm:ethjs-util", + "npm:express", + "npm:express-ws", + "npm:merge", + "npm:string-similarity", + "npm:time-stamp", + "npm:web3", + "npm:@babel/core", + "npm:@babel/plugin-transform-object-assign", + "npm:@babel/preset-env", + "npm:@babel/preset-stage-0", + "npm:babel-eslint", + "npm:babelify", + "npm:mocha" + ] + }, + { + "file": "libs/remix-simulator/project.json", + "hash": "b4aa8b30070429069b7d7601ff3dbad3343295ce" + }, + { + "file": "libs/remix-simulator/README.md", + "hash": "8410dd63f0a8c90762328cd3b5920a1df6353222" + }, + { + "file": "libs/remix-simulator/src/index.ts", + "hash": "e49f4baf863ddd781e7b2b2e790d3b3fb96e2725" + }, + { + "file": "libs/remix-simulator/src/methods/accounts.ts", + "hash": "ffbfc89a3a26437a7de6e2618654761d5e2e71b3", + "deps": [ + "npm:@ethereumjs/util", + "npm:bn.js", + "npm:web3-eth-accounts" + ] + }, + { + "file": "libs/remix-simulator/src/methods/blocks.ts", + "hash": "60b47bab25b6ec3b6843564ba15422693e4f5896", + "deps": [ + "npm:web3-utils", + "npm:@ethereumjs/util" + ] + }, + { + "file": "libs/remix-simulator/src/methods/debug.ts", + "hash": "b9bf886e503b477ebe579a085d3dd98c90324e90" + }, + { + "file": "libs/remix-simulator/src/methods/filters.ts", + "hash": "43404a1c31b87069950eb573849bb042258feb66" + }, + { + "file": "libs/remix-simulator/src/methods/misc.ts", + "hash": "e6f8a3716a9db34e03e96285773dfa8521f90366", + "deps": [ + "npm:web3-utils" + ] + }, + { + "file": "libs/remix-simulator/src/methods/net.ts", + "hash": "1a064719f43863473993a950acf13660a837158a" + }, + { + "file": "libs/remix-simulator/src/methods/transactions.ts", + "hash": "dc6d940e6504187295bef4d342695d64dacea0c0", + "deps": [ + "npm:web3-utils", + "npm:bn.js", + "npm:@ethereumjs/util", + "npm:ethers", + "npm:@ethereumjs/vm", + "npm:@ethereumjs/evm" + ] + }, + { + "file": "libs/remix-simulator/src/methods/txProcess.ts", + "hash": "f269ca1baf8900de578bd32604962b835c646927" + }, + { + "file": "libs/remix-simulator/src/provider.ts", + "hash": "997accddf9e8d1da6a6f99d563bd089f4392a7e9", + "deps": [ + "npm:merge" + ] + }, + { + "file": "libs/remix-simulator/src/server.ts", + "hash": "73a2cd055274a28a93d239721ea455a072115058", + "deps": [ + "npm:express", + "npm:cors", + "npm:body-parser", + "npm:express-ws" + ] + }, + { + "file": "libs/remix-simulator/src/utils/logs.ts", + "hash": "0ea1271b3b53dd7b938e4a6c9105db721c851d06", + "deps": [ + "npm:ansi-gray", + "npm:time-stamp", + "npm:color-support" + ] + }, + { + "file": "libs/remix-simulator/src/vm-context.ts", + "hash": "62122a61c91539cfac79e478694078fa60490340", + "deps": [ + "npm:@ethereumjs/statemanager", + "npm:@ethereumjs/util", + "npm:ethereum-cryptography", + "npm:rlp", + "npm:ethers", + "npm:@ethereumjs/vm", + "npm:@ethereumjs/common", + "npm:@ethereumjs/trie", + "npm:@ethereumjs/evm", + "npm:@ethereumjs/blockchain", + "npm:@ethereumjs/block", + "npm:@ethereumjs/tx" + ] + }, + { + "file": "libs/remix-simulator/src/VmProxy.ts", + "hash": "90d7ebfbf7221d0bf30f6c41aecfdcb51838a2d8", + "deps": [ + "npm:bn.js", + "npm:web3-utils", + "npm:@ethereumjs/util", + "npm:ethers", + "npm:@ethereumjs/statemanager", + "npm:@ethereumjs/evm", + "npm:@ethereumjs/vm", + "npm:@ethereumjs/tx" + ] + }, + { + "file": "libs/remix-simulator/test/accounts.ts", + "hash": "336d438380cdd912718da5bf0969aac5524270b9", + "deps": [ + "npm:web3", + "npm:assert" + ] + }, + { + "file": "libs/remix-simulator/test/blocks.ts", + "hash": "72b454b8dd520062a5d16858d3df6e1320c65d58", + "deps": [ + "npm:web3", + "npm:assert" + ] + }, + { + "file": "libs/remix-simulator/test/events.ts", + "hash": "98133679a426db1f96ae8ca88a8c3e9d380df589", + "deps": [ + "npm:web3", + "npm:assert" + ] + }, + { + "file": "libs/remix-simulator/test/misc.ts", + "hash": "a339910996f85a5f3ff168b0fba14492e4f7f88c", + "deps": [ + "npm:web3", + "npm:assert" + ] + }, + { + "file": "libs/remix-simulator/test/transactions.ts", + "hash": "30f9a96fd2d7fca3a4f3f9c2bf91040147358adb", + "deps": [ + "npm:web3", + "npm:assert" + ] + }, + { + "file": "libs/remix-simulator/tsconfig.json", + "hash": "3d3a2b990fe6913295064aa25680fcc977d70cb8" + }, + { + "file": "libs/remix-simulator/tsconfig.lib.json", + "hash": "dee88a751393852abe6930151e40cf5b20d1e3df" + } + ] + } + }, + "remix-analyzer": { + "name": "remix-analyzer", + "type": "lib", + "data": { + "name": "remix-analyzer", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/remix-analyzer/src", + "projectType": "library", + "implicitDependencies": [ + "remix-astwalker", + "remix-lib" + ], + "targets": { + "test": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "nx:run-script", + "options": { + "script": "test" + }, + "configurations": {} + }, + "build": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/js:tsc", + "outputs": [ + "{options.outputPath}" + ], + "options": { + "outputPath": "dist/libs/remix-analyzer", + "main": "libs/remix-analyzer/src/index.ts", + "tsConfig": "libs/remix-analyzer/tsconfig.lib.json", + "assets": [ + "libs/remix-analyzer/*.md" + ], + "updateBuildableProjectDepsInPackageJson": false + }, + "configurations": {} + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "libs/remix-analyzer/**/*.ts" + ] + } + } + }, + "tags": [], + "root": "libs/remix-analyzer", + "files": [ + { + "file": "libs/remix-analyzer/.eslintrc", + "hash": "43d73eb5414c95bc7acf8ada59bb0beed750d762" + }, + { + "file": "libs/remix-analyzer/.npmignore", + "hash": "b59f7e3a95a4d3f2b168d9c8e330be591fc49a6b" + }, + { + "file": "libs/remix-analyzer/package.json", + "hash": "781a3a3bdca08efa7fff04e369e4ad1c3c736abd", + "deps": [ + "npm:@ethereumjs/block", + "npm:@ethereumjs/tx", + "npm:@ethereumjs/util", + "npm:@ethereumjs/vm", + "remix-astwalker", + "remix-lib", + "npm:async", + "npm:ethers", + "npm:ethjs-util", + "npm:string-similarity", + "npm:web3", + "npm:@types/node", + "npm:babel-eslint", + "npm:npm-install-version", + "npm:tape", + "npm:ts-node", + "npm:typescript" + ] + }, + { + "file": "libs/remix-analyzer/project.json", + "hash": "6700532bb14cb0541d36bca1a7c5a6b769939f01" + }, + { + "file": "libs/remix-analyzer/README.md", + "hash": "2cbb7d39d4fd6b26de209cba5a1157f9fad08f97" + }, + { + "file": "libs/remix-analyzer/src/index.ts", + "hash": "406fbd56863f7f87ea42b0c64fd1ce9593ebab16" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/index.ts", + "hash": "d2c45ff6353120d8cd8541ac07ea71a92c98bb0b" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/abstractAstView.ts", + "hash": "0febc41dc17758fb810b4b962440a01d72961f83" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/algorithmCategories.ts", + "hash": "59a998aaa61e00a39c6142660386266ad816fe4a" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/assignAndCompare.ts", + "hash": "1abca173078f9f029094a2bed0328ad8ff19ddcf" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/blockBlockhash.ts", + "hash": "714e7f62dd702708a162dfb67c31fecec3dca654" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/blockTimestamp.ts", + "hash": "be78b7e90b03b581dd1ead9010d1c54734a346b3" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/categories.ts", + "hash": "855d691b8c624f80d35b7cdd0d14f156833d62ae" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/checksEffectsInteraction.ts", + "hash": "e0cf9adac648a864f7cd4f5f573ccc5cf6e3d5a7" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/constantFunctions.ts", + "hash": "abbdb91807157703aa48deca920e55b0138cf15e" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/deleteDynamicArrays.ts", + "hash": "dd814b382e7d9843ecbb9ca2836116b6ece10cf2" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/deleteFromDynamicArray.ts", + "hash": "714da95c65e47efa679c3bbe9a066d2eb098cfa2" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/erc20Decimals.ts", + "hash": "c9264920c78f7a7e745e0e67f4dae15609d491aa" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/etherTransferInLoop.ts", + "hash": "a8f8ae1d55d44b5ebc926be9b6355dc1642d75d4" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/forLoopIteratesOverDynamicArray.ts", + "hash": "ff85469cf28f115e57cbc980c7dc66be34aa6961" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/functionCallGraph.ts", + "hash": "a83666d68be3344b5c98336a56720a1ebb0280c4" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/gasCosts.ts", + "hash": "882860d7362dfd085a05b30fd6bcf7a7ae8bcf44" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/guardConditions.ts", + "hash": "b2c67fbef44d412ed34dc0ace1cb005580711a52" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/index.ts", + "hash": "d76b94539a9b62bdb3622cb88595377fba45f649" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/inlineAssembly.ts", + "hash": "851fc2f10d8f9bc22ab30ede37bc420f8d720ee5" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/intDivisionTruncate.ts", + "hash": "b54053202bac2e5a374aed19166f825a8175c007" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/list.ts", + "hash": "a6687343be0772c0de275afff9d50324748f5f22" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/lowLevelCalls.ts", + "hash": "04193a6afb82b584ec33a5daafd417c856fec8e5" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/noReturn.ts", + "hash": "70588169d3d26c3e4218b5b5a4ff63c26733e751" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/selfdestruct.ts", + "hash": "e1ad68eceeee6364897d309634ff1f7c576bf72b" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/similarVariableNames.ts", + "hash": "35591dc8b1b3e0ca8afc724860b3312157e2127b", + "deps": [ + "npm:fast-levenshtein" + ] + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/staticAnalysisCommon.ts", + "hash": "9818c4a925dcbcbea40201f4e8e8af76f2cd337b" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/stringBytesLength.ts", + "hash": "57c02b84dd0f210ecc6378251e429e7082769ec5" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/thisLocal.ts", + "hash": "9c13b4c2ac1ccda655ce4f21a9bf692afafbc57b" + }, + { + "file": "libs/remix-analyzer/src/solidity-analyzer/modules/txOrigin.ts", + "hash": "1a7a0cd0d7568dc27ae86d68f84dc129187ab9c7" + }, + { + "file": "libs/remix-analyzer/src/types.ts", + "hash": "c15352eb2e4f58e0b6e2e37138c1ccfe5c282a52" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/abiNamespaceCallNodes.json", + "hash": "18670fb3b13b94434b40848c0d053d2fbc46c7e2" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/assignment.json", + "hash": "b5f7fd30109a0cf5ce6a56f44f66f34977fce97a" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/blockHashAccess.json", + "hash": "039bd335316fa913d05509ab3bd8590a08c74819" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/blockTimestamp.json", + "hash": "61bc2be74a739d7577117805b1107007b4ebfec8" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/contractDefinition.json", + "hash": "31229fcabb2fd1ac0479121982b974609b0b2c5a" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/doWhileLoopNode.json", + "hash": "cc5f6708bbe420274937ece4bf895dd19c495ded" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/dynamicDeleteUnaryOp.json", + "hash": "98d34f7a4e58393b68aa8e56412df52b4c2f6707" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/externalDirect.json", + "hash": "ebf7625571c2807d9a83cb9161e353e9ac8b9cd3" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/forLoopNode.json", + "hash": "515813068f16306dc7faa30b286becab2f3a2fb6" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/fullyQualifiedFunctionDefinition.json", + "hash": "81c77667a7fd0aaec1d0f576b8f078c1326b0db9" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/funcDefForComplexParams.json", + "hash": "14551bce74e399eb17579910313df69b451772f1" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/functionDefinition.json", + "hash": "3848db0dd91cc328378695e2d45fe867b37d21e6" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/index.js", + "hash": "0c9e1aa198fe2aa2875d74d583cbe0508d0956f0" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/inheritance.json", + "hash": "d84ecf0cc3bb1d86e647cfec8a6d1163090677af" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/inlineAssembly.json", + "hash": "03e5acbb2340fb4b96bf0ec949c5562a278e41ef" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/libCall.json", + "hash": "12df4999aa82833ba85a6563edcf60df3dafc8a0" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/localCall.json", + "hash": "d954eba389019ba6582ff913dae8e11c4118f809" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/lowlevelCall.json", + "hash": "7e41bc4d4f2da19539564a97d69b67cd13e7df8f" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/nowAst.json", + "hash": "1fdc9a5397ea58a79b51a2158a0a55a8295d9733" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/parameterFunction.json", + "hash": "b112f20898f352677cf74b9f75b574349f68160a" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/parameterFunctionCall.json", + "hash": "793b946a74afc7342ac235f07ef833c8bc280a62" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/requireCall.json", + "hash": "4168a655204b386d542b65de29ed8fbc9837718a" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/selfdestruct.json", + "hash": "04ef87be3654c9d0970125f181484bb186665c16" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/stateVariableContractNode.json", + "hash": "e24f5308ebc9c675c67374ec881570b98f876a0d" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/storageVariableNodes.json", + "hash": "96a4c6ff351406c9c9b717b219a3249a76a14e0b" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/superLocal.json", + "hash": "d87be6477bc0dcf1c842fa8025cd33f3f504b1b2" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/thisLocalCall.json", + "hash": "214edff07fa542083cb2c8cdebee97e9ab9905d5" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/unaryOperation.json", + "hash": "60fa3a805f2aa7372908902b54d13ae714a8ab41" + }, + { + "file": "libs/remix-analyzer/test/analysis/astBlocks/whileLoopNode.json", + "hash": "0f05c2c6ceee97a9eb260eb1ade06793e775fd1c" + }, + { + "file": "libs/remix-analyzer/test/analysis/compilationDetails/CompiledContractObj.json", + "hash": "db7cab541e818a8031e1f6dd9d917173e7822e75" + }, + { + "file": "libs/remix-analyzer/test/analysis/staticAnalysisCommon-test.ts", + "hash": "859dfe9758958f713cda091d24410b77fc7de83a", + "deps": [ + "npm:tape" + ] + }, + { + "file": "libs/remix-analyzer/test/analysis/staticAnalysisIntegration-test-0.4.24.ts", + "hash": "305b53ae979ea81bccc5f67e67c6dabb4a4e968a", + "deps": [ + "npm:tape", + "npm:solc" + ] + }, + { + "file": "libs/remix-analyzer/test/analysis/staticAnalysisIntegration-test-0.5.0.ts", + "hash": "18881e20ef714d06d2a1d2265181fca5e232d7eb", + "deps": [ + "npm:tape", + "npm:solc" + ] + }, + { + "file": "libs/remix-analyzer/test/analysis/staticAnalysisIssues-test-0.4.24.ts", + "hash": "2a6091dc328df67b531650c79dfc445a2b80c362", + "deps": [ + "npm:tape", + "npm:solc" + ] + }, + { + "file": "libs/remix-analyzer/test/analysis/staticAnalysisIssues-test-0.5.0.ts", + "hash": "43234e41682fe7231f4524ff5ad89d73620a167c", + "deps": [ + "npm:tape", + "npm:solc" + ] + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/assembly.sol", + "hash": "fb647502ebfddbdf7f6e766785150df1a34dff4a" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/ballot_reentrant.sol", + "hash": "a695b09e190241c99b72a9b665b6246f4a332736" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/ballot_withoutWarnings.sol", + "hash": "e273b3da4f143442ac0e9bd131670c8daccd3b0e" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/ballot.sol", + "hash": "e1e9f676fe60e144fbba0f6b567ba94febba27fc" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/blockLevelCompare.sol", + "hash": "14c4eb9d7ad0fbdb57c60b690a5333617b0d03d6" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/cross_contract.sol", + "hash": "426c8d444dfa7fb26556bf9d085b2cb50fbb14ee" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/ctor.sol", + "hash": "b250c02626318b534715efaa61ed200c8a56f30c" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/deleteDynamicArray.sol", + "hash": "bb179b21f60f9168eba1a3f930e2895c8766cd17" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/deleteFromDynamicArray.sol", + "hash": "dbe08109bb99512b388f995d2c2dcf87d3147264" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/ERC20.sol", + "hash": "38a6f7711330ed9178fcdc689bb64cb079c5f693" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/etherTransferInLoop.sol", + "hash": "1cf5ca8b6b5f28cebd715b08dbba14b9adfad0f8" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/forgottenReturn.sol", + "hash": "eb3df75e4491882ee8237f97748e05b1cc09252f" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/forLoopIteratesOverDynamicArray.sol", + "hash": "53ed913958a3ac3cb6c96e663c2b2d2e978967be" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/functionParameters.sol", + "hash": "f1a9f4a0f0376b7f340bb655f96729d492d2b0df" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/globals.sol", + "hash": "7df37c757f266301f01b9d3b0a729b4436ecb8ae" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/inheritance.sol", + "hash": "1491e8fa9f87816cfe993d5d599e71f97a1e74e4" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/intDivisionTruncate.sol", + "hash": "e5ed123b85343940b7d4805ef674c8f085709828" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/KingOfTheEtherThrone.sol", + "hash": "70cfb0832779f37e0f5a156f067054d4aa57d37a" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/library.sol", + "hash": "3ca1454d496dd719b277ac1af3040897821a24ea" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/loops.sol", + "hash": "cd6aed59ce777a4ae0c540ec67a79965d877de04" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/modifier1.sol", + "hash": "a755d763b1e166318b940381647d0f4f7fdb55f0" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/modifier2.sol", + "hash": "44db1617c7b9108f1245129308334d582336218d" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/notReentrant.sol", + "hash": "374f64f0202323a9612a064776748d6963394364" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/reentrant.sol", + "hash": "896395e1a6d5c8e3b0984b750414217aa125a7b9" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/selfdestruct.sol", + "hash": "2f56dfc2e4b11f3e530e2396a9e1a3d8a2a79205" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/stringBytesLength.sol", + "hash": "2aaf74039ce3eecb8055a9ffc26f813991b7acdc" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/structReentrant.sol", + "hash": "95952ff1ca677ca3f2bc77325fb5eaf76c0fddf6" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/thisLocal.sol", + "hash": "e31cf0dbaffcbd5536c2af9dfa46c26d89b0eda3" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/transfer.sol", + "hash": "49ddd515bf62357bb9ad16b17e5ba1e34af009e1" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/assembly.sol", + "hash": "d081756d245563be6fc5a1e730e0d5d06193a7ad" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/ballot_reentrant.sol", + "hash": "8455c3da3acf55f5dadcab028ea000c54b2f4727" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/ballot_withoutWarnings.sol", + "hash": "416df05400faa41cdaac7b3db13ed8fab4c0016e" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/ballot.sol", + "hash": "ab3bbb75e87fafd0d2dfcb7b8f30a7a729ac4eb4" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/blockLevelCompare.sol", + "hash": "1b8af64afd3724d76780f3f5fc4fec9fb708a3e6" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/cross_contract.sol", + "hash": "db858bc9c8e67c95da32fa779b52a2ff4290435f" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/ctor.sol", + "hash": "c43dd240f5aafd19c32c937de567290c08023040" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/deleteDynamicArray.sol", + "hash": "5a21fe3c64cee39ee4257dcd624e53d73ebfa20b" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/deleteFromDynamicArray.sol", + "hash": "aa69d134cf44a46dadec86abe2a8f05da7a3e105" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/ERC20.sol", + "hash": "e72f46a4aad28e61654374d94ae8d16c501cfa71" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/etherTransferInLoop.sol", + "hash": "3b8a59c1f3db24f35ac2d60433dfb09b90e4bf14" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/forgottenReturn.sol", + "hash": "7b06f8ad79ac2d9652d518ebc96a7d3d6cf6025f" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/forLoopIteratesOverDynamicArray.sol", + "hash": "65b8130d2e5095a7a7546fdf1ad18b729df34027" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/functionParameters.sol", + "hash": "c90e55a45a9ffac45051d12513452f7715dd4493" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/globals.sol", + "hash": "7cdf4c1cb00a88f941d2947b5a8c3f131254f220" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/inheritance.sol", + "hash": "21e20512b59d8560fcf41e0e50ff54de064fd506" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/intDivisionTruncate.sol", + "hash": "fe0654af9a3cb6960d8dfc6bd11ba511a7a288e1" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/KingOfTheEtherThrone.sol", + "hash": "565f2cf980d5acb9ae70347e523e56594ae0d56e" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/library.sol", + "hash": "b377da54b48d427c2f5164c82fbce8b3101cf839" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/loops.sol", + "hash": "23089d4732518fdd4037dcef838cbec38ce7392d" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/modifier1.sol", + "hash": "839e702b7ab8c2ae799d8b09a206cf7c645ac814" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/modifier2.sol", + "hash": "ec24515a84223f96c59838148926813087a16d03" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/notReentrant.sol", + "hash": "b396c5ad247a75d88b2bceb74cebcb4972cc72d7" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/reentrant.sol", + "hash": "39aa13444e13716ce560a1057eab233685c7c491" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/selfdestruct.sol", + "hash": "6bbae7ba5bbbae076d33265d125e1eb1d0a1fd24" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/stringBytesLength.sol", + "hash": "ca1f78dc095a43dce31b5106fb6d4f59eda0b459" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/structReentrant.sol", + "hash": "44591d5514753bad2d52a5476ae765424ba1319e" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/thisLocal.sol", + "hash": "d10271c5c9321bd2beebb1e578dd89174b476a3f" + }, + { + "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/transfer.sol", + "hash": "aca7cb29c0ee2fde04b0f09081d1a1496014faeb" + }, + { + "file": "libs/remix-analyzer/test/tests.ts", + "hash": "c6f248c71c472e85128e3f681c568e194a591f1b" + }, + { + "file": "libs/remix-analyzer/tsconfig.json", + "hash": "751eaf755d4e659c1dadb5a010db5b3b5ef7492b" + }, + { + "file": "libs/remix-analyzer/tsconfig.lib.json", + "hash": "f8c817af2a55daf384b7380a20688c54d75eb8a4" + } + ] + } + }, + "remix-solidity": { + "name": "remix-solidity", + "type": "lib", + "data": { + "name": "remix-solidity", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/remix-solidity/src", + "projectType": "library", + "implicitDependencies": [ + "remix-lib" + ], + "targets": { + "build": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/js:tsc", + "outputs": [ + "{options.outputPath}" + ], + "options": { + "outputPath": "dist/libs/remix-solidity", + "main": "libs/remix-solidity/src/index.ts", + "tsConfig": "libs/remix-solidity/tsconfig.lib.json", + "updateBuildableProjectDepsInPackageJson": false, + "assets": [ + "libs/remix-solidity/*.md" + ] + }, + "configurations": {} + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "libs/remix-solidity/**/*.ts" + ] + } + } + }, + "tags": [], + "root": "libs/remix-solidity", + "files": [ + { + "file": "libs/remix-solidity/.eslintrc", + "hash": "f57f93144edfd987a71b8c065a0c6ddbbdb24026" + }, + { + "file": "libs/remix-solidity/.npmignore", + "hash": "aa8e45f12bce4c9ccf69652a97bd54ffc43c7123" + }, + { + "file": "libs/remix-solidity/package.json", + "hash": "5a9ecbc02026c6c8472a3649087766eb000ef91e", + "deps": [ + "npm:@ethereumjs/block", + "npm:@ethereumjs/tx", + "npm:@ethereumjs/util", + "npm:@ethereumjs/vm", + "remix-lib", + "npm:async", + "npm:eslint-scope", + "npm:ethers", + "npm:ethjs-util", + "npm:minixhr", + "npm:semver", + "npm:solc", + "npm:string-similarity", + "npm:web3", + "npm:@babel/core", + "npm:@babel/plugin-transform-object-assign", + "npm:@babel/preset-env", + "npm:@babel/preset-stage-0", + "npm:@types/node", + "npm:babel-eslint", + "npm:babelify", + "npm:typescript" + ] + }, + { + "file": "libs/remix-solidity/project.json", + "hash": "71785eb33527b2018fa1ea2178eddbc8b8234be6" + }, + { + "file": "libs/remix-solidity/README.md", + "hash": "45f0cda698ada4e18ffb54281161b0482a067b28" + }, + { + "file": "libs/remix-solidity/src/compiler/compiler-abstract.ts", + "hash": "52371b1d4f3812fec07c55e819fbe4b85fdeb2a5" + }, + { + "file": "libs/remix-solidity/src/compiler/compiler-helpers.ts", + "hash": "3097eeab28cbd27c1688bd14807aa172bdf5f025" + }, + { + "file": "libs/remix-solidity/src/compiler/compiler-input.ts", + "hash": "8598c9dfd45167919684d95e105fd69a176b0903" + }, + { + "file": "libs/remix-solidity/src/compiler/compiler-utils.ts", + "hash": "456264aa037d06b2453c4189db3f6ae1c63db4c2", + "deps": [ + "npm:semver" + ] + }, + { + "file": "libs/remix-solidity/src/compiler/compiler.ts", + "hash": "2e20b0c857ef20ee032b02bf5ff6a7d064d5e7a5", + "deps": [ + "npm:solc" + ] + }, + { + "file": "libs/remix-solidity/src/compiler/helper.ts", + "hash": "f4eb8e3f217b804ec22901583dc86c72d95079f3" + }, + { + "file": "libs/remix-solidity/src/compiler/types.ts", + "hash": "d86e7b0b74c8bcee4b4596d5d11f16458b0b137b" + }, + { + "file": "libs/remix-solidity/src/index.ts", + "hash": "b9db8be3be8d0303cf5490835818be038a92c866" + }, + { + "file": "libs/remix-solidity/src/lib/es-web-worker/compiler-worker.ts", + "hash": "60852272fb6ab65d75d2e5a685ed1b0806088684", + "deps": [ + "npm:solc" + ] + }, + { + "file": "libs/remix-solidity/src/lib/es-web-worker/es-web-worker-handler.ts", + "hash": "03ba81cb3dc782d517071073e01167fdbc7b9e2b" + }, + { + "file": "libs/remix-solidity/src/lib/eventManager.ts", + "hash": "c8c1002430bf954e81145d6ebcb0a99f4bd9d60e" + }, + { + "file": "libs/remix-solidity/tests/compiler-input.spec.ts", + "hash": "3dc247624b2f2e7d70f6dcb1f5d01dd0529d779b" + }, + { + "file": "libs/remix-solidity/tsconfig.json", + "hash": "eb1415fa71c5cce2049880364d9ef4f88b929559" + }, + { + "file": "libs/remix-solidity/tsconfig.lib.json", + "hash": "b7f44e548b4bbd34972de1b0ca3cd3cfaae649e2" + } + ] + } + }, + "walletconnect": { + "name": "walletconnect", + "type": "app", + "data": { + "name": "walletconnect", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "apps/walletconnect/src", + "projectType": "application", + "implicitDependencies": [], + "targets": { + "build": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/webpack:webpack", + "outputs": [ + "{options.outputPath}" + ], + "defaultConfiguration": "development", + "options": { + "compiler": "babel", + "outputPath": "dist/apps/walletconnect", + "index": "apps/walletconnect/src/index.html", + "baseHref": "./", + "main": "apps/walletconnect/src/main.tsx", + "polyfills": "apps/walletconnect/src/polyfills.ts", + "tsConfig": "apps/walletconnect/tsconfig.app.json", + "assets": [ + "apps/walletconnect/src/profile.json" + ], + "styles": [ + "apps/walletconnect/src/css/app.css", + "apps/walletconnect/src/css/index.css" + ], + "scripts": [], + "webpackConfig": "apps/walletconnect/webpack.config.js" + }, + "configurations": { + "development": {}, + "production": { + "fileReplacements": [ + { + "replace": "apps/walletconnect/src/environments/environment.ts", + "with": "apps/walletconnect/src/environments/environment.prod.ts" + } + ] + } + } + }, + "serve": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/webpack:dev-server", + "defaultConfiguration": "development", + "options": { + "buildTarget": "walletconnect:build", + "hmr": true, + "baseHref": "/" + }, + "configurations": { + "development": { + "buildTarget": "walletconnect:build:development", + "port": 2023 + }, + "production": { + "buildTarget": "walletconnect:build:production" + } + } + } + }, + "tags": [], + "root": "apps/walletconnect", + "files": [ + { + "file": "apps/walletconnect/project.json", + "hash": "b8baae9b60efab3f08e6da534b90aca3c490f5d7" + }, + { + "file": "apps/walletconnect/src/app/app.tsx", + "hash": "ddf571a0c6f7ed41e31e3fd31975b2a98e486d3a", + "deps": [ + "npm:react", + "npm:@fortawesome/fontawesome-free", + "npm:@web3modal/ethereum" + ] + }, + { + "file": "apps/walletconnect/src/app/walletConnectUI.tsx", + "hash": "38c205000f19b5794be19929891d57c5ff15e43b", + "deps": [ + "npm:@web3modal/react", + "npm:wagmi" + ] + }, + { + "file": "apps/walletconnect/src/css/app.css", + "hash": "74b5e053450a48a6bdb4d71aad648e7af821975c" + }, + { + "file": "apps/walletconnect/src/css/index.css", + "hash": "ec2585e8c0bb8188184ed1e0703c4c8f2a8419b0" + }, + { + "file": "apps/walletconnect/src/index.html", + "hash": "f228a9aae8ad9186d10caa44799bc535e9e09cb9" + }, + { + "file": "apps/walletconnect/src/logo.svg", + "hash": "267b6f5b78f1f246bda5c5ddd44de8ea11d1544f" + }, + { + "file": "apps/walletconnect/src/main.tsx", + "hash": "818cf01a94115ab2b7d7990d31df0bcdf66245a1", + "deps": [ + "npm:react", + "npm:react-dom" + ] + }, + { + "file": "apps/walletconnect/src/polyfills.ts", + "hash": "2adf3d05b6fcf479dd61c74f6bda95d9edb6ac6b", + "deps": [ + "npm:core-js", + "npm:regenerator-runtime" + ] + }, + { + "file": "apps/walletconnect/src/profile.json", + "hash": "72bb3adc872dedc5ef70d9841178a79dadd3d22b" + }, + { + "file": "apps/walletconnect/src/services/constant.ts", + "hash": "497ddc5357c18e2b3986b1bac0dd8dd32b27ca5d" + }, + { + "file": "apps/walletconnect/src/services/WalletConnectRemixClient.ts", + "hash": "6f8b494d00ac039aa8365a1ee361681760f1c687", + "deps": [ + "npm:@remixproject/plugin", + "npm:@remixproject/plugin-webview", + "npm:@web3modal/ethereum", + "npm:wagmi", + "npm:viem", + "npm:events" + ] + }, + { + "file": "apps/walletconnect/tsconfig.app.json", + "hash": "2272b8a388c56c760e15a8d8e64a4a40e13a4315" + }, + { + "file": "apps/walletconnect/tsconfig.json", + "hash": "3b6130a0a823f45efa53e66d3d98f20f751420e3" + }, + { + "file": "apps/walletconnect/webpack.config.js", + "hash": "3a3693c88ac0f3358bbf5d749ec4946c042804be", + "deps": [ + "npm:@nrwl/webpack", + "npm:webpack", + "npm:terser-webpack-plugin", + "npm:css-minimizer-webpack-plugin" + ] + } + ] + } + }, + "remix-debug": { + "name": "remix-debug", + "type": "lib", + "data": { + "name": "remix-debug", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/remix-debug/src", + "projectType": "library", + "implicitDependencies": [ + "remix-lib", + "remix-astwalker" + ], + "targets": { + "test": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "nx:run-script", + "options": { + "script": "test" + }, + "configurations": {} + }, + "build": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/js:tsc", + "outputs": [ + "{options.outputPath}" + ], + "options": { + "outputPath": "dist/libs/remix-debug", + "main": "libs/remix-debug/src/index.ts", + "tsConfig": "libs/remix-debug/tsconfig.lib.json", + "updateBuildableProjectDepsInPackageJson": false, + "assets": [ + { + "glob": "rdb", + "input": "libs/remix-debug/bin/", + "output": "bin/" + }, + { + "glob": "*.md", + "input": "libs/remix-debug/", + "output": "/" + } + ] + }, + "configurations": {} + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "libs/remix-debug/**/*.ts" + ] + } + } + }, + "tags": [], + "root": "libs/remix-debug", + "files": [ + { + "file": "libs/remix-debug/.eslintrc", + "hash": "88ae470657c5888a87b2483f492578379f3d8e1b" + }, + { + "file": "libs/remix-debug/.npmignore", + "hash": "b59f7e3a95a4d3f2b168d9c8e330be591fc49a6b" + }, + { + "file": "libs/remix-debug/bin/rdb", + "hash": "8ebf4f1b8b1ad2ce263b9685d9b88c32aef4f4c3" + }, + { + "file": "libs/remix-debug/compilation.json", + "hash": "323166a4ad68d0b425c70d7f379841c138335010" + }, + { + "file": "libs/remix-debug/package.json", + "hash": "32799caf494544ca97f967e4958d359d881dbe81", + "deps": [ + "npm:@ethereumjs/block", + "npm:@ethereumjs/common", + "npm:@ethereumjs/tx", + "npm:@ethereumjs/util", + "npm:@ethereumjs/vm", + "remix-astwalker", + "remix-lib", + "remix-simulator", + "remix-solidity", + "npm:ansi-gray", + "npm:async", + "npm:color-support", + "npm:commander", + "npm:deep-equal", + "npm:ethers", + "npm:ethjs-util", + "npm:express-ws", + "npm:merge", + "npm:string-similarity", + "npm:time-stamp", + "npm:web3", + "npm:@babel/core", + "npm:@babel/plugin-transform-object-assign", + "npm:@babel/preset-env", + "npm:@babel/preset-stage-0", + "npm:babel-eslint", + "npm:babelify", + "npm:solc", + "npm:tape" + ] + }, + { + "file": "libs/remix-debug/project.json", + "hash": "2f67c8b8cbf0e2da20fbeeb72c3bef538bfbdd1a" + }, + { + "file": "libs/remix-debug/README.md", + "hash": "a59e9690ac52c6f223b8ec074932c05a3b32e0a9" + }, + { + "file": "libs/remix-debug/src/cmdline/index.ts", + "hash": "b019e7ebd0c731cbf7a41f9699b0de8c54ab1b78", + "deps": [ + "npm:web3", + "npm:events" + ] + }, + { + "file": "libs/remix-debug/src/code/breakpointManager.ts", + "hash": "58c4691b36e547caa2bc08d8a5d39f782c1a6b5e" + }, + { + "file": "libs/remix-debug/src/code/codeManager.ts", + "hash": "6d644a8eba2d3dcaf0774609b2a3121084879f64" + }, + { + "file": "libs/remix-debug/src/code/codeResolver.ts", + "hash": "94be135a5c2a2b61354f5eb87795440a06e30ba5" + }, + { + "file": "libs/remix-debug/src/code/codeUtils.ts", + "hash": "f9784bb135f1fb9097d9acf1db2b8657384a1db1", + "deps": [ + "npm:@ethereumjs/common", + "npm:@ethereumjs/evm" + ] + }, + { + "file": "libs/remix-debug/src/code/disassembler.ts", + "hash": "b828fe7e5d6e54ad28f72ca092a7880b8a808fee", + "deps": [ + "npm:@ethereumjs/util" + ] + }, + { + "file": "libs/remix-debug/src/code/opcodes.ts", + "hash": "c5c1bc655726a52128c153990a49577e016673d8" + }, + { + "file": "libs/remix-debug/src/debugger/debugger.ts", + "hash": "a939357a98248a58b45189fea48588316419d8b6" + }, + { + "file": "libs/remix-debug/src/debugger/solidityLocals.ts", + "hash": "bbc9afd179bd857fc210621ed262ea2c6307f34a" + }, + { + "file": "libs/remix-debug/src/debugger/solidityState.ts", + "hash": "237be4e7dae8c7178720bc746bba5b7348a82ee7" + }, + { + "file": "libs/remix-debug/src/debugger/stepManager.ts", + "hash": "8c0e6512d54835554336687014e3659773137ee9" + }, + { + "file": "libs/remix-debug/src/debugger/VmDebugger.ts", + "hash": "19a8be3d51632b6f80912accc608af5dfa2d9f08" + }, + { + "file": "libs/remix-debug/src/Ethdebugger.ts", + "hash": "e3a546b1b43686cb4d8fc4b5399c15db3f02e7bb" + }, + { + "file": "libs/remix-debug/src/eventManager.ts", + "hash": "f878395ed32bc30b24b3dfef52463eed44abd7db" + }, + { + "file": "libs/remix-debug/src/index.ts", + "hash": "855b53f83e20e705b9de5fae9f8cd0cbc609b53b" + }, + { + "file": "libs/remix-debug/src/init.ts", + "hash": "fab25c5039121ae303900e62810dd06f33261c53", + "deps": [ + "npm:web3" + ] + }, + { + "file": "libs/remix-debug/src/solidity-decoder/astHelper.ts", + "hash": "d3ecfa0c16abf31377d655cd8d3745e32a6538b3" + }, + { + "file": "libs/remix-debug/src/solidity-decoder/decodeInfo.ts", + "hash": "23945164b4787fcdddae36ee6773a58e2c851eb8" + }, + { + "file": "libs/remix-debug/src/solidity-decoder/index.ts", + "hash": "7d8d2cc8a302b40224236a80b4bd55c871ddd6d5" + }, + { + "file": "libs/remix-debug/src/solidity-decoder/internalCallTree.ts", + "hash": "4233ec9cbbd0fec75e2bffd827907da1c1ad0db7" + }, + { + "file": "libs/remix-debug/src/solidity-decoder/localDecoder.ts", + "hash": "d7619ce12ba4d596c5b59072a4006b5b42556720" + }, + { + "file": "libs/remix-debug/src/solidity-decoder/solidityProxy.ts", + "hash": "462dad4d0521ab94d72eb3e530cdf411057eb9a6" + }, + { + "file": "libs/remix-debug/src/solidity-decoder/stateDecoder.ts", + "hash": "531c7abee7dc6cbed71c0dbec5c6a4feed5a9860" + }, + { + "file": "libs/remix-debug/src/solidity-decoder/types/Address.ts", + "hash": "ffe03c1c9fd560c98dec56a19c919f2666b5f69d" + }, + { + "file": "libs/remix-debug/src/solidity-decoder/types/ArrayType.ts", + "hash": "29f98ab736bdb74edf01d4c7c894d27a435f153a" + }, + { + "file": "libs/remix-debug/src/solidity-decoder/types/Bool.ts", + "hash": "8c067c011b76ca9f2d46f4da8d5e2893d1228299" + }, + { + "file": "libs/remix-debug/src/solidity-decoder/types/DynamicByteArray.ts", + "hash": "2f5fcb6c8059c534bbf67313b51c6e4684669a08", + "deps": [ + "npm:bn.js" + ] + }, + { + "file": "libs/remix-debug/src/solidity-decoder/types/Enum.ts", + "hash": "412533f17fcc3da617401a9d49471bba77dd5c42" + }, + { + "file": "libs/remix-debug/src/solidity-decoder/types/FixedByteArray.ts", + "hash": "a6704dc96236b29d4d7d49a5d13c35ea16641fe3" + }, + { + "file": "libs/remix-debug/src/solidity-decoder/types/FunctionType.ts", + "hash": "ffa4b9f1c6f2028ede7b1d8c9320c1d0da76f47d" + }, + { + "file": "libs/remix-debug/src/solidity-decoder/types/Int.ts", + "hash": "ed35f7929294f3340a36c5c082f4233f402531fe" + }, + { + "file": "libs/remix-debug/src/solidity-decoder/types/Mapping.ts", + "hash": "870c0b01a82e9f37dad4307bcf9ec459e7897fc2", + "deps": [ + "npm:@ethereumjs/util", + "npm:bn.js" + ] + }, + { + "file": "libs/remix-debug/src/solidity-decoder/types/RefType.ts", + "hash": "3e51915077c76a83e9aa0277f4d6b2cb6e68f8e8", + "deps": [ + "npm:ethers" + ] + }, + { + "file": "libs/remix-debug/src/solidity-decoder/types/StringType.ts", + "hash": "84c6483e8e404213bf70f9698b0dc86cc745a7d9" + }, + { + "file": "libs/remix-debug/src/solidity-decoder/types/Struct.ts", + "hash": "b11f12f533ea9692f2c9a77105024972656bf311" + }, + { + "file": "libs/remix-debug/src/solidity-decoder/types/Uint.ts", + "hash": "8e27fc4621cca0d49d825fb975d73096c1e6a5e6" + }, + { + "file": "libs/remix-debug/src/solidity-decoder/types/util.ts", + "hash": "bd6a7f4bd1bdccc1f51d1179a336b9ae2063263d", + "deps": [ + "npm:@ethereumjs/util", + "npm:bn.js" + ] + }, + { + "file": "libs/remix-debug/src/solidity-decoder/types/ValueType.ts", + "hash": "2aeae677fe30a8bbf1c0512f93856f04e297f9d3" + }, + { + "file": "libs/remix-debug/src/source/offsetToLineColumnConverter.ts", + "hash": "a1f296c76f01d37a5d24d46e06a5f02a2b9088ad" + }, + { + "file": "libs/remix-debug/src/source/sourceLocationTracker.ts", + "hash": "c7502db960c214976931d2e0e2ad55d0d30f24da" + }, + { + "file": "libs/remix-debug/src/source/sourceMappingDecoder.ts", + "hash": "04b3bcb9ba4032fce82856da7f5545fdb8dc2f7d" + }, + { + "file": "libs/remix-debug/src/storage/mappingPreimages.ts", + "hash": "fceb13b89ec770d2d029fdcc7686c1dfc1bd8765" + }, + { + "file": "libs/remix-debug/src/storage/storageResolver.ts", + "hash": "c5522f37f9a6ae7f1a95e45f82cf654aa9b8478c" + }, + { + "file": "libs/remix-debug/src/storage/storageViewer.ts", + "hash": "ee174d3123990fe3f772e3dea9a8d489d2ac2fc5" + }, + { + "file": "libs/remix-debug/src/trace/traceAnalyser.ts", + "hash": "e4183f9942c4552a417fd544b9cc136bce02ab08" + }, + { + "file": "libs/remix-debug/src/trace/traceCache.ts", + "hash": "af578c256832dc29ee3f1040ef0e57a1483d397b" + }, + { + "file": "libs/remix-debug/src/trace/traceHelper.ts", + "hash": "0f49bde1105be51a57d9fce8dece7aca24afadca" + }, + { + "file": "libs/remix-debug/src/trace/traceManager.ts", + "hash": "e15f8e180bce23a2f8bd17df10ed18031334cc3d" + }, + { + "file": "libs/remix-debug/src/trace/traceStepManager.ts", + "hash": "bcbccfe2e182a5dc6f2568176d91a19f950300b5" + }, + { + "file": "libs/remix-debug/test.ts", + "hash": "7ccb8bcc0fd0a9d28c439514828a785cf6058ad4", + "deps": [ + "npm:solc" + ] + }, + { + "file": "libs/remix-debug/test/codeManager.ts", + "hash": "3ba95be60ae22f2fedca2ebb38864426a41de353", + "deps": [ + "npm:tape" + ] + }, + { + "file": "libs/remix-debug/test/debugger.ts", + "hash": "e573f3e13769ea7717fce5298679e88d8ad321b3", + "deps": [ + "npm:tape", + "npm:deep-equal", + "npm:solc" + ] + }, + { + "file": "libs/remix-debug/test/decoder/contracts/byteStorage.ts", + "hash": "89720f2a21cbf3cd59ee17fdd3bea252b9e575b8" + }, + { + "file": "libs/remix-debug/test/decoder/contracts/calldata.ts", + "hash": "62d3df3ea4dcdf592d9f689e65b60be1d688a1b7" + }, + { + "file": "libs/remix-debug/test/decoder/contracts/intLocal.ts", + "hash": "0b4a1128081cc9d4d72406b75d8405258bba62c3" + }, + { + "file": "libs/remix-debug/test/decoder/contracts/intStorage.ts", + "hash": "ec2ed7719e4de5e27380f1ba5d38e0f39ca40bb5" + }, + { + "file": "libs/remix-debug/test/decoder/contracts/mappingStorage.ts", + "hash": "57c5f58a93020916203b43cc0e35067de22485f1" + }, + { + "file": "libs/remix-debug/test/decoder/contracts/miscContracts.ts", + "hash": "7e8f9214be93c3f67b45d56c0665ad8b45321f78" + }, + { + "file": "libs/remix-debug/test/decoder/contracts/miscLocal.ts", + "hash": "2447e2f9590f848cbce2b04db4e5edd6acbb2497" + }, + { + "file": "libs/remix-debug/test/decoder/contracts/simpleContract.ts", + "hash": "bc4200ab668bdc934c5ffd5b7e362a54d3c1120a" + }, + { + "file": "libs/remix-debug/test/decoder/contracts/structArrayLocal.ts", + "hash": "c8391005d8b9cb782ade7304cba603d0d825b0bf" + }, + { + "file": "libs/remix-debug/test/decoder/contracts/structArrayStorage.ts", + "hash": "5c38132b4cd5b9f5a25610eb925ff785ed116886" + }, + { + "file": "libs/remix-debug/test/decoder/decodeInfo.ts", + "hash": "cd2b8cf94d37564485196879dded1ddb1f9994b2", + "deps": [ + "npm:tape", + "npm:solc" + ] + }, + { + "file": "libs/remix-debug/test/decoder/localDecoder.ts", + "hash": "e8e92d25f2256d4de9417d844a717dbf4cb7bc2d", + "deps": [ + "npm:tape", + "npm:solc" + ] + }, + { + "file": "libs/remix-debug/test/decoder/localsTests/calldata.ts", + "hash": "c198840b7a0796d30695ae6a974fb213b0e20f9d", + "deps": [ + "npm:deep-equal" + ] + }, + { + "file": "libs/remix-debug/test/decoder/localsTests/helper.ts", + "hash": "d966c16f5a2eeb5730fa3cf8146b11114e0c0cdf" + }, + { + "file": "libs/remix-debug/test/decoder/localsTests/int.ts", + "hash": "72d02c145b3580c5218d9a9c92bc38a86b9a2ead" + }, + { + "file": "libs/remix-debug/test/decoder/localsTests/misc.ts", + "hash": "6ea357fc420332c6b4bb53562c335407e2705337" + }, + { + "file": "libs/remix-debug/test/decoder/localsTests/misc2.ts", + "hash": "4f4342c8b535552976f0132ac764d5028fe94028" + }, + { + "file": "libs/remix-debug/test/decoder/localsTests/structArray.ts", + "hash": "f060199cbe0b0504d30b8a5beef01f5d9d5b317b" + }, + { + "file": "libs/remix-debug/test/decoder/mockStorageResolver.ts", + "hash": "63cbb6d5b39636108ed20cc964bfbd2cb96290b3" + }, + { + "file": "libs/remix-debug/test/decoder/stateTests/mapping.ts", + "hash": "52b457e8ce1677891ecb18063b0322f091702be7", + "deps": [ + "npm:solc", + "npm:@ethereumjs/util" + ] + }, + { + "file": "libs/remix-debug/test/decoder/storageDecoder.ts", + "hash": "9c1e3b0535babc9d8128e19bad0bcb4058f07ac6", + "deps": [ + "npm:tape", + "npm:solc" + ] + }, + { + "file": "libs/remix-debug/test/decoder/storageLocation.ts", + "hash": "c65f368c9233993a94ef7257556845fe9339336c", + "deps": [ + "npm:tape", + "npm:solc" + ] + }, + { + "file": "libs/remix-debug/test/disassembler.ts", + "hash": "406994975d188bc755dbaa9014ca8c3ff4a6df0a", + "deps": [ + "npm:tape" + ] + }, + { + "file": "libs/remix-debug/test/helpers/compilerHelper.ts", + "hash": "542d10a1b99b60882692e0c44fe431939593489c" + }, + { + "file": "libs/remix-debug/test/init.ts", + "hash": "547d5e1d6e0238417c87dca7d04cbaa230b67758" + }, + { + "file": "libs/remix-debug/test/resources/ast.ts", + "hash": "f4ca65f47e8008b0b03b466d6873dab3d00d2087" + }, + { + "file": "libs/remix-debug/test/resources/sourceMapping.ts", + "hash": "80f1a698ee745ae667cc9f51b8c243c077516d68" + }, + { + "file": "libs/remix-debug/test/resources/testWeb3.json", + "hash": "f26cc04b84d0c96f24afa51b8302e75297f27ceb" + }, + { + "file": "libs/remix-debug/test/resources/testWeb3.ts", + "hash": "e91f584fd4a994510b4d46275500976e14993074" + }, + { + "file": "libs/remix-debug/test/resources/traceWithABIEncoder.json", + "hash": "db1518174c57d5c4b78d23a525e6b8880e91ee34" + }, + { + "file": "libs/remix-debug/test/sol/ballot.sol", + "hash": "ec43956ce931bb1fae4bea38c862e72b6cdcc40e" + }, + { + "file": "libs/remix-debug/test/sol/simple_storage.sol", + "hash": "00b1554807d6e83f55a6a043cbc8d1b72872cdda" + }, + { + "file": "libs/remix-debug/test/sourceLocationTracker.ts", + "hash": "2b5ad856f9c9502591edf4889c2de790acdb0166", + "deps": [ + "npm:tape", + "npm:solc" + ] + }, + { + "file": "libs/remix-debug/test/sourceMappingDecoder.ts", + "hash": "e9a41f128b229a1e443a8895ddf35008c1fce911", + "deps": [ + "npm:tape", + "npm:solc" + ] + }, + { + "file": "libs/remix-debug/test/tests.ts", + "hash": "87f8c01972ef0b03ec70436654c3bb82198d4104" + }, + { + "file": "libs/remix-debug/test/traceManager.ts", + "hash": "8128e21ac82d87005cb64c2ceae7c9f4dc2f0cfa", + "deps": [ + "npm:tape" + ] + }, + { + "file": "libs/remix-debug/test/vmCall.ts", + "hash": "56d15729e970f28166187e78b822718dedfe4948", + "deps": [ + "npm:@ethereumjs/util", + "npm:web3" + ] + }, + { + "file": "libs/remix-debug/tsconfig.json", + "hash": "d66e6f3252632ca64ecfbeed370896570b9a1a05" + }, + { + "file": "libs/remix-debug/tsconfig.lib.json", + "hash": "b0cb638211167ff4f93fd9a37a6b77792626c10d" + } + ] + } + }, + "remix-tests": { + "name": "remix-tests", + "type": "lib", + "data": { + "name": "remix-tests", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/remix-tests/src", + "projectType": "library", + "implicitDependencies": [ + "remix-lib", + "remix-simulator", + "remix-solidity" + ], + "targets": { + "build": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/js:tsc", + "outputs": [ + "{options.outputPath}" + ], + "options": { + "outputPath": "dist/libs/remix-tests", + "main": "libs/remix-tests/src/index.ts", + "tsConfig": "libs/remix-tests/tsconfig.lib.json", + "updateBuildableProjectDepsInPackageJson": false, + "assets": [ + { + "glob": "remix-tests", + "input": "libs/remix-tests/bin/", + "output": "bin/" + }, + { + "glob": "*.md", + "input": "libs/remix-tests/", + "output": "/" + } + ] + }, + "configurations": {} + }, + "test": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "nx:run-script", + "options": { + "script": "test" + }, + "configurations": {} + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "libs/remix-tests/**/*.ts" + ] + } + } + }, + "tags": [], + "root": "libs/remix-tests", + "files": [ + { + "file": "libs/remix-tests/.eslintrc", + "hash": "f57f93144edfd987a71b8c065a0c6ddbbdb24026" + }, + { + "file": "libs/remix-tests/.npmignore", + "hash": "aee9a85bad853d20d7294e16cd9c1e6083e851ed" + }, + { + "file": "libs/remix-tests/bin/remix-tests", + "hash": "3c14572035f34f95fefeefa769bec73f2c334536" + }, + { + "file": "libs/remix-tests/examples/simple_storage_test.sol", + "hash": "3fe9dd08cd12a81b406d7021edc8aadc68ef39ae" + }, + { + "file": "libs/remix-tests/examples/simple_storage.sol", + "hash": "278155d1f1652e1da2ac7fab7d12bbf57b01e517" + }, + { + "file": "libs/remix-tests/examples/simple_storage2_test.sol", + "hash": "caa4de9bbae8f3272aed0251415705f5977151b8" + }, + { + "file": "libs/remix-tests/LICENSE.md", + "hash": "e6d34d264bddc6275f6829e79973c603391f07cc" + }, + { + "file": "libs/remix-tests/package.json", + "hash": "a9462d0075967537747e533bd48da292ebb6f048", + "deps": [ + "npm:@erebos/bzz-node", + "npm:@ethereumjs/block", + "npm:@ethereumjs/common", + "npm:@ethereumjs/tx", + "npm:@ethereumjs/util", + "npm:@ethereumjs/vm", + "remix-lib", + "remix-simulator", + "remix-solidity", + "remix-url-resolver", + "npm:ansi-gray", + "npm:async", + "npm:axios", + "npm:change-case", + "npm:color-support", + "npm:colors", + "npm:commander", + "npm:deep-equal", + "npm:ethers", + "npm:ethjs-util", + "npm:express-ws", + "npm:merge", + "npm:signale", + "npm:solc", + "npm:string-similarity", + "npm:time-stamp", + "npm:tslib", + "npm:web3", + "npm:winston", + "npm:@babel/preset-env", + "npm:@types/mocha", + "npm:@types/node", + "npm:mocha", + "npm:ts-node", + "npm:typescript" + ] + }, + { + "file": "libs/remix-tests/project.json", + "hash": "e2e4741e35847e68fe8c2283815fa0ccc7ae35a7" + }, + { + "file": "libs/remix-tests/README.md", + "hash": "81a3bc6aaf5526581a1d3cc8a90f1b85d3770a28" + }, + { + "file": "libs/remix-tests/sol/tests_accounts.sol.ts", + "hash": "1d9533a61381179c42eca36599d51b2363dc3fae" + }, + { + "file": "libs/remix-tests/sol/tests.sol.ts", + "hash": "84a8143510195bcda5b6fdd3b938f6d64501c083" + }, + { + "file": "libs/remix-tests/src/assertionEvents.ts", + "hash": "f0d0f194280364700c49142ca07f9f681465c7bd" + }, + { + "file": "libs/remix-tests/src/compiler.ts", + "hash": "591609c5a814c8457ed4573012e798d26bec9b9e", + "deps": [ + "npm:async", + "npm:deep-equal" + ] + }, + { + "file": "libs/remix-tests/src/deployer.ts", + "hash": "d3164eb285af643d04cfbfc699ae6dd0844d8179", + "deps": [ + "npm:async", + "npm:web3" + ] + }, + { + "file": "libs/remix-tests/src/fileSystem.ts", + "hash": "10a9301b96135af79e8f71b0cae7622a007dc7f4" + }, + { + "file": "libs/remix-tests/src/index.ts", + "hash": "5adef21ecf6b274be4b25f7c6e982e1819d1c9f8" + }, + { + "file": "libs/remix-tests/src/logger.ts", + "hash": "e084ed00a2842abb1010a19492831d0e195784f2", + "deps": [ + "npm:colors", + "npm:winston", + "npm:time-stamp", + "npm:color-support" + ] + }, + { + "file": "libs/remix-tests/src/run.ts", + "hash": "116da1cb28ec45233fff6d7ad3865a0268aa1bd8", + "deps": [ + "npm:commander", + "npm:web3", + "npm:axios", + "npm:colors" + ] + }, + { + "file": "libs/remix-tests/src/runTestFiles.ts", + "hash": "a811f9b441b7649955b2c474b2bd1d2f54727f9d", + "deps": [ + "npm:async", + "npm:colors", + "npm:web3", + "npm:util", + "npm:signale" + ] + }, + { + "file": "libs/remix-tests/src/runTestSources.ts", + "hash": "f6cb8cbcf33ea2c17d14ac72a6a9fb5f7cfab9f1", + "deps": [ + "npm:async", + "npm:web3", + "npm:events", + "npm:colors" + ] + }, + { + "file": "libs/remix-tests/src/testRunner.ts", + "hash": "773178606826af122ef78a17c49636c0ba7053ed", + "deps": [ + "npm:async", + "npm:change-case", + "npm:web3" + ] + }, + { + "file": "libs/remix-tests/src/types.ts", + "hash": "fb03e9488785b155b35e04665cf017fec0f36713" + }, + { + "file": "libs/remix-tests/tests/examples_0/assert_equal_test.sol", + "hash": "79ebc33b78d80404b402a3175ad0d15c0e347120" + }, + { + "file": "libs/remix-tests/tests/examples_0/assert_greaterThan_test.sol", + "hash": "0dab742ea03eacb11b450005c7d58a67e5174ba0" + }, + { + "file": "libs/remix-tests/tests/examples_0/assert_lesserThan_test.sol", + "hash": "f6468ec952b26bfcae9e470fc5cc2d98b373a4e8" + }, + { + "file": "libs/remix-tests/tests/examples_0/assert_notEqual_test.sol", + "hash": "f8f6a01fb65334e6fbe6ff154842481d3f295504" + }, + { + "file": "libs/remix-tests/tests/examples_0/assert_ok_test.sol", + "hash": "497d0dd7ecee0da797dd767a61fc15f7481ccec3" + }, + { + "file": "libs/remix-tests/tests/examples_1/simple_storage_test.sol", + "hash": "958788563a067149ab496b96799c225f746c873a" + }, + { + "file": "libs/remix-tests/tests/examples_1/simple_storage.sol", + "hash": "c218711d60ab0e77abe75d2b581d6b19c473d343" + }, + { + "file": "libs/remix-tests/tests/examples_2/simple_storage_test.sol", + "hash": "a0c3a0d6ca2e4c932c34fa06737ab684af7e6110" + }, + { + "file": "libs/remix-tests/tests/examples_2/simple_storage.sol", + "hash": "7ee2ffdc6dd12043df21ea6fc51e886cadb6c5ba" + }, + { + "file": "libs/remix-tests/tests/examples_3/simple_string_test.sol", + "hash": "3157f53c358013b607bdef9b92d262f8947076f2" + }, + { + "file": "libs/remix-tests/tests/examples_3/simple_string.sol", + "hash": "1bc847f984f8e89256fff8a110a0ce043e972995" + }, + { + "file": "libs/remix-tests/tests/examples_4/SafeMath_test.sol", + "hash": "be24d4331276efaef073776b799c9ed8c6aa25d1" + }, + { + "file": "libs/remix-tests/tests/examples_4/SafeMath.sol", + "hash": "a93aedaf44261f7e6f048318a8b3e092949e9716" + }, + { + "file": "libs/remix-tests/tests/examples_4/SafeMathProxy.sol", + "hash": "805c6d9112b9c941e9072cfb77ca8f54cf0bc1e8" + }, + { + "file": "libs/remix-tests/tests/examples_5/contract/simple_storage.sol", + "hash": "1cfbeb8f13442deb0d0b3fb7250170159dff0986" + }, + { + "file": "libs/remix-tests/tests/examples_5/lib/EvenOdd.sol", + "hash": "a1536375a6bd54d8ef379a5902f0e2c3de7f7c94" + }, + { + "file": "libs/remix-tests/tests/examples_5/test/simple_storage_test.sol", + "hash": "c5ef812a61c3ae6f7409ab686e51eabb48b562df" + }, + { + "file": "libs/remix-tests/tests/number/number_test.sol", + "hash": "3bbfbc14f0b1cd6fe536f768f5c36a1dae1c3358" + }, + { + "file": "libs/remix-tests/tests/testRunner.cli.spec.ts", + "hash": "8ac5505f10c6bbe4626d2ceeb4a1d9c55c446508", + "deps": [ + "npm:child_process", + "npm:chai" + ] + }, + { + "file": "libs/remix-tests/tests/testRunner.spec.ts", + "hash": "cbdc1c4aa1d5796d96e74c6fe8776e616e96dcf9", + "deps": [ + "npm:async", + "npm:web3", + "npm:assert" + ] + }, + { + "file": "libs/remix-tests/tests/various_sender/sender_and_value_test.sol", + "hash": "1ed50021fd2db2a8fb4e8036c3eb5ddcb0c886a7" + }, + { + "file": "libs/remix-tests/tsconfig.json", + "hash": "9654edaf42e10410c507a1b54ce6a797604443f5" + }, + { + "file": "libs/remix-tests/tsconfig.lib.json", + "hash": "7b4b23c716fb164c8acc43e1b9f4efb0a6ca4374" + }, + { + "file": "libs/remix-tests/tsconfig.spec.json", + "hash": "4fa5ed9ba03d9e30526331b47a0dbad7775ef8c3" + } + ] + } + }, + "doc-viewer": { + "name": "doc-viewer", + "type": "app", + "data": { + "name": "doc-viewer", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "apps/doc-viewer/src", + "projectType": "application", + "implicitDependencies": [], + "targets": { + "build": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/webpack:webpack", + "outputs": [ + "{options.outputPath}" + ], + "defaultConfiguration": "development", + "options": { + "compiler": "babel", + "outputPath": "dist/apps/doc-viewer", + "index": "apps/doc-viewer/src/index.html", + "baseHref": "./", + "main": "apps/doc-viewer/src/main.tsx", + "tsConfig": "apps/doc-viewer/tsconfig.app.json", + "assets": [ + "apps/doc-viewer/src/favicon.ico", + "apps/doc-viewer/src/profile.json" + ], + "styles": [], + "scripts": [], + "webpackConfig": "apps/doc-viewer/webpack.config.js" + }, + "configurations": { + "development": {}, + "production": { + "fileReplacements": [ + { + "replace": "apps/doc-viewer/src/environments/environment.ts", + "with": "apps/doc-viewer/src/environments/environment.prod.ts" + } + ] + } + } + }, + "serve": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/webpack:dev-server", + "defaultConfiguration": "development", + "options": { + "buildTarget": "doc-viewer:build", + "hmr": true, + "baseHref": "/" + }, + "configurations": { + "development": { + "buildTarget": "doc-viewer:build:development", + "port": 7003 + }, + "production": { + "buildTarget": "doc-viewer:build:production" + } + } + } + }, + "tags": [], + "root": "apps/doc-viewer", + "files": [ + { + "file": "apps/doc-viewer/project.json", + "hash": "2e5455cc30c5e97d84190cef34640453f3de965b" + }, + { + "file": "apps/doc-viewer/src/app/App.tsx", + "hash": "5f5092eb2443f66975d56d6e06a0752d9ca23139", + "deps": [ + "npm:react", + "npm:react-markdown", + "npm:remark-gfm" + ] + }, + { + "file": "apps/doc-viewer/src/app/docviewer.ts", + "hash": "d6fed6e490f33c19829b8ed0813f37461191de2f", + "deps": [ + "npm:@remixproject/plugin", + "npm:@remixproject/plugin-webview", + "npm:events" + ] + }, + { + "file": "apps/doc-viewer/src/favicon.ico", + "hash": "bcd5dfd67cd0361b78123e95c2dd96031f27f743" + }, + { + "file": "apps/doc-viewer/src/index.html", + "hash": "ab3b67eef142acab2c2983c45b99a29161e382fc" + }, + { + "file": "apps/doc-viewer/src/main.tsx", + "hash": "b8ec0b96a0b617e4f119d9720084f05b4b0eb7bc", + "deps": [ + "npm:react", + "npm:react-dom" + ] + }, + { + "file": "apps/doc-viewer/src/profile.json", + "hash": "64cf3dc5a53e34883e05b031110633e34cef216a" + }, + { + "file": "apps/doc-viewer/tsconfig.app.json", + "hash": "af84f21cfc8066d0302f5772b7c157e81d418617" + }, + { + "file": "apps/doc-viewer/tsconfig.json", + "hash": "5aab5e79111d8f97470be7e69da9fdb3ddb5819f" + }, + { + "file": "apps/doc-viewer/webpack.config.js", + "hash": "b21898ae8793ec9d489d8bfb3d3eacfd80e5b55f", + "deps": [ + "npm:@nrwl/webpack", + "npm:@nrwl/react", + "npm:webpack", + "npm:terser-webpack-plugin", + "npm:css-minimizer-webpack-plugin" + ] + } + ] + } + }, + "etherscan": { + "name": "etherscan", + "type": "app", + "data": { + "name": "etherscan", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "apps/etherscan/src", + "projectType": "application", + "targets": { + "build": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/webpack:webpack", + "outputs": [ + "{options.outputPath}" + ], + "defaultConfiguration": "development", + "options": { + "compiler": "babel", + "outputPath": "dist/apps/etherscan", + "index": "apps/etherscan/src/index.html", + "baseHref": "./", + "main": "apps/etherscan/src/main.tsx", + "polyfills": "apps/etherscan/src/polyfills.ts", + "tsConfig": "apps/etherscan/tsconfig.app.json", + "assets": [ + "apps/etherscan/src/favicon.ico", + "apps/etherscan/src/assets", + "apps/etherscan/src/profile.json" + ], + "styles": [ + "apps/etherscan/src/styles.css" + ], + "scripts": [], + "webpackConfig": "apps/etherscan/webpack.config.js" + }, + "configurations": { + "development": {}, + "production": { + "fileReplacements": [ + { + "replace": "apps/etherscan/src/environments/environment.ts", + "with": "apps/etherscan/src/environments/environment.prod.ts" + } + ] + } + } + }, + "serve": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/webpack:dev-server", + "defaultConfiguration": "development", + "options": { + "buildTarget": "etherscan:build", + "hmr": true, + "baseHref": "/" + }, + "configurations": { + "development": { + "buildTarget": "etherscan:build:development", + "port": 5003 + }, + "production": { + "buildTarget": "etherscan:build:production" + } + } + } + }, + "tags": [], + "root": "apps/etherscan", + "implicitDependencies": [], + "files": [ + { + "file": "apps/etherscan/.babelrc", + "hash": "e37036ce6686b3044e9c24bbf2c07e35119bc7f5" + }, + { + "file": "apps/etherscan/.browserslistrc", + "hash": "f1d12df4faa25ab7f0f03196105e957395f609af" + }, + { + "file": "apps/etherscan/.eslintrc.json", + "hash": "a92d0f887ac1dc9e913cb3e79f08f8c9645638fa" + }, + { + "file": "apps/etherscan/project.json", + "hash": "fe53c7f39eb4e5360535f6eabd84cebf3fee40d3" + }, + { + "file": "apps/etherscan/src/app/App.css", + "hash": "74a89ee342b06c6721786a78af2a2caff800b8d9" + }, + { + "file": "apps/etherscan/src/app/app.tsx", + "hash": "972413f7f2b7388928fefc1748881764cf877acd", + "deps": [ + "npm:react", + "npm:@remixproject/plugin-api", + "npm:@remixproject/plugin-webview" + ] + }, + { + "file": "apps/etherscan/src/app/AppContext.tsx", + "hash": "f121406a67948dea37c58ad7fa73fde611a296c4", + "deps": [ + "npm:react", + "npm:@remixproject/plugin" + ] + }, + { + "file": "apps/etherscan/src/app/components/HeaderWithSettings.tsx", + "hash": "8f302dd59667c6f98619b346ebbec54bc88e259c", + "deps": [ + "npm:react", + "npm:react-router-dom" + ] + }, + { + "file": "apps/etherscan/src/app/components/index.ts", + "hash": "c52e3712f0c78d5bc3fc03d8554717946ddc9f9e" + }, + { + "file": "apps/etherscan/src/app/components/SubmitButton.tsx", + "hash": "080fafc7089688e925675f88c9a0429e2cf22f62", + "deps": [ + "npm:react" + ] + }, + { + "file": "apps/etherscan/src/app/hooks/useLocalStorage.tsx", + "hash": "85d30c849de35475b13a7c0d0eaa55cd7cbb7a5c", + "deps": [ + "npm:react" + ] + }, + { + "file": "apps/etherscan/src/app/layouts/Default.tsx", + "hash": "0ca0dfc472dc1fe0b6952bfb46e07a403be054dd", + "deps": [ + "npm:react" + ] + }, + { + "file": "apps/etherscan/src/app/layouts/index.ts", + "hash": "9b8e6166d59b36501e9df5cf4677ce71d5f8546e" + }, + { + "file": "apps/etherscan/src/app/RemixPlugin.tsx", + "hash": "59967c5e41aa14409d74b43985ca56ce1bea89fc", + "deps": [ + "npm:@remixproject/plugin" + ] + }, + { + "file": "apps/etherscan/src/app/routes.tsx", + "hash": "426583ed531ce20546f2f4e2daa4bc883edf1b43", + "deps": [ + "npm:react", + "npm:react-router-dom" + ] + }, + { + "file": "apps/etherscan/src/app/types/index.ts", + "hash": "1a8733d6ff06c5f333bda9958250490a8ec5e7d9" + }, + { + "file": "apps/etherscan/src/app/types/Receipt.ts", + "hash": "2dd501651dd6416f15b742c8b2abe15fd934436d" + }, + { + "file": "apps/etherscan/src/app/types/ThemeType.ts", + "hash": "13b3710cd0d731554bbad09cc50efda2de02b198" + }, + { + "file": "apps/etherscan/src/app/utils/index.ts", + "hash": "b23d52e6e059d029e7e69a7b423c9774b6ae3f78" + }, + { + "file": "apps/etherscan/src/app/utils/networks.ts", + "hash": "009c81a0c3922523430d74354c859d2273df9025" + }, + { + "file": "apps/etherscan/src/app/utils/scripts.ts", + "hash": "0d204d8d557854ca74b25b7c974895e61ad91661" + }, + { + "file": "apps/etherscan/src/app/utils/utilities.ts", + "hash": "f0f92ab6f7c9d742f212f16af63449ead9bed81a", + "deps": [ + "npm:@remixproject/plugin", + "npm:axios" + ] + }, + { + "file": "apps/etherscan/src/app/utils/verify.ts", + "hash": "4dbc70f74368710b02a24053034e9a8ade7cf349", + "deps": [ + "npm:@remixproject/plugin-api", + "npm:axios", + "npm:@remixproject/plugin" + ] + }, + { + "file": "apps/etherscan/src/app/views/CaptureKeyView.tsx", + "hash": "9dfc647a1fedc98832ed770914bf472c4cd11320", + "deps": [ + "npm:react", + "npm:formik", + "npm:react-router-dom" + ] + }, + { + "file": "apps/etherscan/src/app/views/ErrorView.tsx", + "hash": "ae78f05254040c8634517dd8dff194ea3832da3b", + "deps": [ + "npm:react" + ] + }, + { + "file": "apps/etherscan/src/app/views/HomeView.tsx", + "hash": "e9db144bd18a75612c347039280c6f371187cdb0", + "deps": [ + "npm:react", + "npm:react-router-dom" + ] + }, + { + "file": "apps/etherscan/src/app/views/index.ts", + "hash": "c483228ece4a82c70c296660b75fbc82b102f6b8" + }, + { + "file": "apps/etherscan/src/app/views/ReceiptsView.tsx", + "hash": "0e6bf1c60bb8f43f25dca9b5096d1d864703b5a5", + "deps": [ + "npm:react", + "npm:formik", + "npm:react-router-dom", + "npm:react-bootstrap" + ] + }, + { + "file": "apps/etherscan/src/app/views/VerifyView.tsx", + "hash": "adfd0e6cfb026a1453c3996328a051d8ef7da27a", + "deps": [ + "npm:react", + "npm:web3", + "npm:@remixproject/plugin", + "npm:formik" + ] + }, + { + "file": "apps/etherscan/src/assets/.gitkeep", + "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" + }, + { + "file": "apps/etherscan/src/environments/environment.prod.ts", + "hash": "3612073bc31cd4c1f5d6cbb00318521e9a61bd8a" + }, + { + "file": "apps/etherscan/src/environments/environment.ts", + "hash": "d9370e924b51bc67ecddee7fc3b6693681a324b6" + }, + { + "file": "apps/etherscan/src/favicon.ico", + "hash": "317ebcb2336e0833a22dddf0ab287849f26fda57" + }, + { + "file": "apps/etherscan/src/index.html", + "hash": "b0ff6f578406670f55a5e00dcbc11247a093c545" + }, + { + "file": "apps/etherscan/src/main.tsx", + "hash": "5f17c9ab24d4a7edf960fca463cea8c44ee83993", + "deps": [ + "npm:react", + "npm:react-dom" + ] + }, + { + "file": "apps/etherscan/src/polyfills.ts", + "hash": "2adf3d05b6fcf479dd61c74f6bda95d9edb6ac6b", + "deps": [ + "npm:core-js", + "npm:regenerator-runtime" + ] + }, + { + "file": "apps/etherscan/src/profile.json", + "hash": "f1432cae8859a1fa9e176c62d146ea91ad3e15af" + }, + { + "file": "apps/etherscan/src/styles.css", + "hash": "90d4ee0072ce3fc41812f8af910219f9eea3c3de" + }, + { + "file": "apps/etherscan/tsconfig.app.json", + "hash": "252904bb73871a10597dc233e4a528e13c6af9c4" + }, + { + "file": "apps/etherscan/tsconfig.json", + "hash": "5aab5e79111d8f97470be7e69da9fdb3ddb5819f" + }, + { + "file": "apps/etherscan/webpack.config.js", + "hash": "5564f25b943bd516ca9e10710475ffc71de547f5", + "deps": [ + "npm:@nrwl/webpack", + "npm:webpack", + "npm:terser-webpack-plugin", + "npm:css-minimizer-webpack-plugin" + ] + } + ] + } + }, + "remix-ide": { + "name": "remix-ide", + "type": "app", + "data": { + "name": "remix-ide", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "apps/remix-ide/src", + "projectType": "application", + "implicitDependencies": [ + "doc-gen", + "doc-viewer", + "etherscan", + "vyper", + "solhint", + "walletconnect", + "circuit-compiler" + ], + "targets": { + "build": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/webpack:webpack", + "outputs": [ + "{options.outputPath}" + ], + "defaultConfiguration": "development", + "options": { + "compiler": "babel", + "outputPath": "dist/apps/remix-ide", + "index": "apps/remix-ide/src/index.html", + "baseHref": "/", + "main": "apps/remix-ide/src/index.tsx", + "polyfills": "apps/remix-ide/src/polyfills.ts", + "tsConfig": "apps/remix-ide/tsconfig.app.json", + "assets": [ + "apps/remix-ide/src/assets", + "apps/remix-ide/src/index.html", + "apps/remix-ide/src/404.html", + "apps/remix-ide/src/favicon.ico" + ], + "styles": [], + "scripts": [], + "webpackConfig": "apps/remix-ide/webpack.config.js" + }, + "configurations": { + "development": { + "optimization": false, + "generateIndexHtml": true, + "extractCss": false + }, + "production": { + "optimization": true, + "generateIndexHtml": true, + "extractCss": false, + "vendorChunk": false + }, + "desktop": { + "optimization": false, + "generateIndexHtml": true, + "extractCss": false, + "vendorChunk": false, + "baseHref": "./" + } + } + }, + "serve": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/webpack:dev-server", + "defaultConfiguration": "development", + "options": { + "buildTarget": "remix-ide:build" + }, + "configurations": { + "development": { + "buildTarget": "remix-ide:build:development", + "host": "0.0.0.0", + "port": 8080 + }, + "hot": { + "buildTarget": "remix-ide:build:development", + "port": 8080, + "hmr": true + }, + "production": { + "buildTarget": "remix-ide:build:production", + "port": 8080 + } + } + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "apps/remix-ide/**/*.{ts,tsx,js,jsx}" + ], + "eslintConfig": "apps/remix-ide/.eslintrc" + } + } + }, + "tags": [], + "root": "apps/remix-ide", + "files": [ + { + "file": "apps/remix-ide/_config.yml", + "hash": "c4192631f25b34d77a7f159aa0da0e3ae99c4ef4" + }, + { + "file": "apps/remix-ide/.babelrc", + "hash": "34aaeb326888e957ff8545259d58fe6ccdf97df8" + }, + { + "file": "apps/remix-ide/.dockerignore", + "hash": "3c3629e647f5ddf82548912e337bea9826b434af" + }, + { + "file": "apps/remix-ide/.env", + "hash": "c03ce830c2816cbad8ca6a968f4272c4d6e03292" + }, + { + "file": "apps/remix-ide/.eslintrc", + "hash": "3cafa9ce849c96c7942bd84cf9d0f5ba3d146ee2" + }, + { + "file": "apps/remix-ide/.gitignore", + "hash": "3e0c4b3136050a34d6ddf78d0ddae07d5601e225" + }, + { + "file": "apps/remix-ide/.npmignore", + "hash": "6ad8903c48e482c60123eb0abad3244286efda19" + }, + { + "file": "apps/remix-ide/.nvmrc", + "hash": "cc5875fabb8c2ee75a3d20f131a99c1a8a0df204" + }, + { + "file": "apps/remix-ide/.travis.yml", + "hash": "c8790fa6b88ab7decc844e935d573c1f3e1ea44f" + }, + { + "file": "apps/remix-ide/background.js", + "hash": "5bffa0da9e279dd971aa8151ddff3dcd4f8eb117" + }, + { + "file": "apps/remix-ide/build.yaml", + "hash": "599cbfd8f531cc7591d05d8906446e5cda8253fb" + }, + { + "file": "apps/remix-ide/ci/browser_test_plugin.sh", + "hash": "981cc45d4842c7e2fa00d32dec037dc7a48d278a" + }, + { + "file": "apps/remix-ide/ci/browser_test.sh", + "hash": "f02c550e7b4e136710a372333c3ac2ef9aa95d8e" + }, + { + "file": "apps/remix-ide/ci/browser_tests.sh", + "hash": "3070563e526497d41e440f1cd226e96b9915e086" + }, + { + "file": "apps/remix-ide/ci/build_and_publish_docker_images.sh", + "hash": "cc9247fbd9884eb48c0be510c8cf7f65b766da9b" + }, + { + "file": "apps/remix-ide/ci/copy_resources.sh", + "hash": "ab0bf9ccb2046e9ca35c1b64b1f9ba2614f4aaba" + }, + { + "file": "apps/remix-ide/ci/deploy_from_travis_remix-alpha.sh", + "hash": "c57de7fea57c4a68675409d6d6fffd1e29bd595c" + }, + { + "file": "apps/remix-ide/ci/deploy_from_travis_remix-beta.sh", + "hash": "134d9c2090c8692a76b34a81d002f58f9a846c2a" + }, + { + "file": "apps/remix-ide/ci/deploy_from_travis_remix-live.sh", + "hash": "1376cda6f028a9c0a758983b1be444a21fa82caa" + }, + { + "file": "apps/remix-ide/ci/deploy_key_remix-live-alpha.enc", + "hash": "db21779a32b98f06e94ee5e12652397cc39abbb2" + }, + { + "file": "apps/remix-ide/ci/deploy_key_remix-live.enc", + "hash": "03806ec8345d23df935f8d9f4691d2a8ba9e1540" + }, + { + "file": "apps/remix-ide/ci/download_e2e_assets.js", + "hash": "99a089174fcaf9b99bef939e5dafd6f6952c557d", + "deps": [ + "npm:child_process", + "npm:process" + ] + }, + { + "file": "apps/remix-ide/ci/downloadsoljson.sh", + "hash": "b99ed2d6b005cdaeffe543b9f95b0c1ccafee7f3" + }, + { + "file": "apps/remix-ide/ci/flaky.sh", + "hash": "15fefe4c3eae0f283031043bc3c491679e23cf39" + }, + { + "file": "apps/remix-ide/ci/lint-targets.js", + "hash": "44e71d8c0f1c93bd555835d1ab51c19c727d75bc", + "deps": [ + "npm:child_process", + "npm:process" + ] + }, + { + "file": "apps/remix-ide/ci/makeMockCompiler.js", + "hash": "601f99e8ac73092d2a9481d490c6e6d69fed4cac", + "deps": [ + "npm:solc" + ] + }, + { + "file": "apps/remix-ide/ci/publishIpfs", + "hash": "15d2dc9b66fce01465c132acd04e90d4bfc9c133" + }, + { + "file": "apps/remix-ide/ci/sauceDisconnect.js", + "hash": "a8069a669eddfc48c439bcd2ca1467aa671bb432" + }, + { + "file": "apps/remix-ide/ci/splice_tests.js", + "hash": "57cc1db31b59f3a1c28921c9289c6f8c35c7d7b8", + "deps": [ + "npm:child_process" + ] + }, + { + "file": "apps/remix-ide/contracts/app/ethereum/constitution.sol", + "hash": "8c2c9e0da9cdc3a3565f9f25a1ec0d67e914ca08" + }, + { + "file": "apps/remix-ide/contracts/app/solidity/mode.sol", + "hash": "6027379cfeb353f3d9084def0fd0880678808311" + }, + { + "file": "apps/remix-ide/contracts/ballot.sol", + "hash": "ffcc6c36096cc7f338d585bf2598922b1acc065a" + }, + { + "file": "apps/remix-ide/contracts/contract1.sol", + "hash": "4abefc018bb460313192d10fde0ed5a464aa7c43" + }, + { + "file": "apps/remix-ide/contracts/contract2.sol", + "hash": "00649b1047a763e298a52bba5d9d398e96b021b6" + }, + { + "file": "apps/remix-ide/contracts/folder1/contract_chrome_toremove.sol", + "hash": "04f9b2eb269760ee508574fffc5882a2a44a4f4f" + }, + { + "file": "apps/remix-ide/contracts/folder1/contract_chrome.sol", + "hash": "04f9b2eb269760ee508574fffc5882a2a44a4f4f" + }, + { + "file": "apps/remix-ide/contracts/folder1/contract_firefox_toremove.sol", + "hash": "04f9b2eb269760ee508574fffc5882a2a44a4f4f" + }, + { + "file": "apps/remix-ide/contracts/folder1/contract_firefox.sol", + "hash": "04f9b2eb269760ee508574fffc5882a2a44a4f4f" + }, + { + "file": "apps/remix-ide/contracts/folder1/contract1.sol", + "hash": "11122d3008de3f898e45207676a6280ac7041855" + }, + { + "file": "apps/remix-ide/contracts/folder1/contract2.sol", + "hash": "04f9b2eb269760ee508574fffc5882a2a44a4f4f" + }, + { + "file": "apps/remix-ide/contracts/foundry/cache/solidity-files-cache.json", + "hash": "593bdf2e362a180f9018df7c90172be5f3cbdfa8" + }, + { + "file": "apps/remix-ide/contracts/foundry/foundry.toml", + "hash": "e6810b2b5873d3b6f501ce45332456e6651eb096" + }, + { + "file": "apps/remix-ide/contracts/foundry/out/console.sol/console.json", + "hash": "86d84188032289ce20368292cd880293d4bea7b3" + }, + { + "file": "apps/remix-ide/contracts/foundry/out/console2.sol/console2.json", + "hash": "af841eebff91068e1a2ab0866511c17cd9ccab5e" + }, + { + "file": "apps/remix-ide/contracts/foundry/out/Counter.s.sol/CounterScript.json", + "hash": "07594bec5ed6be5ecc24b37802882eecce3533f0" + }, + { + "file": "apps/remix-ide/contracts/foundry/out/Counter.sol/Counter.json", + "hash": "11ebf2c45a2966fb3232adaf9cf0db410d03afe8" + }, + { + "file": "apps/remix-ide/contracts/foundry/out/Counter.t.sol/CounterTest.json", + "hash": "cc3221aba3d2576b6ff6f0dd7fa3c0c162231722" + }, + { + "file": "apps/remix-ide/contracts/foundry/out/Script.sol/Script.json", + "hash": "116330506d240c497466552bb9cef9e35c5c07eb" + }, + { + "file": "apps/remix-ide/contracts/foundry/out/test.sol/DSTest.json", + "hash": "69e9e36e065f1faccb5d571762d48de366e41700" + }, + { + "file": "apps/remix-ide/contracts/foundry/out/Test.sol/stdError.json", + "hash": "c22cd07d7ae5792f271eddfb983432b585147a0f" + }, + { + "file": "apps/remix-ide/contracts/foundry/out/Test.sol/stdMath.json", + "hash": "ca2f51f7248fccd7b09920d84f0133b953105925" + }, + { + "file": "apps/remix-ide/contracts/foundry/out/Test.sol/stdStorage.json", + "hash": "24619c1187961cdfe868a4e41a623dbaa7d0604c" + }, + { + "file": "apps/remix-ide/contracts/foundry/out/Test.sol/Test.json", + "hash": "7b709817abd869fa3aa9d65540d86a9cc7dedc81" + }, + { + "file": "apps/remix-ide/contracts/foundry/out/Vm.sol/Vm.json", + "hash": "52edca964e84fc970bab98e2a8f1d5cbc7d8a75e" + }, + { + "file": "apps/remix-ide/contracts/foundry/src/Counter.sol", + "hash": "8cc4c4279539322be916078e28ab198599a6afaf" + }, + { + "file": "apps/remix-ide/contracts/hardhat/artifacts/build-info/.gitgnore", + "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" + }, + { + "file": "apps/remix-ide/contracts/hardhat/artifacts/build-info/7839ba878952cc00ff316061405f273a.json", + "hash": "3426fd4a102a33275b32b98453462f91688e5ada" + }, + { + "file": "apps/remix-ide/contracts/hardhat/artifacts/contracts/Lock.sol/.gitgnore", + "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" + }, + { + "file": "apps/remix-ide/contracts/hardhat/artifacts/contracts/Lock.sol/Lock.dbg.json", + "hash": "73802d3f5567cfea2d0e6d195c2d3e359caba798" + }, + { + "file": "apps/remix-ide/contracts/hardhat/artifacts/contracts/Lock.sol/Lock.json", + "hash": "7af0ab9260170b08d58790ad7d675f1f8ca93f44" + }, + { + "file": "apps/remix-ide/contracts/hardhat/compiler_config.json", + "hash": "9026d3afa9d217fba42ed76cb94b9620ba1e3144" + }, + { + "file": "apps/remix-ide/contracts/hardhat/contracts/Lock.sol", + "hash": "9854ce163729e94fc5281654632cc927ce6a19d7" + }, + { + "file": "apps/remix-ide/contracts/hardhat/hardhat.config.js", + "hash": "1c8e8ae35676fb7de5b3e6d016f00d2327295aee" + }, + { + "file": "apps/remix-ide/contracts/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol", + "hash": "e7091fb2265a588ca7cd6557fdd92a4823f3f157" + }, + { + "file": "apps/remix-ide/contracts/node_modules/openzeppelin-solidity/contracts/sample.sol", + "hash": "73ecf078be70af01e2d13a9d4a28024ac2b01dca" + }, + { + "file": "apps/remix-ide/contracts/README.txt", + "hash": "4514bcc6773ccd5534388398c2953c0e59e1722b" + }, + { + "file": "apps/remix-ide/contracts/src/gmbh/company.sol", + "hash": "8f907ed55c75c07b88c5e4a4b6af82ec0f76726a" + }, + { + "file": "apps/remix-ide/contracts/src/gmbh/contract.sol", + "hash": "480c1f4f777417d8f60a45e0a484c339416f33e8" + }, + { + "file": "apps/remix-ide/contracts/src/gmbh/test.sol", + "hash": "e04a8bc178321b6cb0f6dc1af0020ffce8c8f865" + }, + { + "file": "apps/remix-ide/contracts/src/leasing.sol", + "hash": "ce3c278aa19abbf74d053b9b582348805eb7e17a" + }, + { + "file": "apps/remix-ide/contracts/src/ug/finance.sol", + "hash": "0f0dc02842b189472e225136eef5e2aa1f0a2a2a" + }, + { + "file": "apps/remix-ide/contracts/src/voting.sol", + "hash": "37a7a96905030038a1049e1e68fdf0b34fa7befa" + }, + { + "file": "apps/remix-ide/contracts/test/client/credit.sol", + "hash": "6a8bd4fad8915d447b96e2039313862a94bff760" + }, + { + "file": "apps/remix-ide/contracts/tests/Ballot_test.sol", + "hash": "452a5433b44c459e3dee7bf750f168643b9d426e" + }, + { + "file": "apps/remix-ide/contracts/truffle/build/contracts/.gitignore", + "hash": "8b137891791fe96927ad78e64b0aad7bded08bdc" + }, + { + "file": "apps/remix-ide/contracts/truffle/contracts/Migrations.sol", + "hash": "e29a358170e1da815ad61e0aefb24f648aa79c7f" + }, + { + "file": "apps/remix-ide/contracts/truffle/truffle-config.js", + "hash": "1c8e8ae35676fb7de5b3e6d016f00d2327295aee" + }, + { + "file": "apps/remix-ide/docker-compose.yaml", + "hash": "f006b5370006a698575dbd3b21e7461ab5d6c87c" + }, + { + "file": "apps/remix-ide/Dockerfile", + "hash": "7bae0b70ac907cbbef672544b722baf935add785" + }, + { + "file": "apps/remix-ide/Dockerfile.dev", + "hash": "f4d6ba57382e2b434650beffed6dc059682844b7" + }, + { + "file": "apps/remix-ide/LICENSE.md", + "hash": "f4f62e644debc59ab3f78f046f04801079d83246" + }, + { + "file": "apps/remix-ide/manifest.json", + "hash": "c00da5630ba59d4b6becb3c9de3a7d9d1c44673d" + }, + { + "file": "apps/remix-ide/meetings.md", + "hash": "ec606da328bc26420e701bd45744746a823de816" + }, + { + "file": "apps/remix-ide/nginx.conf", + "hash": "05d9c01c525d279e2294c8133475da25f44ea951" + }, + { + "file": "apps/remix-ide/project.json", + "hash": "395b9f4a6feef67b6e9d26168f061709cfdb5b48" + }, + { + "file": "apps/remix-ide/release-process.md", + "hash": "1d9c89a7fa57d579af77304868bd5fc188008614" + }, + { + "file": "apps/remix-ide/remix-screenshot-400h.png", + "hash": "74ac1e57dc377a5ec86b11583946b35e4200e420" + }, + { + "file": "apps/remix-ide/research-project.md", + "hash": "1d0a37db0e4fdbaaf1df32ff454bc65536546225" + }, + { + "file": "apps/remix-ide/src/404.html", + "hash": "28268a1ab10f32c81a05bce326f58e9ad13328c0" + }, + { + "file": "apps/remix-ide/src/app.js", + "hash": "67d089c466447232e9ef642c6cc9dfde07a777c4", + "deps": [ + "npm:is-electron" + ] + }, + { + "file": "apps/remix-ide/src/app/components/hidden-panel.tsx", + "hash": "88b095b6253415681e10a219edb528c4181440ef", + "deps": [ + "npm:react" + ] + }, + { + "file": "apps/remix-ide/src/app/components/main-panel.tsx", + "hash": "15311a6173ca0925040aca9710aba8e2bce413de", + "deps": [ + "npm:react" + ] + }, + { + "file": "apps/remix-ide/src/app/components/panel.ts", + "hash": "4dade1fbcafb7e750f842b0dd1809c41ce34ad97", + "deps": [ + "npm:react", + "npm:events", + "npm:@remixproject/engine-web" + ] + }, + { + "file": "apps/remix-ide/src/app/components/plugin-manager-component.js", + "hash": "d658915f1b179f80b48019feace0dbcf852f51dc", + "deps": [ + "npm:@remixproject/engine-web", + "npm:react" + ] + }, + { + "file": "apps/remix-ide/src/app/components/preload.tsx", + "hash": "dd3a6df59954fbc44f94311d13c0a5fbe72cf60c", + "deps": [ + "npm:react", + "npm:react-dom", + "npm:is-electron" + ] + }, + { + "file": "apps/remix-ide/src/app/components/side-panel.tsx", + "hash": "6ea715f420913fec86d6e0ba0fc86ef0921a3f41", + "deps": [ + "npm:react" + ] + }, + { + "file": "apps/remix-ide/src/app/components/styles/preload.css", + "hash": "031263b43fadae7c40716e9ccb01777da746c23d" + }, + { + "file": "apps/remix-ide/src/app/components/vertical-icons.tsx", + "hash": "f43a5505c3c325606a2d431a425474016284f7dc", + "deps": [ + "npm:react", + "npm:@remixproject/engine", + "npm:events", + "npm:@remixproject/plugin-utils" + ] + }, + { + "file": "apps/remix-ide/src/app/editor/editor.js", + "hash": "46bd19e1467a1748282f7659001a491433d79b49", + "deps": [ + "npm:react", + "npm:@remixproject/engine" + ] + }, + { + "file": "apps/remix-ide/src/app/files/dgitProvider.ts", + "hash": "aa14683a77ddae07922b3b167456885d3f3651be", + "deps": [ + "npm:@remixproject/engine", + "npm:isomorphic-git", + "npm:ipfs-http-client", + "npm:file-saver", + "npm:jszip", + "npm:form-data", + "npm:axios", + "npm:is-electron" + ] + }, + { + "file": "apps/remix-ide/src/app/files/electronProvider.ts", + "hash": "cb248679994c65fcd01f4b4de1441e5a05be09a9" + }, + { + "file": "apps/remix-ide/src/app/files/fileManager.ts", + "hash": "ceb39ef969f8e154f23fbc35fecb72d38559a7ee", + "deps": [ + "npm:file-saver", + "npm:jszip", + "npm:@remixproject/engine", + "npm:events", + "npm:is-electron" + ] + }, + { + "file": "apps/remix-ide/src/app/files/fileProvider.ts", + "hash": "6f82421f61a5838a11575bdfeea369d93a3d9fad", + "deps": [ + "npm:events" + ] + }, + { + "file": "apps/remix-ide/src/app/files/fileSystem.ts", + "hash": "80840f617ff8bf20315aa2941a23395c66f39ce0" + }, + { + "file": "apps/remix-ide/src/app/files/filesystems/fileSystemUtility.ts", + "hash": "9fc716b5c11c19ca3d0404dcc26ea87da02209cc", + "deps": [ + "npm:ethers", + "npm:jszip" + ] + }, + { + "file": "apps/remix-ide/src/app/files/filesystems/indexedDB.ts", + "hash": "aae0d6a5ebcbe355af3716f583dc6104d93aac7e", + "deps": [ + "npm:@isomorphic-git/lightning-fs" + ] + }, + { + "file": "apps/remix-ide/src/app/files/filesystems/localStorage.ts", + "hash": "d99c3ae296341b037c1513a61911cbf6742108a1" + }, + { + "file": "apps/remix-ide/src/app/files/foundry-handle.js", + "hash": "94efd7b04b097581dc03ebe73e810cedaf9b6f9b", + "deps": [ + "npm:@remixproject/engine-web" + ] + }, + { + "file": "apps/remix-ide/src/app/files/git-handle.js", + "hash": "596bf7701535147b1ea1a30ac9b2425feb239135", + "deps": [ + "npm:@remixproject/engine-web" + ] + }, + { + "file": "apps/remix-ide/src/app/files/hardhat-handle.js", + "hash": "84a2c1d28af10b674a77ef629383e63cacd87261", + "deps": [ + "npm:@remixproject/engine-web" + ] + }, + { + "file": "apps/remix-ide/src/app/files/remixDProvider.js", + "hash": "62171fdc5bb1352242b3b6121e3509f883f4b509" + }, + { + "file": "apps/remix-ide/src/app/files/slither-handle.js", + "hash": "27c7b3cbd8c9c907dd0a5de6356c92138dbcee34", + "deps": [ + "npm:@remixproject/engine-web" + ] + }, + { + "file": "apps/remix-ide/src/app/files/styles/file-explorer-styles.js", + "hash": "7ad4597f124e9bd7404bb14573bf33c25e5f3390", + "deps": [ + "npm:csjs-inject" + ] + }, + { + "file": "apps/remix-ide/src/app/files/truffle-handle.js", + "hash": "1111cba60de810c6a171581c8a55b0cfcbaa7178", + "deps": [ + "npm:@remixproject/engine-web" + ] + }, + { + "file": "apps/remix-ide/src/app/files/workspaceFileProvider.js", + "hash": "3b3981cb47c0acca753e9d87801de347128559e5", + "deps": [ + "npm:events" + ] + }, + { + "file": "apps/remix-ide/src/app/panels/file-panel.js", + "hash": "4aacb4053ad173838577b7a542c747349cad060b", + "deps": [ + "npm:@remixproject/engine-web", + "npm:react" + ] + }, + { + "file": "apps/remix-ide/src/app/panels/layout.ts", + "hash": "a152efc72ec2f618edcef451724fc517522e2cc2", + "deps": [ + "npm:@remixproject/engine", + "npm:@remixproject/plugin-utils", + "npm:events" + ] + }, + { + "file": "apps/remix-ide/src/app/panels/styles/terminal-styles.js", + "hash": "81664558563fca4ebf9e3e5a65f49da3f33802a4", + "deps": [ + "npm:csjs-inject" + ] + }, + { + "file": "apps/remix-ide/src/app/panels/tab-proxy.js", + "hash": "984efe75349644403e416a1d7748da911d052b84", + "deps": [ + "npm:react", + "npm:@remixproject/engine", + "npm:events" + ] + }, + { + "file": "apps/remix-ide/src/app/panels/terminal.js", + "hash": "e2cbd06fb0f72bb28f56beb663532edf2447636c", + "deps": [ + "npm:react", + "npm:@remixproject/engine", + "npm:is-electron" + ] + }, + { + "file": "apps/remix-ide/src/app/plugins/code-format.ts", + "hash": "04266c161539d990fa51b8c441b2d4106179b43a", + "deps": [ + "npm:@remixproject/engine", + "npm:prettier", + "npm:js-yaml", + "npm:toml", + "npm:@jsdevtools/file-path-filter" + ] + }, + { + "file": "apps/remix-ide/src/app/plugins/code-format/index.ts", + "hash": "32f785574cd36ad7c9113f0c171b3c0a883220ba", + "deps": [ + "npm:prettier-plugin-solidity" + ] + }, + { + "file": "apps/remix-ide/src/app/plugins/code-format/parser.ts", + "hash": "0fb913fed707415cb8e91f22e8282663d2234501", + "deps": [ + "npm:solidity-comments-extractor", + "npm:semver" + ] + }, + { + "file": "apps/remix-ide/src/app/plugins/config.ts", + "hash": "b4ff5fe30bd48f5788cf3929546a388f98ac1150", + "deps": [ + "npm:@remixproject/engine" + ] + }, + { + "file": "apps/remix-ide/src/app/plugins/contractFlattener.tsx", + "hash": "2c3640bcd9e245cf809412f592006bda6b7fac58", + "deps": [ + "npm:react", + "npm:@remixproject/engine", + "npm:@remixproject/plugin-api" + ] + }, + { + "file": "apps/remix-ide/src/app/plugins/electron/electronConfigPlugin.ts", + "hash": "3289b4a845e56223a2e85e11756a9a04229b5e33", + "deps": [ + "npm:@remixproject/engine-electron" + ] + }, + { + "file": "apps/remix-ide/src/app/plugins/electron/fsPlugin.ts", + "hash": "09da052127973af62b1b986d86dc49d5188c2d0b", + "deps": [ + "npm:@remixproject/engine-electron" + ] + }, + { + "file": "apps/remix-ide/src/app/plugins/electron/isoGitPlugin.ts", + "hash": "a0429da83e1fa590b121fb6327db74bad7e1cc68", + "deps": [ + "npm:@remixproject/engine-electron" + ] + }, + { + "file": "apps/remix-ide/src/app/plugins/electron/ripgrepPlugin.ts", + "hash": "18ee16cc63346baef848822239726c21b8eed9de", + "deps": [ + "npm:@remixproject/engine-electron" + ] + }, + { + "file": "apps/remix-ide/src/app/plugins/electron/templatesPlugin.ts", + "hash": "3d00a906fb2d7b0ee6fea2bd6f07324886a493be", + "deps": [ + "npm:@remixproject/engine-electron" + ] + }, + { + "file": "apps/remix-ide/src/app/plugins/electron/xtermPlugin.ts", + "hash": "c21a796af653d31d5cb786a36615255eb0d2a790", + "deps": [ + "npm:@remixproject/engine-electron" + ] + }, + { + "file": "apps/remix-ide/src/app/plugins/file-decorator.ts", + "hash": "34829b027bb08b690202fa1d8a6bfd5e79f242b6", + "deps": [ + "npm:deep-equal", + "npm:@remixproject/engine" + ] + }, + { + "file": "apps/remix-ide/src/app/plugins/notification.tsx", + "hash": "ca2b27437a102f8b1ff0c23b0d7ac4e2098bf27e", + "deps": [ + "npm:@remixproject/engine", + "npm:@remixproject/plugin-utils" + ] + }, + { + "file": "apps/remix-ide/src/app/plugins/openaigpt.tsx", + "hash": "e95babe00ac9a6f158aa97e1f409b127e21f1609", + "deps": [ + "npm:@remixproject/engine", + "npm:openai" + ] + }, + { + "file": "apps/remix-ide/src/app/plugins/parser/code-parser.tsx", + "hash": "c95cb9efca6c1bf83c63636f920dc654c0c68d08", + "deps": [ + "npm:@remixproject/engine", + "npm:react", + "npm:@remixproject/plugin-utils", + "npm:@remixproject/plugin-api" + ] + }, + { + "file": "apps/remix-ide/src/app/plugins/parser/services/antlr-worker.ts", + "hash": "c9e026d08519ecf2f5e00601834bcf0eda192dbf" + }, + { + "file": "apps/remix-ide/src/app/plugins/parser/services/code-parser-antlr-service.ts", + "hash": "4eba1ff469946d7b998b398a7b9006bd3b015955", + "deps": [ + "npm:url", + "npm:is-electron" + ] + }, + { + "file": "apps/remix-ide/src/app/plugins/parser/services/code-parser-compiler.ts", + "hash": "ecd8278ca39718ed7e84110ca23a44452ba0d52c", + "deps": [ + "npm:@remixproject/plugin-api" + ] + }, + { + "file": "apps/remix-ide/src/app/plugins/parser/services/code-parser-gas-service.ts", + "hash": "34e86290c104ed54a102b14328492c2c6906b20a", + "deps": [ + "npm:@remixproject/plugin-api" + ] + }, + { + "file": "apps/remix-ide/src/app/plugins/parser/services/code-parser-imports.ts", + "hash": "a559644045af398be20dc69feb11097e1f767481", + "deps": [ + "npm:is-electron" + ] + }, + { + "file": "apps/remix-ide/src/app/plugins/parser/types/antlr-types.ts", + "hash": "3e2675c43a1f1be9be7549ad9cca1ec12503f147" + }, + { + "file": "apps/remix-ide/src/app/plugins/parser/types/index.ts", + "hash": "1c252cc882dbb7cb0c9e235bab43b70dd45aaba6" + }, + { + "file": "apps/remix-ide/src/app/plugins/permission-handler-plugin.tsx", + "hash": "a77a210277a5e735e81e57e71bc53334d309dffb", + "deps": [ + "npm:react", + "npm:react-intl", + "npm:@remixproject/engine", + "npm:@remixproject/plugin-utils" + ] + }, + { + "file": "apps/remix-ide/src/app/plugins/remix-templates.ts", + "hash": "e7846fbf47626304bd206bad80b8adba0fe2f33b", + "deps": [ + "npm:@remixproject/engine" + ] + }, + { + "file": "apps/remix-ide/src/app/plugins/remixd-handle.tsx", + "hash": "eb3d9242e48ad00cfa708af5bcaae6abc006f55b", + "deps": [ + "npm:react", + "npm:is-electron", + "npm:@remixproject/engine-web", + "remixd", + "npm:@remixproject/engine" + ] + }, + { + "file": "apps/remix-ide/src/app/plugins/solidity-script.tsx", + "hash": "a19ca834dfdf4ef34cb4e7f144b172f59cee027b", + "deps": [ + "npm:react", + "npm:util", + "npm:@remixproject/engine", + "npm:web3-core" + ] + }, + { + "file": "apps/remix-ide/src/app/plugins/solidity-umlgen.tsx", + "hash": "ebbb7b9bb26192cfd92767359b43e63f88f40c0a", + "deps": [ + "npm:@remixproject/engine-web", + "npm:react", + "remix-ui", + "npm:sol2uml", + "npm:@aduh95/viz.js", + "npm:@remixproject/plugin-api" + ] + }, + { + "file": "apps/remix-ide/src/app/plugins/storage.ts", + "hash": "cd7ec1e1622f0302591692adc943e36cc9af8a9f", + "deps": [ + "npm:@remixproject/engine" + ] + }, + { + "file": "apps/remix-ide/src/app/providers/abstract-provider.tsx", + "hash": "a5185b6129fe8a05ad4fc1c5168144f6bdd53106", + "deps": [ + "npm:@remixproject/engine", + "npm:ethers" + ] + }, + { + "file": "apps/remix-ide/src/app/providers/custom-vm-fork-provider.tsx", + "hash": "d25208bbb92167e0f99b86feef9a64641b9c9944", + "deps": [ + "npm:react", + "npm:react-intl", + "npm:@ethereumjs/common" + ] + }, + { + "file": "apps/remix-ide/src/app/providers/external-http-provider.tsx", + "hash": "f21d75d08fa352dd390d163d8428614cd785a5b1", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "apps/remix-ide/src/app/providers/foundry-provider.tsx", + "hash": "47a3c2849fcfb0c669505cc5fef9c32242f6db86", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "apps/remix-ide/src/app/providers/ganache-provider.tsx", + "hash": "79bac4b8533bcaae31151573ba6420edd5244262", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "apps/remix-ide/src/app/providers/goerli-vm-fork-provider.tsx", + "hash": "21f7845d338dd076881b0417c58b9ea311ebec98" + }, + { + "file": "apps/remix-ide/src/app/providers/hardhat-provider.tsx", + "hash": "0dfe1c70af03a774ed6bf57b69a07232d294a7b9", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "apps/remix-ide/src/app/providers/injected-arbitrum-one-provider.tsx", + "hash": "890f31aa9cfc9abd887f1ca7ba1e47f17f244327" + }, + { + "file": "apps/remix-ide/src/app/providers/injected-custom-provider.tsx", + "hash": "90b81c72631f299a53f63798892bc6a5e4aa3e0f" + }, + { + "file": "apps/remix-ide/src/app/providers/injected-ephemery-testnet-provider.tsx", + "hash": "879c468b6a2562254dad90c6de84e0c1d1d424df", + "deps": [ + "npm:web3" + ] + }, + { + "file": "apps/remix-ide/src/app/providers/injected-optimism-provider.tsx", + "hash": "592ae28b1aeaca560f85149cd6de375c34a045da" + }, + { + "file": "apps/remix-ide/src/app/providers/injected-provider-default.tsx", + "hash": "7223d945f23b81a711610a8f6dedbdb23c9bc116" + }, + { + "file": "apps/remix-ide/src/app/providers/injected-provider-trustwallet.tsx", + "hash": "f7f139fed83d6f2af575dc549d4c2481c959c110" + }, + { + "file": "apps/remix-ide/src/app/providers/injected-provider.tsx", + "hash": "c1ac29256eb252e95037807b7e6b835504c1c042", + "deps": [ + "npm:react", + "npm:@remixproject/engine" + ] + }, + { + "file": "apps/remix-ide/src/app/providers/injected-skale-chaos-testnet-provider.tsx", + "hash": "81716a6aa8b7e2d12a3d847a3d5d729e67244c39" + }, + { + "file": "apps/remix-ide/src/app/providers/mainnet-vm-fork-provider.tsx", + "hash": "39747d9be18c5c326348045621e47a7cebf89c2c" + }, + { + "file": "apps/remix-ide/src/app/providers/sepolia-vm-fork-provider.tsx", + "hash": "03d7248adb5926007abcef1a1c859abf360609f8" + }, + { + "file": "apps/remix-ide/src/app/providers/vm-provider.tsx", + "hash": "aa1583f596e00dfe311de69efa8a729ac86189de", + "deps": [ + "npm:react", + "npm:@remixproject/engine" + ] + }, + { + "file": "apps/remix-ide/src/app/state/registry.ts", + "hash": "dc3655293f84a73369cec853bbb481c4a066b984" + }, + { + "file": "apps/remix-ide/src/app/tabs/analysis-tab.js", + "hash": "9a57c16516137e07a5a03c370ea6094108ceec5c", + "deps": [ + "npm:react", + "npm:@remixproject/engine-web", + "npm:events" + ] + }, + { + "file": "apps/remix-ide/src/app/tabs/compile-and-run.ts", + "hash": "2b3c16989670a7b03f6d5b0093b71666fba44891", + "deps": [ + "npm:@remixproject/engine" + ] + }, + { + "file": "apps/remix-ide/src/app/tabs/compile-tab.js", + "hash": "8531f2ead285ab530b830156596d1754cadbbb6c", + "deps": [ + "npm:react", + "npm:@remixproject/engine-web" + ] + }, + { + "file": "apps/remix-ide/src/app/tabs/debugger-tab.js", + "hash": "03bd672110506204a0c55c3cd2ca45b63271504f", + "deps": [ + "npm:web3", + "npm:@remixproject/engine-web", + "npm:react" + ] + }, + { + "file": "apps/remix-ide/src/app/tabs/locale-module.js", + "hash": "0487f94e96fd5c28cb138f67b1fc98eed37f9e21", + "deps": [ + "npm:@remixproject/engine", + "npm:events" + ] + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/en/debugger.json", + "hash": "dc46390eed479f1fd9e6a0883560746ab7ad06da" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/en/electron.json", + "hash": "cdf0a75a59985a6ef3e3a65ab6f301b104eef901" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/en/filePanel.json", + "hash": "0554b0ffa7cb4c01e22bb1cf426492d0cfb24110" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/en/home.json", + "hash": "dc76b8d54751ee02ffb3848f37d05334b8479321" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/en/index.js", + "hash": "59884f426a2567bd566710a60f8b17ed0002a366" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/en/panel.json", + "hash": "c9ad7d8d054521cb2893cceede2e357d00096c69" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/en/permissionHandler.json", + "hash": "d41fe6c68e4088120ae601d05fd46e6c6222eaad" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/en/pluginManager.json", + "hash": "de15f35427d67e1990c1b21482dc67458d5ec816" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/en/remixApp.json", + "hash": "a67504f413bfe517cfb8e42cd31add2331683078" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/en/remixUiTabs.json", + "hash": "1c60e9592d8572874f0e84d37e0010ee9c3f6d58" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/en/search.json", + "hash": "9eff38fb36e39711d946369ff6581c470d08314c" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/en/settings.json", + "hash": "2752f19f754a0cb956325eec31331907c3702851" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/en/solidity.json", + "hash": "ad83ce89bbce97adafde91989308bded72372a95" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/en/solidityUnitTesting.json", + "hash": "108883dfe9af7fe4a19f813b9a2589805d5266ad" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/en/solUmlGen.json", + "hash": "5816659c8b4e21f8c9f4db51381792408132c400" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/en/terminal.json", + "hash": "64a2ac2cabfc807d36d1f54aa506492cc0b44284" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/en/udapp.json", + "hash": "d2e2af9193d526fe25d60fea3e118551a824806c" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/es/debugger.json", + "hash": "2a7d40f1dac12cb701faf7de7129285922b4bc6a" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/es/filePanel.json", + "hash": "ab7222713f56196cc1d3f9c995dac613dd556eec" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/es/home.json", + "hash": "802d22bef43c6d5fa51ee905261c7879c927d888" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/es/index.js", + "hash": "ded9c45b14f3b25d4f11b5ccbc36d9270b5b6bb0" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/es/panel.json", + "hash": "070dbbd57f6c4aa97d0475f98ec9593581eb6e78" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/es/permissionHandler.json", + "hash": "d41fe6c68e4088120ae601d05fd46e6c6222eaad" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/es/pluginManager.json", + "hash": "01287713d614eab817546bb36d36913d160adc78" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/es/remixApp.json", + "hash": "a67504f413bfe517cfb8e42cd31add2331683078" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/es/remixUiTabs.json", + "hash": "1c60e9592d8572874f0e84d37e0010ee9c3f6d58" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/es/search.json", + "hash": "5bb29ab8d2a6ccaa425bbc60a17b5d83f8502304" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/es/settings.json", + "hash": "58af512c35c72eb09da09f8c8e147ea09c86517e" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/es/solidity.json", + "hash": "947bfeae9472138740780dad432fc53e6422f4c2" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/es/solidityUnitTesting.json", + "hash": "f1080804b69a4c6500e6886a4c6e531f15c2b605" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/es/solUmlGen.json", + "hash": "5816659c8b4e21f8c9f4db51381792408132c400" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/es/terminal.json", + "hash": "a175436686099324321a9cf33d8fbdb052c30270" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/es/udapp.json", + "hash": "48090ab63188a661e0f9c81879fd3d5d11925460" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/fr/debugger.json", + "hash": "4785d65fced831292df36f8aed60b23a396baae7" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/fr/filePanel.json", + "hash": "ab7222713f56196cc1d3f9c995dac613dd556eec" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/fr/home.json", + "hash": "802d22bef43c6d5fa51ee905261c7879c927d888" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/fr/index.js", + "hash": "ded9c45b14f3b25d4f11b5ccbc36d9270b5b6bb0" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/fr/panel.json", + "hash": "070dbbd57f6c4aa97d0475f98ec9593581eb6e78" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/fr/permissionHandler.json", + "hash": "d41fe6c68e4088120ae601d05fd46e6c6222eaad" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/fr/pluginManager.json", + "hash": "01287713d614eab817546bb36d36913d160adc78" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/fr/remixApp.json", + "hash": "a67504f413bfe517cfb8e42cd31add2331683078" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/fr/remixUiTabs.json", + "hash": "1c60e9592d8572874f0e84d37e0010ee9c3f6d58" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/fr/search.json", + "hash": "5bb29ab8d2a6ccaa425bbc60a17b5d83f8502304" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/fr/settings.json", + "hash": "58af512c35c72eb09da09f8c8e147ea09c86517e" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/fr/solidity.json", + "hash": "947bfeae9472138740780dad432fc53e6422f4c2" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/fr/solidityUnitTesting.json", + "hash": "f1080804b69a4c6500e6886a4c6e531f15c2b605" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/fr/solUmlGen.json", + "hash": "5816659c8b4e21f8c9f4db51381792408132c400" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/fr/terminal.json", + "hash": "a175436686099324321a9cf33d8fbdb052c30270" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/fr/udapp.json", + "hash": "48090ab63188a661e0f9c81879fd3d5d11925460" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/zh/debugger.json", + "hash": "4eb729b4cce79f66ad83c21dfe1a5ba1188ee63a" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/zh/filePanel.json", + "hash": "b48257cbdd8e1be228da82305fb4d2913dbe7eac" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/zh/home.json", + "hash": "17ad8bb36c508008cd8242ad1bd5952db76f0d84" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/zh/index.js", + "hash": "ded9c45b14f3b25d4f11b5ccbc36d9270b5b6bb0" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/zh/panel.json", + "hash": "e02928953d44fd547cd5bf30e72bdc4e6a4f8393" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/zh/permissionHandler.json", + "hash": "316206ef48f8d961446ff7e8e9a91497f4a60490" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/zh/pluginManager.json", + "hash": "423e11ce5ef5a767889c512ed713ef0cf07b8686" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/zh/remixApp.json", + "hash": "f573c11f1e9fa4d4384006edf047a56272ee8080" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/zh/remixUiTabs.json", + "hash": "f82e072207859c30bfb55ce2087e4c8071390745" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/zh/search.json", + "hash": "d0119bbe29d33e7c0d07c2e746a64bf7afb844fa" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/zh/settings.json", + "hash": "1373d86843ce5598da4766bcb9ef652fc9c834d3" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/zh/solidity.json", + "hash": "1ffe38907a2812c413bee2218428e902cac7019e" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/zh/solidityUnitTesting.json", + "hash": "e590e33e5d7f4993c980bd3f95e7104dd4133b99" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/zh/solUmlGen.json", + "hash": "aa58e68feca50a5b05cff7b94c36ae9b1cad7065" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/zh/terminal.json", + "hash": "87e1b4e9a4498f71a51c4d269cfb353535f5b859" + }, + { + "file": "apps/remix-ide/src/app/tabs/locales/zh/udapp.json", + "hash": "44dced4cb3c4e8c79f83d9ba9204d8b495db5677" + }, + { + "file": "apps/remix-ide/src/app/tabs/network-module.js", + "hash": "ea7a1c0c6ef800d80946517ade15e9e2df62529b", + "deps": [ + "npm:@remixproject/engine", + "npm:web3" + ] + }, + { + "file": "apps/remix-ide/src/app/tabs/runTab/model/recorder.js", + "hash": "f1d67391170c45b2516fa91a1f17588d22d02bd1", + "deps": [ + "npm:async", + "npm:@ethereumjs/util", + "npm:@remixproject/engine" + ] + }, + { + "file": "apps/remix-ide/src/app/tabs/search.tsx", + "hash": "780ce49bb74c916a0d841e30aaf04a261dc3f4cd", + "deps": [ + "npm:@remixproject/engine-web", + "npm:react" + ] + }, + { + "file": "apps/remix-ide/src/app/tabs/settings-tab.tsx", + "hash": "cfc168054afcf41062f736ea0cc8776cce2d8694", + "deps": [ + "npm:react", + "npm:@remixproject/engine-web" + ] + }, + { + "file": "apps/remix-ide/src/app/tabs/styles/analysis-tab-styles.js", + "hash": "a98d5b70afd17e0429ec9d5692e589176e17b09c", + "deps": [ + "npm:csjs-inject" + ] + }, + { + "file": "apps/remix-ide/src/app/tabs/styles/compile-tab-styles.js", + "hash": "35286b2f805cdd6aebe15ba52082b4659728bcc0", + "deps": [ + "npm:csjs-inject" + ] + }, + { + "file": "apps/remix-ide/src/app/tabs/styles/debugger-tab-styles.js", + "hash": "3fb7add424f4231c7eedc59c33b0f6810b6d0479", + "deps": [ + "npm:csjs-inject" + ] + }, + { + "file": "apps/remix-ide/src/app/tabs/styles/plugin-tab-styles.js", + "hash": "45c593ac46889841b74cc7f7271ce70071bdd27f", + "deps": [ + "npm:csjs-inject" + ] + }, + { + "file": "apps/remix-ide/src/app/tabs/styles/settings-tab-styles.js", + "hash": "90a4e470694a9c5059686fe417ca8534a31c823b", + "deps": [ + "npm:csjs-inject" + ] + }, + { + "file": "apps/remix-ide/src/app/tabs/styles/support-tab-styles.js", + "hash": "7debd88c3f06789803bf9a33808ff6c34a654a07", + "deps": [ + "npm:csjs-inject" + ] + }, + { + "file": "apps/remix-ide/src/app/tabs/styles/tabbed-menu-styles.js", + "hash": "f0adb87f557510edf2b309b635b0b5134af97ede", + "deps": [ + "npm:csjs-inject" + ] + }, + { + "file": "apps/remix-ide/src/app/tabs/styles/test-tab-styles.js", + "hash": "2f0ddab7705b5e95616dfa1af66c4bdbf9bbd38d", + "deps": [ + "npm:csjs-inject" + ] + }, + { + "file": "apps/remix-ide/src/app/tabs/test-tab.js", + "hash": "df16f475741be19b3f06e860f6d713429d2cafbd", + "deps": [ + "npm:react", + "npm:@remixproject/engine-web" + ] + }, + { + "file": "apps/remix-ide/src/app/tabs/theme-module.js", + "hash": "b748376ec29faa3a441708571bfb42c0f5271cc9", + "deps": [ + "npm:@remixproject/engine", + "npm:events", + "npm:is-electron" + ] + }, + { + "file": "apps/remix-ide/src/app/tabs/web3-provider.js", + "hash": "0158ff11f94b64742e18471e5e61411a2798cc8f", + "deps": [ + "npm:@remixproject/engine" + ] + }, + { + "file": "apps/remix-ide/src/app/udapp/index.js", + "hash": "8f1c93711f8d8942eb84008202a5298d946e33c5" + }, + { + "file": "apps/remix-ide/src/app/udapp/make-udapp.js", + "hash": "0b8b13433a28edaff2448af1f382c3e9bac319a8" + }, + { + "file": "apps/remix-ide/src/app/udapp/run-tab.js", + "hash": "cb6a47b835cb015240df6c208cfba127cae77644", + "deps": [ + "npm:react", + "npm:@remixproject/engine-web" + ] + }, + { + "file": "apps/remix-ide/src/app/ui/landing-page/landing-page.js", + "hash": "077d6507f3664e1d2d6b0e71b20a588f89b90049", + "deps": [ + "npm:react", + "npm:@remixproject/engine-web" + ] + }, + { + "file": "apps/remix-ide/src/app/ui/styles-guide/styleGuideClean.js", + "hash": "19ab6ca25441e595c16775b7e164421dc0ce74d4" + }, + { + "file": "apps/remix-ide/src/app/ui/styles/auto-complete-popup-styles.js", + "hash": "114cbce501c22a2a58db1464ffc9750bae625e08", + "deps": [ + "npm:csjs-inject" + ] + }, + { + "file": "apps/remix-ide/src/app/ui/styles/dropdown-styles.js", + "hash": "6868788b3567ab346ca02b537500ac539dc21b01", + "deps": [ + "npm:csjs-inject" + ] + }, + { + "file": "apps/remix-ide/src/app/ui/styles/modal-dialog-custom-styles.js", + "hash": "6fb0055f2fb5dbef2745b477c96670d8e2caaca2", + "deps": [ + "npm:csjs-inject" + ] + }, + { + "file": "apps/remix-ide/src/app/ui/styles/modaldialog-styles.js", + "hash": "e3468aaf037397927aa55738aa5b671b274e12b1", + "deps": [ + "npm:csjs-inject" + ] + }, + { + "file": "apps/remix-ide/src/app/ui/styles/tooltip-styles.js", + "hash": "da1bcdd90454be343d5ee435a67a51129bc94705", + "deps": [ + "npm:csjs-inject" + ] + }, + { + "file": "apps/remix-ide/src/assets/audio/remiGuitar-single-power-chord-A-minor.mp3", + "hash": "6deea95085ac1877899f19438990a1e3bc29fde8" + }, + { + "file": "apps/remix-ide/src/assets/audio/remiGuitar-single-power-chord-A-minor.wav", + "hash": "f863ffd8a275e9d275e088a7c4c1599e7e430411" + }, + { + "file": "apps/remix-ide/src/assets/css/font-awesome.min.css", + "hash": "540440ce89f2a408aa699b65100e18f15e0f09ca" + }, + { + "file": "apps/remix-ide/src/assets/css/intro.js/2.7.0/introjs.min.css", + "hash": "4f508ed90c9f76efc93994ad8e5c04299b67dc94" + }, + { + "file": "apps/remix-ide/src/assets/css/intro.js/4.1.0/introjs.min.css", + "hash": "d8b1714797b5ce64ee363ef91d51e84eb89fbb2d" + }, + { + "file": "apps/remix-ide/src/assets/css/pygment_trac.css", + "hash": "c6a6452d249f902a80b0775bf01352cbca6f284b" + }, + { + "file": "apps/remix-ide/src/assets/css/themes/bootstrap-cerulean.min.css", + "hash": "3ed6161e1951ed4e4dfbf4977ea90761805a724b" + }, + { + "file": "apps/remix-ide/src/assets/css/themes/bootstrap-cyborg.min.css", + "hash": "136e53ff4248d8bae7f4c005b7bc4d2dc9cfccf8" + }, + { + "file": "apps/remix-ide/src/assets/css/themes/bootstrap-flatly.min.css", + "hash": "e9b14b99af534ccb9573d3d5f537811ab6927047" + }, + { + "file": "apps/remix-ide/src/assets/css/themes/bootstrap-spacelab.min.css", + "hash": "3129408286d5a23989f0a71ed966eb455569e1a0" + }, + { + "file": "apps/remix-ide/src/assets/css/themes/remix-black_undtds.css", + "hash": "5c16277d2ea9a5b713bee624477320d639f82399" + }, + { + "file": "apps/remix-ide/src/assets/css/themes/remix-candy_ikhg4m.css", + "hash": "73574f8f5fc2b66144d6ba1c83bfddc0cce32e0a" + }, + { + "file": "apps/remix-ide/src/assets/css/themes/remix-dark_tvx1s2.css", + "hash": "f512a127c8830002d4ad0aa143d9625e53784cbb" + }, + { + "file": "apps/remix-ide/src/assets/css/themes/remix-hacker_owl.css", + "hash": "0ef4225d57514e1a78918fe571ce23a857c298fa" + }, + { + "file": "apps/remix-ide/src/assets/css/themes/remix-light_powaqg.css", + "hash": "3217df2899a0acf615bdd7e061d7eb17a151fa74" + }, + { + "file": "apps/remix-ide/src/assets/css/themes/remix-midcentury_hrzph3.css", + "hash": "f64bc8d01bcc2c082d47d12b7999a9721c0e4d8f" + }, + { + "file": "apps/remix-ide/src/assets/css/themes/remix-unicorn.css", + "hash": "ebf508ff83ea1748e4042ec26d298c01a4930e2b" + }, + { + "file": "apps/remix-ide/src/assets/css/themes/remix-violet.css", + "hash": "275d0f0907ed9bf4582d2816aa1b11d6a32f5148" + }, + { + "file": "apps/remix-ide/src/assets/fonts/fontawesome-webfont.eot", + "hash": "e9f60ca953f93e35eab4108bd414bc02ddcf3928" + }, + { + "file": "apps/remix-ide/src/assets/fonts/fontawesome-webfont.svg", + "hash": "855c845e538b65548118279537a04eab2ec6ef0d" + }, + { + "file": "apps/remix-ide/src/assets/fonts/fontawesome-webfont.ttf", + "hash": "35acda2fa1196aad98c2adf4378a7611dd713aa3" + }, + { + "file": "apps/remix-ide/src/assets/fonts/fontawesome-webfont.woff", + "hash": "400014a4b06eee3d0c0d54402a47ab2601b2862b" + }, + { + "file": "apps/remix-ide/src/assets/fonts/fontawesome-webfont.woff2", + "hash": "4d13fc60404b91e398a37200c4a77b645cfd9586" + }, + { + "file": "apps/remix-ide/src/assets/fonts/FontAwesome.otf", + "hash": "401ec0f36e4f73b8efa40bd6f604fe80d286db70" + }, + { + "file": "apps/remix-ide/src/assets/img/bgRemi_small.webp", + "hash": "3423aa5bab536820125daada6129d1c69623858b" + }, + { + "file": "apps/remix-ide/src/assets/img/bgRemi.webp", + "hash": "80ee32e1deba8f095d0b4de549123281b2231844" + }, + { + "file": "apps/remix-ide/src/assets/img/cookbook.webp", + "hash": "e3535bbdca922bb39d76c184a50eb5641ad28f88" + }, + { + "file": "apps/remix-ide/src/assets/img/debuggerLogo.webp", + "hash": "4773d498e9eaae286cce0f2d2bedef9998596b57" + }, + { + "file": "apps/remix-ide/src/assets/img/deployAndRun.webp", + "hash": "c652f89ee215922980341fb64a8977e5e9996a8c" + }, + { + "file": "apps/remix-ide/src/assets/img/dgit.webp", + "hash": "75038b84d35cf54b0fe268077ef0e40c093b6f4f" + }, + { + "file": "apps/remix-ide/src/assets/img/favicon.ico", + "hash": "4f550708f2db2fdd6e319eb31625b2a65249b07a" + }, + { + "file": "apps/remix-ide/src/assets/img/fileManager.webp", + "hash": "185d3acc1abb936fa118a86c6c8fe6e1a506a99e" + }, + { + "file": "apps/remix-ide/src/assets/img/gasStation_50.png", + "hash": "67586093854531f693190b8a27449d9d50f7876b" + }, + { + "file": "apps/remix-ide/src/assets/img/guitarRemiCroped.webp", + "hash": "26e8957622c9e6a17468f1d5e0beea2dfea913f9" + }, + { + "file": "apps/remix-ide/src/assets/img/hexagon-remix-greengrey-texture.png", + "hash": "49717083ac6eb3a14ca175c53bb6128e8291864f" + }, + { + "file": "apps/remix-ide/src/assets/img/home.webp", + "hash": "6af3393ffde2d92c2e44648e349625b631d4ad2c" + }, + { + "file": "apps/remix-ide/src/assets/img/homeStickers.png", + "hash": "c481cec517d8b3597355cf7b7a7a9c128565b88b" + }, + { + "file": "apps/remix-ide/src/assets/img/icon.png", + "hash": "1d6bcd0352995329cc62c106867ff9b2c1fdf67f" + }, + { + "file": "apps/remix-ide/src/assets/img/ipfs.webp", + "hash": "9cdfa7380c503f4ccfed36563f44cef6c5f1b082" + }, + { + "file": "apps/remix-ide/src/assets/img/learnEthLogo.webp", + "hash": "e22a6c5f2e2c779d2376056c6f69d2a334278968" + }, + { + "file": "apps/remix-ide/src/assets/img/localPlugin.webp", + "hash": "c8481f48209a11d6092e0d6577d12f97ff2425e4" + }, + { + "file": "apps/remix-ide/src/assets/img/logoicon.svg", + "hash": "d064e0a2275431eab6dc334a1af734a5bf7adb8c" + }, + { + "file": "apps/remix-ide/src/assets/img/moreLogo.webp", + "hash": "a534e103a70afb6e781852a7a9bfb3be6be414b8" + }, + { + "file": "apps/remix-ide/src/assets/img/mythxLogo.webp", + "hash": "257f72dc598f2478d1ec2bb5153c65293d27fdd6" + }, + { + "file": "apps/remix-ide/src/assets/img/oneclickdapp.webp", + "hash": "ab464320cd0058f8ca73935a3c20c9615b370e6b" + }, + { + "file": "apps/remix-ide/src/assets/img/optimismLogo.webp", + "hash": "d7569da3f1f8dc53d16ff064e4c1c9986f3ec620" + }, + { + "file": "apps/remix-ide/src/assets/img/pipelineLogo.webp", + "hash": "20114c22d274374b380c5a6930bc7dc706c68df2" + }, + { + "file": "apps/remix-ide/src/assets/img/pluginManager.webp", + "hash": "4c4b316cca505a5780912227e6639a3c176e729a" + }, + { + "file": "apps/remix-ide/src/assets/img/remix_logo_light.webp", + "hash": "097a95e50e60ab2319d185bd580a63e589f31815" + }, + { + "file": "apps/remix-ide/src/assets/img/remix-logo-blue.png", + "hash": "cc79f5ece6ad259ef39bf25bea01b44c3dce0f0a" + }, + { + "file": "apps/remix-ide/src/assets/img/remixLogo.webp", + "hash": "90e38ad58637da1d389f1ace8eb61aa536cc93b4" + }, + { + "file": "apps/remix-ide/src/assets/img/remixRewardBetaTester_small.webp", + "hash": "9558dfa940ea9e2eec8d1998d6242795c92a9ca6" + }, + { + "file": "apps/remix-ide/src/assets/img/remixRewardBetaTester.webp", + "hash": "59a14a9ad2a85db7305b0c6269fb5ff56a5be16c" + }, + { + "file": "apps/remix-ide/src/assets/img/remixRewardUser_small.webp", + "hash": "d4571ce3330e540d7e9e7091fd8d9ca6c91f4b59" + }, + { + "file": "apps/remix-ide/src/assets/img/remixRewardUser.webp", + "hash": "4f63b3906988549280c689184def0c3af9b81bd7" + }, + { + "file": "apps/remix-ide/src/assets/img/search_icon.webp", + "hash": "93b26959314d26466576dde0c4684a399a466eeb" + }, + { + "file": "apps/remix-ide/src/assets/img/settings.webp", + "hash": "207745c4b627d7abd214e8cb838d7f96f576609a" + }, + { + "file": "apps/remix-ide/src/assets/img/sleepingRemiCroped.webp", + "hash": "4e01719ad2401aec0a3f2a901c3b4ee7b2719899" + }, + { + "file": "apps/remix-ide/src/assets/img/solhintLogo.webp", + "hash": "cc9ecb3bea44a9ca63e0af309c1ddc3df9d66201" + }, + { + "file": "apps/remix-ide/src/assets/img/solidity-logo.webp", + "hash": "c7aa37677721e454e817de375408c30aeb7ad14a" + }, + { + "file": "apps/remix-ide/src/assets/img/solidity.webp", + "hash": "7328dd2fd235cc7d8f366d54092488480ea6712b" + }, + { + "file": "apps/remix-ide/src/assets/img/solidityLogo.webp", + "hash": "9a9821e6b504676fdcbbb83e3a83dd553a518949" + }, + { + "file": "apps/remix-ide/src/assets/img/sourcifyNewLogo.webp", + "hash": "16d652b3d96f04107876825b05883044f2fa7d6c" + }, + { + "file": "apps/remix-ide/src/assets/img/StarkNetLogo.png", + "hash": "74218453e035c465671119ed835df4d9024ae3a3" + }, + { + "file": "apps/remix-ide/src/assets/img/starkNetLogo.webp", + "hash": "6a79f4026f1be2a77004ff19858fb0c8298dbea2" + }, + { + "file": "apps/remix-ide/src/assets/img/staticAnalysis.webp", + "hash": "1ef7294dfdd59d764aae96c4ebc42c19d611ebb1" + }, + { + "file": "apps/remix-ide/src/assets/img/swarm.webp", + "hash": "c11e1a648194a028e61c2462a335ae7ccb02a720" + }, + { + "file": "apps/remix-ide/src/assets/img/unitTesting.webp", + "hash": "29488e3f72b30c58a28f2dc3a40fcd971ca0e0ce" + }, + { + "file": "apps/remix-ide/src/assets/img/vyperLogo.webp", + "hash": "3f9f4c1afd49358b6a1953aa9f88b28eac914790" + }, + { + "file": "apps/remix-ide/src/assets/img/workshopLogo.webp", + "hash": "6717a42740b39ef9573e2ade15138740b59974f2" + }, + { + "file": "apps/remix-ide/src/assets/img/YouTubeLogo.webp", + "hash": "b87f4c86f09443ca011ffdc3b30663362ff0e58a" + }, + { + "file": "apps/remix-ide/src/assets/js/browserfs.min.js", + "hash": "a9eca25caff3ac9096d53779c5c1ebd25069106d" + }, + { + "file": "apps/remix-ide/src/assets/js/editor/darkTheme.js", + "hash": "f4059f60f703295fd8ebf10909da5cef668f7615" + }, + { + "file": "apps/remix-ide/src/assets/js/intro.min.js", + "hash": "b3c2bfa36f746e7bc405252f35f586dac34603b7" + }, + { + "file": "apps/remix-ide/src/assets/js/loader.js", + "hash": "8db5546da5ef8fdd9e9988f115f580a1117369cf" + }, + { + "file": "apps/remix-ide/src/assets/js/parser/antlr.js", + "hash": "3785806311e3a484e86b27ab372d26422f969dda" + }, + { + "file": "apps/remix-ide/src/assets/js/parser/antlr.js.map", + "hash": "a145305c3c477fbb665b9e88518ecd6eaed5f622" + }, + { + "file": "apps/remix-ide/src/assets/js/parser/Solidity-EZVQ6AE4.tokens", + "hash": "ffb4652613710d664b37e56944fd6b290e40431b" + }, + { + "file": "apps/remix-ide/src/blockchain/blockchain.tsx", + "hash": "c698fd9c40ca72b8023b98f3d79ed67cf7b2c8b8", + "deps": [ + "npm:react", + "npm:web3", + "npm:@remixproject/engine", + "npm:@ethereumjs/util", + "npm:events", + "npm:util" + ] + }, + { + "file": "apps/remix-ide/src/blockchain/execution-context.js", + "hash": "d730a130e3a0f479e1b842c9334b7ce73a8dfd4e", + "deps": [ + "npm:web3" + ] + }, + { + "file": "apps/remix-ide/src/blockchain/helper.ts", + "hash": "7df7546d20d2458ff88a68276fa7a17ef5bf597a" + }, + { + "file": "apps/remix-ide/src/blockchain/providers/injected.ts", + "hash": "bc6ab49e7f11c87183ba9dfa72c19eac432901cd", + "deps": [ + "npm:web3", + "npm:@ethereumjs/util" + ] + }, + { + "file": "apps/remix-ide/src/blockchain/providers/node.ts", + "hash": "65116b4923eb71e08b1aa500e4bfed3839eae47e", + "deps": [ + "npm:web3", + "npm:@ethereumjs/util", + "npm:web3-eth-personal" + ] + }, + { + "file": "apps/remix-ide/src/blockchain/providers/vm.ts", + "hash": "4234e42616a79ff6f151ecc0971d5a9557576900", + "deps": [ + "npm:web3", + "npm:@ethereumjs/util", + "npm:bn.js" + ] + }, + { + "file": "apps/remix-ide/src/blockchain/providers/worker-vm.ts", + "hash": "64a8d0255b94510bfc9c74c123adcacb7fe5e58b" + }, + { + "file": "apps/remix-ide/src/config.js", + "hash": "349e394d0753301a63ab34ccbb436ace9adbf758", + "deps": [ + "npm:events" + ] + }, + { + "file": "apps/remix-ide/src/favicon.ico", + "hash": "4f550708f2db2fdd6e319eb31625b2a65249b07a" + }, + { + "file": "apps/remix-ide/src/global/registry.js", + "hash": "80a033ab230a013c6fb1c82406ed31b65f3a71fc" + }, + { + "file": "apps/remix-ide/src/index.css", + "hash": "8396f022e705cdd0a29ad3d9e5032c45427ccaeb" + }, + { + "file": "apps/remix-ide/src/index.html", + "hash": "ee0f9f81a8befa2d89677faa0cd994294af87058" + }, + { + "file": "apps/remix-ide/src/index.tsx", + "hash": "94d143eb1e4abf51717e0f18718e051bb5d8063e", + "deps": [ + "npm:react", + "npm:react-dom" + ] + }, + { + "file": "apps/remix-ide/src/lib/events.js", + "hash": "b5c723e220ef56123df467987f29a7f7490bf1e3" + }, + { + "file": "apps/remix-ide/src/lib/helper.js", + "hash": "d332c7e9371f4ff48a534a12da006e57c85be7ad", + "deps": [ + "npm:async", + "npm:@ethereumjs/util" + ] + }, + { + "file": "apps/remix-ide/src/main.js", + "hash": "d4649695c0238e624caef59196f122be9ab49854" + }, + { + "file": "apps/remix-ide/src/polyfills.ts", + "hash": "53c485753e6e49fd2dac115c6e08dbfe99574861", + "deps": [ + "npm:core-js", + "npm:regenerator-runtime" + ] + }, + { + "file": "apps/remix-ide/src/registry.js", + "hash": "71ae9db6359bc22679717d8d5991a626b9fd0c26" + }, + { + "file": "apps/remix-ide/src/remixAppManager.js", + "hash": "c64a92be85655643745ef3e94df43a36cb9d0ea6", + "deps": [ + "npm:@remixproject/engine", + "npm:events", + "npm:@remixproject/engine-web", + "npm:is-electron" + ] + }, + { + "file": "apps/remix-ide/src/remixEngine.js", + "hash": "d7264b2c0ecab00b355f8ab16927781b390fc9be", + "deps": [ + "npm:@remixproject/engine", + "npm:events" + ] + }, + { + "file": "apps/remix-ide/src/walkthroughService.js", + "hash": "d0d466555f2d5c3590355ff3229bab3043625b49", + "deps": [ + "npm:@remixproject/engine", + "npm:intro.js" + ] + }, + { + "file": "apps/remix-ide/stats.json", + "hash": "9526fe781a52161fd3413be380c7220eb7a077cf" + }, + { + "file": "apps/remix-ide/team-best-practices.md", + "hash": "946078fe473d3008c07d599f7778aea1289bede6" + }, + { + "file": "apps/remix-ide/tsconfig.app.json", + "hash": "b45165141ee7776aac2bce0b6f12a7b02a779930" + }, + { + "file": "apps/remix-ide/tsconfig.json", + "hash": "c702a5fbd5106d3207803de872e2529e7e101cf1" + }, + { + "file": "apps/remix-ide/tsconfig.spec.json", + "hash": "4fa5ed9ba03d9e30526331b47a0dbad7775ef8c3" + }, + { + "file": "apps/remix-ide/webpack.config.js", + "hash": "a7cade0f2aa7fd357a06a9e01eb0f36c51be39ca", + "deps": [ + "npm:@nrwl/webpack", + "npm:@nrwl/react", + "npm:webpack", + "npm:copy-webpack-plugin", + "npm:terser-webpack-plugin", + "npm:css-minimizer-webpack-plugin", + "npm:axios", + "npm:child_process" + ] + } + ] + } + }, + "remix-lib": { + "name": "remix-lib", + "type": "lib", + "data": { + "name": "remix-lib", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/remix-lib/src", + "projectType": "library", + "targets": { + "test": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "nx:run-script", + "options": { + "script": "test" + }, + "configurations": {} + }, + "build": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/js:tsc", + "outputs": [ + "{options.outputPath}" + ], + "options": { + "outputPath": "dist/libs/remix-lib", + "main": "libs/remix-lib/src/index.ts", + "tsConfig": "libs/remix-lib/tsconfig.lib.json", + "updateBuildableProjectDepsInPackageJson": false, + "assets": [ + "libs/remix-lib/*.md" + ] + }, + "configurations": {} + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "libs/remix-lib/**/*.ts" + ] + } + } + }, + "tags": [], + "root": "libs/remix-lib", + "implicitDependencies": [], + "files": [ + { + "file": "libs/remix-lib/.eslintrc", + "hash": "f0a8bd5e8c4dffc8b13143dbc1b43b03120ce5b1" + }, + { + "file": "libs/remix-lib/.npmignore", + "hash": "b59f7e3a95a4d3f2b168d9c8e330be591fc49a6b" + }, + { + "file": "libs/remix-lib/package.json", + "hash": "afec35ad63cac130f215898247723a64a6a69293", + "deps": [ + "npm:@ethereumjs/util", + "npm:async", + "npm:ethers", + "npm:ethjs-util", + "npm:events", + "npm:from-exponential", + "npm:solc", + "npm:string-similarity", + "npm:web3", + "npm:@babel/core", + "npm:@babel/plugin-transform-object-assign", + "npm:@babel/preset-env", + "npm:@babel/preset-stage-0", + "npm:babel-eslint", + "npm:babelify", + "npm:tape" + ] + }, + { + "file": "libs/remix-lib/project.json", + "hash": "6b5d30f8217209722ae2467247d400f3bddbfc44" + }, + { + "file": "libs/remix-lib/README.md", + "hash": "d4e0968bf4cf4456ade532ea7d4ddcd53eb67b83" + }, + { + "file": "libs/remix-lib/src/eventManager.ts", + "hash": "3b940e526bc2ac077d079a8b91111fdd40939d49" + }, + { + "file": "libs/remix-lib/src/execution/eventsDecoder.ts", + "hash": "cdb794fd718fcfc51752e18359586d92b85a4cec", + "deps": [ + "npm:ethers" + ] + }, + { + "file": "libs/remix-lib/src/execution/forkAt.ts", + "hash": "fe7b1b0804d835df4e95128cc46b00294979fd74" + }, + { + "file": "libs/remix-lib/src/execution/logsManager.ts", + "hash": "a8ae3ec3c8e59fdf596bb6958544a52c13a22012", + "deps": [ + "npm:async", + "npm:@ethereumjs/util" + ] + }, + { + "file": "libs/remix-lib/src/execution/txExecution.ts", + "hash": "267eb4de47d3f513ef08c0bbc97e61fe2defd01b", + "deps": [ + "npm:ethers" + ] + }, + { + "file": "libs/remix-lib/src/execution/txFormat.ts", + "hash": "de6ec913573a30954fc1c5e5f47f30e514916e80", + "deps": [ + "npm:ethers", + "npm:async", + "npm:solc", + "npm:@ethereumjs/util", + "npm:from-exponential" + ] + }, + { + "file": "libs/remix-lib/src/execution/txHelper.ts", + "hash": "f3c78930b1287991577134c9ae81991011fc2938", + "deps": [ + "npm:ethers" + ] + }, + { + "file": "libs/remix-lib/src/execution/txListener.ts", + "hash": "d4251f029743000497374c5ce2f605834feaefca", + "deps": [ + "npm:ethers", + "npm:@ethereumjs/util" + ] + }, + { + "file": "libs/remix-lib/src/execution/txRunner.ts", + "hash": "19f643cc7d602bc62310633f4c78ed0035aafe58" + }, + { + "file": "libs/remix-lib/src/execution/txRunnerVM.ts", + "hash": "31364c045a7d1c3f4c160b1faef4df2e3b8fce6d", + "deps": [ + "npm:@ethereumjs/vm", + "npm:@ethereumjs/common", + "npm:@ethereumjs/tx", + "npm:@ethereumjs/block", + "npm:@ethereumjs/util" + ] + }, + { + "file": "libs/remix-lib/src/execution/txRunnerWeb3.ts", + "hash": "ab754c0feff6d42c8ab5b10f3e9a79bf1f37d1be", + "deps": [ + "npm:web3" + ] + }, + { + "file": "libs/remix-lib/src/execution/typeConversion.ts", + "hash": "46a25bff8afae7898e32b39683cc69b96dc5ae8a", + "deps": [ + "npm:bn.js", + "npm:@ethereumjs/util" + ] + }, + { + "file": "libs/remix-lib/src/hash.ts", + "hash": "624154be990da6ee8cc95410da7c0ea75a87bf75", + "deps": [ + "npm:ethereum-cryptography", + "npm:create-hash", + "npm:rlp", + "npm:@ethereumjs/util" + ] + }, + { + "file": "libs/remix-lib/src/helpers/compilerHelper.ts", + "hash": "1681520c95137622c8236681920840e741253116" + }, + { + "file": "libs/remix-lib/src/helpers/hhconsoleSigs.ts", + "hash": "89ef7afb566c9aa24376d0ca1dfd6a6335bee4e2" + }, + { + "file": "libs/remix-lib/src/helpers/txResultHelper.ts", + "hash": "a7a89163c6ede005e74e18e03966b6bdb6bb9a5d", + "deps": [ + "npm:@ethereumjs/util", + "npm:ethjs-util" + ] + }, + { + "file": "libs/remix-lib/src/helpers/uiHelper.ts", + "hash": "cab35f54a521800a2eda246a444302af7c6d26c5" + }, + { + "file": "libs/remix-lib/src/index.ts", + "hash": "d3f28e470a12f47c8937ca8238baca08faab3c0a" + }, + { + "file": "libs/remix-lib/src/init.ts", + "hash": "b59d10b4a44f7362e4ba7cd08cb044437df36b19", + "deps": [ + "npm:web3" + ] + }, + { + "file": "libs/remix-lib/src/query-params.ts", + "hash": "7e89b226ff5caac94bbafefbc4ac90b088913413" + }, + { + "file": "libs/remix-lib/src/storage.ts", + "hash": "02278cc47fea57e6813a2063713c624550c17ff1" + }, + { + "file": "libs/remix-lib/src/types/ICompilerApi.ts", + "hash": "168107e660bc63c4bf2681ae9bffd471115d4151" + }, + { + "file": "libs/remix-lib/src/util.ts", + "hash": "f28d6c80c0ab6e09f087609755241a0e8d29f9ad", + "deps": [ + "npm:@ethereumjs/util", + "npm:string-similarity" + ] + }, + { + "file": "libs/remix-lib/test/data/ERC721.ts", + "hash": "c5b5587572e83e5da7a4f51c2aef458c30ff749c" + }, + { + "file": "libs/remix-lib/test/data/sampleERC721.ts", + "hash": "6ebd02bedecfdc0c0f6d8ba1e98f2ca7250c26b9" + }, + { + "file": "libs/remix-lib/test/eventManager.ts", + "hash": "3caa7a2e0f0f1274fce52b1e880a947577fb7832", + "deps": [ + "npm:tape" + ] + }, + { + "file": "libs/remix-lib/test/init.ts", + "hash": "7f844e234f970bc1113939a80289173efeaf0988" + }, + { + "file": "libs/remix-lib/test/tests.ts", + "hash": "2921875905d6f27eb2a3ac21c7b1ac22d8385376" + }, + { + "file": "libs/remix-lib/test/txFormat.ts", + "hash": "4203d452e5d126a0f578d90203936e9af60aaf1e", + "deps": [ + "npm:tape", + "npm:solc" + ] + }, + { + "file": "libs/remix-lib/test/txHelper.ts", + "hash": "4d9a46426fadf968084428807293d33abc2c6fad", + "deps": [ + "npm:tape" + ] + }, + { + "file": "libs/remix-lib/test/txResultHelper.ts", + "hash": "cb972b68b7c7415d323362298e3f557aa06f3483", + "deps": [ + "npm:tape", + "npm:bn.js", + "npm:@ethereumjs/util" + ] + }, + { + "file": "libs/remix-lib/test/util.ts", + "hash": "61f31e0a9d80bd970a586d4952b7ffc9b7c422c0", + "deps": [ + "npm:tape" + ] + }, + { + "file": "libs/remix-lib/tsconfig.json", + "hash": "e12ffb0de06a64c6bf5531747e7394451a0c0960" + }, + { + "file": "libs/remix-lib/tsconfig.lib.json", + "hash": "7096e3c7209c8870cee5dd5dfdf0ba524c2a15d5" + } + ] + } + }, + "debugger": { + "name": "debugger", + "type": "app", + "data": { + "name": "debugger", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "apps/debugger/src", + "projectType": "application", + "implicitDependencies": [ + "remix-debug" + ], + "targets": { + "build": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/webpack:webpack", + "outputs": [ + "{options.outputPath}" + ], + "defaultConfiguration": "development", + "options": { + "compiler": "babel", + "outputPath": "dist/apps/debugger", + "index": "apps/debugger/src/index.html", + "baseHref": "/", + "main": "apps/debugger/src/main.tsx", + "polyfills": "apps/debugger/src/polyfills.ts", + "tsConfig": "apps/debugger/tsconfig.app.json", + "assets": [ + "apps/debugger/src/favicon.ico", + "apps/debugger/src/assets" + ], + "styles": [ + "apps/debugger/src/styles.css" + ], + "scripts": [], + "webpackConfig": "apps/debugger/webpack.config.js" + }, + "configurations": { + "development": {}, + "production": { + "fileReplacements": [ + { + "replace": "apps/debugger/src/environments/environment.ts", + "with": "apps/debugger/src/environments/environment.prod.ts" + } + ] + } + } + }, + "serve": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/webpack:dev-server", + "defaultConfiguration": "development", + "options": { + "buildTarget": "debugger:build", + "hmr": true + }, + "configurations": { + "development": { + "buildTarget": "debugger:build:development" + }, + "production": { + "buildTarget": "debugger:build:production" + } + } + } + }, + "tags": [], + "root": "apps/debugger", + "files": [ + { + "file": "apps/debugger/.babelrc", + "hash": "b1fc97545671f056cd1764f581888d976ec90b89" + }, + { + "file": "apps/debugger/.browserslistrc", + "hash": "f1d12df4faa25ab7f0f03196105e957395f609af" + }, + { + "file": "apps/debugger/project.json", + "hash": "3426f35d13a21e0baaf3f0b04955a48d3cc89700" + }, + { + "file": "apps/debugger/src/app/app.tsx", + "hash": "f6e07dc6859ac42be52a39e5b8a6177e3379f6d0", + "deps": [ + "npm:react" + ] + }, + { + "file": "apps/debugger/src/app/debugger.ts", + "hash": "008402467dd71c9168bab93abc56f205c36ac382", + "deps": [ + "npm:@remixproject/plugin", + "npm:@remixproject/plugin-webview" + ] + }, + { + "file": "apps/debugger/src/assets/.gitkeep", + "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" + }, + { + "file": "apps/debugger/src/environments/environment.prod.ts", + "hash": "3612073bc31cd4c1f5d6cbb00318521e9a61bd8a" + }, + { + "file": "apps/debugger/src/environments/environment.ts", + "hash": "d9370e924b51bc67ecddee7fc3b6693681a324b6" + }, + { + "file": "apps/debugger/src/favicon.ico", + "hash": "317ebcb2336e0833a22dddf0ab287849f26fda57" + }, + { + "file": "apps/debugger/src/index.html", + "hash": "848097620cbcd1e5c2c529e37ac3d3df780d3839" + }, + { + "file": "apps/debugger/src/main.tsx", + "hash": "be9ae3d572293e40ae210e240b5acc13641059fc", + "deps": [ + "npm:react", + "npm:react-dom" + ] + }, + { + "file": "apps/debugger/src/polyfills.ts", + "hash": "2adf3d05b6fcf479dd61c74f6bda95d9edb6ac6b", + "deps": [ + "npm:core-js", + "npm:regenerator-runtime" + ] + }, + { + "file": "apps/debugger/src/styles.css", + "hash": "90d4ee0072ce3fc41812f8af910219f9eea3c3de" + }, + { + "file": "apps/debugger/tsconfig.app.json", + "hash": "252904bb73871a10597dc233e4a528e13c6af9c4" + }, + { + "file": "apps/debugger/tsconfig.json", + "hash": "5aab5e79111d8f97470be7e69da9fdb3ddb5819f" + }, + { + "file": "apps/debugger/webpack.config.js", + "hash": "4bc648f1dbc2c5057041c2685f51a448a2c13492", + "deps": [ + "npm:@nrwl/webpack", + "npm:webpack", + "npm:terser-webpack-plugin", + "npm:css-minimizer-webpack-plugin" + ] + } + ] + } + }, + "remix-ui": { + "name": "remix-ui", + "type": "app", + "data": { + "name": "remix-ui", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/remix-ui/src", + "projectType": "application", + "implicitDependencies": [], + "targets": { + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "libs/remix-ui/**/*.{ts,tsx,js,jsx}" + ], + "eslintConfig": "libs/remix-ui/.eslintrc" + } + } + }, + "tags": [], + "root": "libs/remix-ui", + "files": [ + { + "file": "libs/remix-ui/.eslintrc", + "hash": "07db347ce537123e73c4463f590d389500d1b21d" + }, + { + "file": "libs/remix-ui/app/src/index.ts", + "hash": "2bf8054edb64e0653abe01d0a9eded617b640860" + }, + { + "file": "libs/remix-ui/app/src/lib/remix-app/actions/modals.ts", + "hash": "7e78c46cd580d2e688f51b3f6b57f1bf9c31d652" + }, + { + "file": "libs/remix-ui/app/src/lib/remix-app/components/dragbar/dragbar.css", + "hash": "44aa0598c132ad726367d99f3821aed6ab0e064b" + }, + { + "file": "libs/remix-ui/app/src/lib/remix-app/components/dragbar/dragbar.tsx", + "hash": "46b7f851c29074cf6fc7539349d4ce1217245e6a", + "deps": [ + "npm:react", + "npm:react-draggable" + ] + }, + { + "file": "libs/remix-ui/app/src/lib/remix-app/components/modals/dialogs.tsx", + "hash": "052b8661b3908f012364f42f6551e45831b296e9", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/app/src/lib/remix-app/components/modals/dialogViewPlugin.tsx", + "hash": "091795a900737369b58e1f43d3892383c78276da", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/app/src/lib/remix-app/components/modals/matomo.tsx", + "hash": "86777b5a6cca4cda196c815615e501b8ed0a2e7a", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/app/src/lib/remix-app/components/modals/modal-wrapper.tsx", + "hash": "07b974d3fe7301f3f47355420bb97a25f9a71d0e", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/app/src/lib/remix-app/components/modals/origin-warning.tsx", + "hash": "f36e5f09383afd9f32d48928e42a0baf50817b4a", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/app/src/lib/remix-app/components/splashscreen.tsx", + "hash": "4f013c4761521525eb1f318c672589ac8c7cf92f", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/app/src/lib/remix-app/context/context.tsx", + "hash": "1dae1787f17e9d894c961b4550bdbfc2540ac3e6", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/app/src/lib/remix-app/context/provider.tsx", + "hash": "c267e50e7c5f9777fd408dde376b1fd26dcbbc29", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/app/src/lib/remix-app/interface/index.ts", + "hash": "3ab21c7cc4c860944436da9ae57c7f53fecf4f4f" + }, + { + "file": "libs/remix-ui/app/src/lib/remix-app/reducer/modals.ts", + "hash": "4330d967a6719e52e61138a99255a727da638df8" + }, + { + "file": "libs/remix-ui/app/src/lib/remix-app/remix-app.tsx", + "hash": "578ab4a10067dda9db18548edaa743072e9122e4", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/app/src/lib/remix-app/state/modals.ts", + "hash": "3120766dac094b3b5c54580d26ce083a21f24917" + }, + { + "file": "libs/remix-ui/app/src/lib/remix-app/style/remix-app.css", + "hash": "70686d632fbd1658b6e81666da98dd55d4710dbd" + }, + { + "file": "libs/remix-ui/app/src/lib/remix-app/types/index.ts", + "hash": "6822dbe73e8a6f26e8c75c7e923c3cead74e2c36" + }, + { + "file": "libs/remix-ui/checkbox/src/index.ts", + "hash": "27b694c6bdd42ad412c2dc159fb51ccf17e15688" + }, + { + "file": "libs/remix-ui/checkbox/src/lib/remix-ui-checkbox.css", + "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" + }, + { + "file": "libs/remix-ui/checkbox/src/lib/remix-ui-checkbox.tsx", + "hash": "1722ffe42ecc524fa0892a63d021294e245a4ea6", + "deps": [ + "npm:react", + "npm:react-overlays" + ] + }, + { + "file": "libs/remix-ui/clipboard/README.md", + "hash": "25094197a8a96423c862dd99b2aae13a76acf28f" + }, + { + "file": "libs/remix-ui/clipboard/src/index.ts", + "hash": "4f3a26d2c8763535323b0c76b55b7755ebd640f3" + }, + { + "file": "libs/remix-ui/clipboard/src/lib/copy-to-clipboard/copy-to-clipboard.css", + "hash": "1e625dd256e85a29102adb116080ea42b2f73f01" + }, + { + "file": "libs/remix-ui/clipboard/src/lib/copy-to-clipboard/copy-to-clipboard.tsx", + "hash": "dd301671b6ecc3c99eb753de264fc9fdf2b95fb4", + "deps": [ + "npm:react", + "npm:copy-to-clipboard", + "npm:react-bootstrap" + ] + }, + { + "file": "libs/remix-ui/debugger-ui/src/hooks/extract-data.tsx", + "hash": "2021e9980c043d80af016d4e27aa7bb5b3d4f919", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/debugger-ui/src/index.ts", + "hash": "58ba5ab0f8fa26d562d9c84944c7d4bb09282bc1" + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/api/debugger-api.ts", + "hash": "0879471fe83fef93bda139f46f01dd615bbbad25", + "deps": [ + "npm:web3" + ] + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/button-navigator/button-navigator.css", + "hash": "c1b6cae8603bd01909eb4b3f8bdc833cad8ac310" + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/button-navigator/button-navigator.tsx", + "hash": "5609280eed506135368c024c15985bb2cb296601", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/debugger-ui.css", + "hash": "1a5e4926a92a650ea9dcda3e1ab4a80dd4d8262a" + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/debugger-ui.tsx", + "hash": "73333e01a51dbe1e7ca605be6a435ed8fa04f6ff", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/idebugger-api.ts", + "hash": "f204b523ed905698a1a82fa82c72879e8dbaf195" + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/slider/slider.tsx", + "hash": "517bbfe87a4b7be3fa5b3ac7064f148db8c04c5e", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/step-manager/step-manager.tsx", + "hash": "1fc85769cc0bcc3a257cc9c19f7533f151ccd9f3", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/tx-browser/tx-browser.css", + "hash": "3f50123101a0b51cdb4590d111c9931a21e14690" + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/tx-browser/tx-browser.tsx", + "hash": "2e07121534847f29e2685d80aca5c76267d4e5ba", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/assembly-items.tsx", + "hash": "96c194e93f2847ce0101efdc757b047646c7fc05", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/calldata-panel.tsx", + "hash": "a7b01c5cc51c889e160446a437396bb3111872b3", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/callstack-panel.tsx", + "hash": "1636fdf67dfca0b8f23fd0951bed2228e05e2030", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/code-list-view.tsx", + "hash": "da2b6b0b7d5a285e66f4702eb30a5a4625e3fdf7", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/dropdown-panel.tsx", + "hash": "e5afecc66d078b1d4281f89d14346f45910df60f", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/full-storages-changes.tsx", + "hash": "46ef22dbbd9698976d5a4c20194fc7372c8c7cb6", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/function-panel.tsx", + "hash": "6450536f5a5f22fb4ef7a5dc993b3ecd6d6d8470", + "deps": [ + "npm:react", + "npm:deep-equal" + ] + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/global-variables.tsx", + "hash": "9c017786151ba9479dc300d12981365a608dd9b1", + "deps": [ + "npm:react", + "npm:bn.js", + "npm:web3" + ] + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/memory-panel.tsx", + "hash": "b92df380ed6cc884f7774d39e34e41290acfefe8", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/solidity-locals.tsx", + "hash": "99aa7e8609314df9cdbcfbc5ed6f27ea30521105", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/solidity-state.tsx", + "hash": "3448c405559e8f3e335815654048edb17ee9788d", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/stack-panel.tsx", + "hash": "12dcf502cc2e10f23bbc0364b222817b133343f6", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/step-detail.tsx", + "hash": "e64bad100586b347246934c5c07d6ca99d881c14", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/storage-panel.tsx", + "hash": "7514ab633feae2e3656c15e557dbba1bf3a7c025", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/styles/assembly-items.css", + "hash": "44a5b020a7f2530b5fdf82d5d7d00f300a245cd8" + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/styles/dropdown-panel.css", + "hash": "39304d236e5683ac024736fd3de18930e3254da1" + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/vm-debugger-head.tsx", + "hash": "67ae5677fe547134d0f85e5a85dd66c635bfc5e6", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/vm-debugger.tsx", + "hash": "3231e18bcb32aa87ce09b70a9e7d592b19bae3e1", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/debugger-ui/src/reducers/assembly-items.ts", + "hash": "5c8c51d79c4e5e46df9141056aea3c972020430f", + "deps": [ + "npm:deep-equal" + ] + }, + { + "file": "libs/remix-ui/debugger-ui/src/reducers/calldata.ts", + "hash": "de5dcc1c0aadbff6551fef21b43f628e3963934d" + }, + { + "file": "libs/remix-ui/debugger-ui/src/types/index.ts", + "hash": "a319e354be148f74b62b85308fb5d66443c25697" + }, + { + "file": "libs/remix-ui/debugger-ui/src/utils/solidityTypeFormatter.ts", + "hash": "cc1e82f8c1db777e2130662862e033eec49e3467", + "deps": [ + "npm:bn.js" + ] + }, + { + "file": "libs/remix-ui/drag-n-drop/src/index.ts", + "hash": "d76ead226d8b45a957591c451b87cf6226e6d137" + }, + { + "file": "libs/remix-ui/drag-n-drop/src/lib/context/moveContext.ts", + "hash": "4eb31c87a7b12667e6c8ddcb16303268ef387d4d", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/drag-n-drop/src/lib/drag-n-drop.tsx", + "hash": "6427dbed124285ba7a95fad6a2e01c94d4270a1a", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/drag-n-drop/src/lib/types/index.ts", + "hash": "a995f40117c6e489d4427ab8a1cd32a56d8ea7e8", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/editor/src/index.ts", + "hash": "8c35c07c1222f30e4674990ad8f629021e824f1d" + }, + { + "file": "libs/remix-ui/editor/src/lib/actions/editor.ts", + "hash": "d71d731292b80ee1b223da355743e016734a059c" + }, + { + "file": "libs/remix-ui/editor/src/lib/hardhat-ethers-extension.ts", + "hash": "13cfaf006662e5f6ca07aa59626ed3fcfb105e67" + }, + { + "file": "libs/remix-ui/editor/src/lib/helpers/retrieveNodesAtPosition.ts", + "hash": "0d61f990bf9c1ae9e4c8c37fad578c0e58b45b9f" + }, + { + "file": "libs/remix-ui/editor/src/lib/providers/codeActionProvider.ts", + "hash": "9670282e9f101d87e4194d974f5df51b02ccd100", + "deps": [ + "npm:@monaco-editor/react" + ] + }, + { + "file": "libs/remix-ui/editor/src/lib/providers/completion/completionGlobals.ts", + "hash": "2d58e9c84bf5413d5fc0c336aec7d07ef469fa41" + }, + { + "file": "libs/remix-ui/editor/src/lib/providers/completion/contracts/contracts.txt", + "hash": "94615103e057309fb65f0907277cbf67e7daabaa" + }, + { + "file": "libs/remix-ui/editor/src/lib/providers/completionProvider.ts", + "hash": "d3757484131defb53e26b5b441cb70a85b3d1791", + "deps": [ + "npm:lodash" + ] + }, + { + "file": "libs/remix-ui/editor/src/lib/providers/definitionProvider.ts", + "hash": "247a215eab29bdfe1b0390e3b6e2f001d3463181", + "deps": [ + "npm:@monaco-editor/react" + ] + }, + { + "file": "libs/remix-ui/editor/src/lib/providers/highlightProvider.ts", + "hash": "b1f3305df684a9c3b2599e62b4fb36c7319fef65", + "deps": [ + "npm:@monaco-editor/react" + ] + }, + { + "file": "libs/remix-ui/editor/src/lib/providers/hoverProvider.ts", + "hash": "035eca6f4f427e2fddacb7c5351e953912b77da7", + "deps": [ + "npm:@monaco-editor/react" + ] + }, + { + "file": "libs/remix-ui/editor/src/lib/providers/quickfixes.ts", + "hash": "89958ed041531388e11bc23a2624822264753680" + }, + { + "file": "libs/remix-ui/editor/src/lib/providers/referenceProvider.ts", + "hash": "badee820e51c7da6f298d43968e88d7622072e5f", + "deps": [ + "npm:@monaco-editor/react" + ] + }, + { + "file": "libs/remix-ui/editor/src/lib/remix-plugin-types.ts", + "hash": "5ffa6696cf968a5e4a583a6314d8e0d083839726" + }, + { + "file": "libs/remix-ui/editor/src/lib/remix-ui-editor.css", + "hash": "9831e36ff6ab8ad4be8835a8688796dd4d2c22a4" + }, + { + "file": "libs/remix-ui/editor/src/lib/remix-ui-editor.tsx", + "hash": "652e6b3992487c1e93e2cb5b0c108ad3c4130ab3", + "deps": [ + "npm:react", + "npm:lodash", + "npm:@monaco-editor/react", + "npm:monaco-editor" + ] + }, + { + "file": "libs/remix-ui/editor/src/lib/syntaxes/cairo.ts", + "hash": "f6550946d31243f08d76d4216d71c4ca8c66e650" + }, + { + "file": "libs/remix-ui/editor/src/lib/syntaxes/circom.ts", + "hash": "6b09887c3a9ee2de0fabbe23d103963f0833acdb" + }, + { + "file": "libs/remix-ui/editor/src/lib/syntaxes/move.ts", + "hash": "9f184937a03c7bb33e90689b6d458f544070dd80" + }, + { + "file": "libs/remix-ui/editor/src/lib/syntaxes/solidity.ts", + "hash": "fda352456e6566645a31162dd13f6f590cf4dd96" + }, + { + "file": "libs/remix-ui/editor/src/lib/syntaxes/zokrates.ts", + "hash": "89a72ff361bd805fd8dc9db796dd5e02389729e3" + }, + { + "file": "libs/remix-ui/editor/src/lib/web-types.ts", + "hash": "dd70a43bc0af4014d3e7a4ca7f5deba0a513d2ab" + }, + { + "file": "libs/remix-ui/editor/src/types/monaco.ts", + "hash": "8ef34ee8ee30a49501db91fdb7655ccfdbfef3ea" + }, + { + "file": "libs/remix-ui/file-decorators/src/index.ts", + "hash": "a116c66cd38b12685172bfc7bb80fff02a3687b1" + }, + { + "file": "libs/remix-ui/file-decorators/src/lib/components/file-decoration-icon.tsx", + "hash": "b7506bc0c9c1d355b5cccf1b765da3e2e9068c5b", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-custom-icon.tsx", + "hash": "af36c9c49e26fce02d8f0024902a8a813a56e458", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-error-icon.tsx", + "hash": "1aeebf0cf035e5e6a3ebdfbabd1da8016b6cbef2", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-tooltip.tsx", + "hash": "7eaf905a84732b42a6f1b8fa70e193b8017b8d65", + "deps": [ + "npm:react", + "npm:react-bootstrap" + ] + }, + { + "file": "libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-warning-icon.tsx", + "hash": "d8a574b926b454828166281ad8623d31bc2fccb7", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/file-decorators/src/lib/helper/index.tsx", + "hash": "92a0a448c287f47270b4d60cb4b0ccc980a1edd9", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/file-decorators/src/lib/types/index.ts", + "hash": "bb84b6d26ce295e743861f8d6a6875d36388440b" + }, + { + "file": "libs/remix-ui/helper/src/index.ts", + "hash": "94dab78f43e4208d18ba5e9bcf7d46a16404ef54" + }, + { + "file": "libs/remix-ui/helper/src/lib/bleach.ts", + "hash": "44aa12904252e186bdf364a5bc817479214e14bb", + "deps": [ + "npm:he" + ] + }, + { + "file": "libs/remix-ui/helper/src/lib/components/custom-dropdown.tsx", + "hash": "2fa0ed37c8119350bc9d1cbe7770c156399fec4a", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/helper/src/lib/components/custom-tooltip.tsx", + "hash": "15e7cd58acc7c47b5aa1f12e691959a5e2cee89d", + "deps": [ + "npm:react", + "npm:react-bootstrap" + ] + }, + { + "file": "libs/remix-ui/helper/src/lib/components/PluginViewWrapper.tsx", + "hash": "8ac76e7e832a3a2eddf031cc24a82eb9829f77fc", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/helper/src/lib/components/web3Dialog.tsx", + "hash": "234bbe5a5f4512ae0e76d089b97850568ec1c1bd", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/helper/src/lib/helper-components.tsx", + "hash": "ea7d833d643464cc619bf5f24bf9058f0bf21047", + "deps": [ + "npm:@openzeppelin/upgrades-core", + "npm:react" + ] + }, + { + "file": "libs/remix-ui/helper/src/lib/remix-ui-helper.ts", + "hash": "21925ed8f84761710b12b87a44180e704dadb886", + "deps": [ + "npm:@ethereumjs/util" + ] + }, + { + "file": "libs/remix-ui/helper/src/types/customtooltip.ts", + "hash": "803f95c2ee09f93d6aa5d67999dbd4f82cc7e342", + "deps": [ + "npm:react-bootstrap" + ] + }, + { + "file": "libs/remix-ui/home-tab/src/index.ts", + "hash": "ab0129545e4dfcd6397befa9fd47fab8a885b1ca" + }, + { + "file": "libs/remix-ui/home-tab/src/lib/components/customNavButtons.tsx", + "hash": "f7c611a0f376d9823fd3fb7937835725a4a7d66d", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx", + "hash": "29aa86aad4edff8142b034594f53087af9c5db50", + "deps": [ + "npm:react", + "npm:react-intl", + "npm:react-multi-carousel" + ] + }, + { + "file": "libs/remix-ui/home-tab/src/lib/components/homeTabFeaturedPlugins.tsx", + "hash": "b05c5d1eecb917a5d83d373686300119c144f7b4", + "deps": [ + "npm:react", + "npm:react-intl", + "npm:react-multi-carousel" + ] + }, + { + "file": "libs/remix-ui/home-tab/src/lib/components/homeTabFile.tsx", + "hash": "3f187e57d5615fe56a477a780c563bc65d797729", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/home-tab/src/lib/components/homeTabFileElectron.tsx", + "hash": "1f67cfaff5a7d3b9502d5cc111e21df0f411c1b7", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/home-tab/src/lib/components/homeTabGetStarted.tsx", + "hash": "b57b2adbc883618c6b9e7cea07ad4d44878b5661", + "deps": [ + "npm:react", + "npm:react-intl", + "npm:react-multi-carousel", + "npm:is-electron" + ] + }, + { + "file": "libs/remix-ui/home-tab/src/lib/components/homeTabLearn.tsx", + "hash": "6bda55afb3f5a4c789ca0d2f6c8ab2eb9005f60f", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/home-tab/src/lib/components/homeTabScamAlert.tsx", + "hash": "9b75082b53f0eee1a06e918c2bbd08b88aefa959", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/home-tab/src/lib/components/homeTabTitle.tsx", + "hash": "96bc80b99b985c0ccea39b90d35fa7bb6a671e59", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/home-tab/src/lib/components/pluginButton.tsx", + "hash": "a0d22eb06179fe60672e75c1e18ed77565f65505", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/home-tab/src/lib/components/types/carouselTypes.ts", + "hash": "128815d9797c23918d26fa77d2f01b12a436dea1", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/home-tab/src/lib/components/workspaceTemplate.tsx", + "hash": "2a1d78da58ccd79a7b2a89efe79c01c5cbc6d3f1", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/home-tab/src/lib/remix-ui-home-tab.css", + "hash": "f448657ee2bcda7c909e8075543e18138c038bbd" + }, + { + "file": "libs/remix-ui/home-tab/src/lib/remix-ui-home-tab.tsx", + "hash": "0637ddfafb554a01f927baa769659a902b4e7f37", + "deps": [ + "npm:react", + "npm:is-electron" + ] + }, + { + "file": "libs/remix-ui/home-tab/src/lib/themeContext.tsx", + "hash": "fc67007dac5e1f63a4327e3a9cbf623a6b7bc273", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/locale-module/src/index.ts", + "hash": "fdda78b342be3d72631b288bc0eeaf6d4fbf7bb2" + }, + { + "file": "libs/remix-ui/locale-module/src/lib/remix-ui-locale-module.module.css", + "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" + }, + { + "file": "libs/remix-ui/locale-module/src/lib/remix-ui-locale-module.tsx", + "hash": "465803be9cea47900b82b5a8db4afa5e246b2a41", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/locale-module/types/locale-module.ts", + "hash": "824f68147cc42a4ac0bc69b07e17f9fb7eac7320", + "deps": [ + "npm:@remixproject/engine", + "npm:events" + ] + }, + { + "file": "libs/remix-ui/modal-dialog/src/index.ts", + "hash": "42e455230769bfe814c61b3bff31656062febcc5" + }, + { + "file": "libs/remix-ui/modal-dialog/src/lib/modal-dialog-custom.css", + "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" + }, + { + "file": "libs/remix-ui/modal-dialog/src/lib/modal-dialog-custom.tsx", + "hash": "060b4503ab993703adfc872dd9bd5f1acef5baaf", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/modal-dialog/src/lib/remix-ui-modal-dialog.css", + "hash": "62a0dd59874572dd3a4cb8b6f827342abd8d3d96" + }, + { + "file": "libs/remix-ui/modal-dialog/src/lib/remix-ui-modal-dialog.tsx", + "hash": "d3a531b41439beb8a27b315595526f2725e98fef", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/modal-dialog/src/lib/types/index.ts", + "hash": "0c96017bac8852f0b44a644bef22c3e4cc3f382b" + }, + { + "file": "libs/remix-ui/panel/src/index.ts", + "hash": "11b5ef7c6744bb27249900137b3cb65cbd00fddf" + }, + { + "file": "libs/remix-ui/panel/src/lib/dragbar/dragbar.css", + "hash": "1cfe29f8d1d58d8e49cc6f5bf24d8f0348c6ccc4" + }, + { + "file": "libs/remix-ui/panel/src/lib/dragbar/dragbar.tsx", + "hash": "d75445961dc30282c612a92a63b7e8f330b07e42", + "deps": [ + "npm:react", + "npm:react-draggable" + ] + }, + { + "file": "libs/remix-ui/panel/src/lib/main/main-panel.css", + "hash": "d23e7b58f9013b37f78fcc41b2001dea8295fc90" + }, + { + "file": "libs/remix-ui/panel/src/lib/main/main-panel.tsx", + "hash": "30dafed2be0c9d25ec908cc6a00d53e6f3877993", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/panel/src/lib/plugins/panel-header.tsx", + "hash": "4f9c358010a02083c197c7e4d99608da8e0b666b", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/panel/src/lib/plugins/panel-plugin.tsx", + "hash": "a44aedce0907d77a6a177b1f2321dded4ffc663d", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/panel/src/lib/plugins/panel.css", + "hash": "076cb4aafc1473fa19982418eecdb636baadbe56" + }, + { + "file": "libs/remix-ui/panel/src/lib/plugins/remix-ui-panel.tsx", + "hash": "2e91e4663016ffb6457cfdabd75a9f479d9b4ba5", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/panel/src/lib/types/index.ts", + "hash": "67b79c421413e0e965c2cb84478458fad4cf4056", + "deps": [ + "npm:@remixproject/plugin-utils" + ] + }, + { + "file": "libs/remix-ui/permission-handler/src/index.ts", + "hash": "dfa55cfc9d9053bb7b94938990f0e2bab4b0f71e" + }, + { + "file": "libs/remix-ui/permission-handler/src/interface/index.ts", + "hash": "74aab6b1b370aa99fd7934e43f90aef5b16ec5d7", + "deps": [ + "npm:@remixproject/plugin-utils" + ] + }, + { + "file": "libs/remix-ui/permission-handler/src/lib/permission-dialog.css", + "hash": "68e0d845b5f2bf5f9f04883f1834f2093a06a601" + }, + { + "file": "libs/remix-ui/permission-handler/src/lib/permission-dialog.tsx", + "hash": "b428cb25dad130024a42210fa8caa9b65f7eb9d8", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/plugin-manager/src/index.ts", + "hash": "de466b001dfc50651c1a2339f9a16259d971141e" + }, + { + "file": "libs/remix-ui/plugin-manager/src/lib/components/ActivePluginCard.tsx", + "hash": "a8fb287d01e0379ea2e3ef24b5d19bd6bc554502", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/plugin-manager/src/lib/components/ActivePluginCardContainer.tsx", + "hash": "624ba00c5490b4b1a2af98b19e75ecfb81299da5", + "deps": [ + "npm:@remixproject/plugin-utils", + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/plugin-manager/src/lib/components/InactivePluginCard.tsx", + "hash": "5223ff7cdb68e52409fc27412eaa71ff60be2f4a", + "deps": [ + "npm:@remixproject/plugin-utils", + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/plugin-manager/src/lib/components/InactivePluginCardContainer.tsx", + "hash": "a2b9b1d94a1f517748598e7301de569d6e5ff216", + "deps": [ + "npm:@remixproject/plugin-utils", + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/plugin-manager/src/lib/components/LocalPluginForm.tsx", + "hash": "9c7e4d60c2f1a9bb4fea606af027eb1e9c9da8fe", + "deps": [ + "npm:react", + "npm:@remixproject/engine-web", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/plugin-manager/src/lib/components/moduleHeading.tsx", + "hash": "81e13c7cb5870243f955f33648b00bf2e01b26a3", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/plugin-manager/src/lib/components/permissionsSettings.tsx", + "hash": "017f5dc13796f72decbd5cd8e8617d5a9ca0b4f1", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/plugin-manager/src/lib/components/rootView.tsx", + "hash": "05a16f64a9cb0991e3e7424af30c780514728f80", + "deps": [ + "npm:react", + "npm:react-intl", + "npm:@remixproject/plugin-utils" + ] + }, + { + "file": "libs/remix-ui/plugin-manager/src/lib/custom-hooks/useLocalStorage.ts", + "hash": "d4a90aa657b5c462680d5c4bbd2a1130bc9eeffc", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/plugin-manager/src/lib/reducers/pluginManagerReducer.ts", + "hash": "6b701652eeb44676036db97e6069b42b892c1879" + }, + { + "file": "libs/remix-ui/plugin-manager/src/lib/remix-ui-plugin-manager.css", + "hash": "65913d52aa3cee8160efca5713105f17165510f1" + }, + { + "file": "libs/remix-ui/plugin-manager/src/lib/remix-ui-plugin-manager.tsx", + "hash": "8b2a3905005122a637b47e40a215b6fc9a00113a", + "deps": [ + "npm:@remixproject/plugin-utils", + "npm:react" + ] + }, + { + "file": "libs/remix-ui/plugin-manager/src/types.d.ts", + "hash": "727e361b67362b16762f45ce494a431c4f7a004b", + "deps": [ + "npm:@remixproject/engine", + "npm:events", + "npm:@remixproject/plugin-utils", + "npm:@remixproject/engine-web" + ] + }, + { + "file": "libs/remix-ui/project.json", + "hash": "4358f14a7a957cb09b6f1f534667f123f67a022c" + }, + { + "file": "libs/remix-ui/publish-to-storage/src/index.ts", + "hash": "79e6f4dac6f9c99d840e65b0ad4b3522259e8d58" + }, + { + "file": "libs/remix-ui/publish-to-storage/src/lib/publish-to-storage.css", + "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" + }, + { + "file": "libs/remix-ui/publish-to-storage/src/lib/publish-to-storage.tsx", + "hash": "1d02e6ad938cb1b1e40c52e21a0a5cc438a293a4", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/publish-to-storage/src/lib/publishOnSwarm.tsx", + "hash": "f30ea57480a186164131e99d0acc385c8f269b66", + "deps": [ + "npm:@ethersphere/bee-js" + ] + }, + { + "file": "libs/remix-ui/publish-to-storage/src/lib/publishToIPFS.tsx", + "hash": "0280f66fcdbbdf44869097891bae27b948e68523", + "deps": [ + "npm:ipfs-http-client" + ] + }, + { + "file": "libs/remix-ui/publish-to-storage/src/lib/types/index.ts", + "hash": "68d15243908e6d0ea47f1fbe084e6b38894c9f81" + }, + { + "file": "libs/remix-ui/README.md", + "hash": "8dd1b4b48de4d70c4dea0d5f1f395c0ed7fbc49a" + }, + { + "file": "libs/remix-ui/renderer/src/index.ts", + "hash": "a891eab32e1a0e2617d4e951ffa3ccfcc85f06b4" + }, + { + "file": "libs/remix-ui/renderer/src/lib/renderer.css", + "hash": "28b6475f5748bba432f632d39ada043c185946f6" + }, + { + "file": "libs/remix-ui/renderer/src/lib/renderer.tsx", + "hash": "34b956ee7f5707c30adddddd30abbe369cf0859f", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/run-tab/src/index.ts", + "hash": "1964da6480d5f921b1a3632ecf200ec7b1fe7272" + }, + { + "file": "libs/remix-ui/run-tab/src/lib/actions/account.ts", + "hash": "060de8bf62ec73d177e492d2b640f6caa4bdd6f1" + }, + { + "file": "libs/remix-ui/run-tab/src/lib/actions/actions.ts", + "hash": "16f144560c58fdcb7260a60db218edd2b387b7b3" + }, + { + "file": "libs/remix-ui/run-tab/src/lib/actions/deploy.ts", + "hash": "3929f787b11289f4b2d5f0956c558ef0561c33f2", + "deps": [ + "npm:@openzeppelin/upgrades-core", + "npm:web3" + ] + }, + { + "file": "libs/remix-ui/run-tab/src/lib/actions/events.ts", + "hash": "8377f8920d48cd8ae368283e831d03283325a6d6", + "deps": [ + "npm:bn.js", + "npm:web3", + "npm:@remixproject/engine" + ] + }, + { + "file": "libs/remix-ui/run-tab/src/lib/actions/index.ts", + "hash": "411180b34a3469dc67effd78986e35ebd2b067e6", + "deps": [ + "npm:react", + "npm:@openzeppelin/upgrades-core" + ] + }, + { + "file": "libs/remix-ui/run-tab/src/lib/actions/payload.ts", + "hash": "c8bee7af2ed59b31b051476173a9425fe6e11e02" + }, + { + "file": "libs/remix-ui/run-tab/src/lib/actions/recorder.ts", + "hash": "2bf910650b576213b1e6c3567b0a801ca0d40700" + }, + { + "file": "libs/remix-ui/run-tab/src/lib/components/account.tsx", + "hash": "86e6132ca727f9c66c11009001a087b99146636c", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/run-tab/src/lib/components/contractDropdownUI.tsx", + "hash": "14714c4a4438d488bf8eb3b27584850c779bb8b8", + "deps": [ + "npm:react", + "npm:react-intl", + "npm:@ethereumjs/util", + "npm:process" + ] + }, + { + "file": "libs/remix-ui/run-tab/src/lib/components/contractGUI.tsx", + "hash": "c1a3e65c0dcec421d2ee82c2eb3e059ef2076d82", + "deps": [ + "npm:react", + "npm:react-intl", + "npm:react-bootstrap" + ] + }, + { + "file": "libs/remix-ui/run-tab/src/lib/components/deployButton.tsx", + "hash": "653c00c352af4a24b65c5ccc15a84600e27b6a4a", + "deps": [ + "npm:react", + "npm:react-intl", + "npm:react-bootstrap" + ] + }, + { + "file": "libs/remix-ui/run-tab/src/lib/components/deployInput.tsx", + "hash": "b18e8660c4d3a491ee37f0ace07e0b675abb5b0f", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/run-tab/src/lib/components/environment.tsx", + "hash": "9ef3082d432ed01e345d4788ce795e0c4a191fe7", + "deps": [ + "npm:react", + "npm:react-intl", + "npm:react-bootstrap" + ] + }, + { + "file": "libs/remix-ui/run-tab/src/lib/components/gasPrice.tsx", + "hash": "1f641af0a8e6f336b4943d30472c83fed4731026", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/run-tab/src/lib/components/instanceContainerUI.tsx", + "hash": "4296867c67184ac222a17d8117316507caeb8e1d", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/run-tab/src/lib/components/mainnet.tsx", + "hash": "8d7b8046f43003e6383fdd00dfe27930996ad1e6", + "deps": [ + "npm:react", + "npm:react-intl", + "npm:web3" + ] + }, + { + "file": "libs/remix-ui/run-tab/src/lib/components/multiDeployInput.tsx", + "hash": "a1bec3844fb94d1f4086b9cc629b48a40209b739", + "deps": [ + "npm:react-intl", + "npm:react" + ] + }, + { + "file": "libs/remix-ui/run-tab/src/lib/components/network.tsx", + "hash": "dcf5b3622714e0925c8eb374163b086afb463ac2", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/run-tab/src/lib/components/passphrase.tsx", + "hash": "2cd0d633e757b964618cd786ad838fa45e5db3dc", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/run-tab/src/lib/components/recorderCardUI.tsx", + "hash": "eb446e9f7f6a28c8c7790c023f6314ab608c2bd4", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/run-tab/src/lib/components/scenario.tsx", + "hash": "c53444722c260d9619997e0fd1717b55131038c1", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/run-tab/src/lib/components/settingsUI.tsx", + "hash": "e5856011a7b177d91e482216d2d0734d6b3e0582", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/run-tab/src/lib/components/universalDappUI.tsx", + "hash": "e35d6cc9e59d0fbef9b7a4d654abccab57a30a5f", + "deps": [ + "npm:react", + "npm:react-intl", + "npm:@ethereumjs/util", + "npm:bn.js" + ] + }, + { + "file": "libs/remix-ui/run-tab/src/lib/components/value.tsx", + "hash": "8423a0594c042bccbf643a73538f05032480c7d1", + "deps": [ + "npm:react", + "npm:react-intl", + "npm:bn.js" + ] + }, + { + "file": "libs/remix-ui/run-tab/src/lib/constants/index.ts", + "hash": "016bad8856b7512bade7993f6736fca25ad57616" + }, + { + "file": "libs/remix-ui/run-tab/src/lib/css/card.css", + "hash": "65cba95c6062ab496e2f9c2b398c2dafe29ce0b8" + }, + { + "file": "libs/remix-ui/run-tab/src/lib/css/run-tab.css", + "hash": "30606506a9938709d5d605a4d8b2e2239841a21e" + }, + { + "file": "libs/remix-ui/run-tab/src/lib/reducers/runTab.ts", + "hash": "77f4b24520e54ba2055c39036b2b0951f6a0aff6" + }, + { + "file": "libs/remix-ui/run-tab/src/lib/run-tab.tsx", + "hash": "f716bbd9a825d670b742349701e04f34e2f8a7db", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/run-tab/src/lib/types/blockchain.d.ts", + "hash": "b164468de81c899df09469215b209ab781859d41", + "deps": [ + "npm:@remixproject/engine", + "npm:events", + "npm:bn.js" + ] + }, + { + "file": "libs/remix-ui/run-tab/src/lib/types/execution-context.d.ts", + "hash": "dd7c244c6de73ec295e6d0addd9f0b880077aa2f", + "deps": [ + "npm:web3" + ] + }, + { + "file": "libs/remix-ui/run-tab/src/lib/types/index.ts", + "hash": "b674a4987e9e7a481ac6d74fe7ffd135b004d486", + "deps": [ + "npm:react", + "npm:@openzeppelin/upgrades-core" + ] + }, + { + "file": "libs/remix-ui/run-tab/src/lib/types/injected.d.ts", + "hash": "2c2c4fb3fe2159ec0335d468f6a4214fba97001d" + }, + { + "file": "libs/remix-ui/run-tab/src/lib/types/node.d.ts", + "hash": "84169e3be73afcc1bb1bc33d9f20a9ed498e8abc" + }, + { + "file": "libs/remix-ui/run-tab/src/lib/types/recorder.d.ts", + "hash": "3c4ec18c20b63b3fbab125f266f48c70d04b3f04" + }, + { + "file": "libs/remix-ui/run-tab/src/lib/types/run-tab.d.ts", + "hash": "91de380ad9bd3686d2b7cbdd6b9a1043ae42e495", + "deps": [ + "npm:@remixproject/engine-web" + ] + }, + { + "file": "libs/remix-ui/run-tab/src/lib/types/vm.d.ts", + "hash": "ff602d4f265993d8b46c731f5214b20020c5ebf4" + }, + { + "file": "libs/remix-ui/search/src/index.ts", + "hash": "72588397c4a05b3467901faa8a2374ea8394daf2" + }, + { + "file": "libs/remix-ui/search/src/lib/components/Exclude.tsx", + "hash": "2ca62655ed19859e74a51f0cf5e89c067a56e16f", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/search/src/lib/components/Find.tsx", + "hash": "1b4ab9f9c98dc81cd743cb5b5694863a82be1b04", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/search/src/lib/components/FindContainer.tsx", + "hash": "7568fa75766ee187050cc670e1c340baaaed460b", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/search/src/lib/components/Include.tsx", + "hash": "51ac5d2eb285eacbbc2316c5328e77382cd19fb4", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/search/src/lib/components/OverWriteCheck.tsx", + "hash": "bf5f434d21e226e7b356b6a1c0dfff4cfaf5c655", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/search/src/lib/components/Replace.tsx", + "hash": "a47be3660b9c3e0ee9f4f00f3a56990678510a6e", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/search/src/lib/components/results/ResultFileName.tsx", + "hash": "bbe88103fda12ba0d8433be501bcb4e92af1c7cf", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/search/src/lib/components/results/ResultItem.tsx", + "hash": "5a8c98ad3049aa7131c3b291913529026dd94b5b", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/search/src/lib/components/results/Results.tsx", + "hash": "f94d94d86839f9ef5b26379d4d386009ddf37937", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/search/src/lib/components/results/ResultSummary.tsx", + "hash": "7578ffd62e3d092c8d76f7f094a002f739b6c63a", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/search/src/lib/components/results/SearchHelper.ts", + "hash": "f7aceba7596d73152de55de948f3798065a960a9", + "deps": [ + "npm:is-electron" + ] + }, + { + "file": "libs/remix-ui/search/src/lib/components/Search.tsx", + "hash": "2e58e80b0f7a96ab8484cb90c5904765b0e71067", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/search/src/lib/components/StopSearch.tsx", + "hash": "90d9e68859ab9ad006c824757d71cbdcba262254", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/search/src/lib/components/Undo.tsx", + "hash": "da7bd946041eae95922310c506e965880811ed61", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/search/src/lib/context/context.tsx", + "hash": "dd43a5507eb1fdf3834d861a2694d111bff76471", + "deps": [ + "npm:react", + "npm:@jsdevtools/file-path-filter", + "npm:lodash" + ] + }, + { + "file": "libs/remix-ui/search/src/lib/reducers/Reducer.ts", + "hash": "c10efcf869d44bcbd7fde8cb9c107db00fdbe590" + }, + { + "file": "libs/remix-ui/search/src/lib/search.css", + "hash": "17b49ab14da99b08f341a79686e60dc7da2a19c0" + }, + { + "file": "libs/remix-ui/search/src/lib/types/index.ts", + "hash": "4c3ffa959d529678e979f4f9abb724359cfe2600" + }, + { + "file": "libs/remix-ui/settings/src/index.ts", + "hash": "432ac58185a148a0274c2b5e06e2b03c045e69eb" + }, + { + "file": "libs/remix-ui/settings/src/lib/constants.ts", + "hash": "90f23a0939d6c526c9d78c9e3faa4bb5bdf451bb" + }, + { + "file": "libs/remix-ui/settings/src/lib/etherscan-settings.tsx", + "hash": "707bb0ceb791c5153a140aedfca8d93bc3490884", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/settings/src/lib/github-settings.tsx", + "hash": "4cd6782ba46e721898259d66b54f3e41cad3bc9e", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/settings/src/lib/remix-ui-settings.css", + "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" + }, + { + "file": "libs/remix-ui/settings/src/lib/remix-ui-settings.tsx", + "hash": "91d423566f5209a9d2c2d7f79d772bc4b29ca150", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/settings/src/lib/settingsAction.ts", + "hash": "87ecd3c0d3c64eeb22410333044f2b41aed0d93c" + }, + { + "file": "libs/remix-ui/settings/src/lib/settingsReducer.ts", + "hash": "4c1db50ad2573f5bf5f5bfaebd711389f75add67" + }, + { + "file": "libs/remix-ui/settings/src/types/index.ts", + "hash": "f14027f886a2db05a0a2e9662a1420a9a38b430d" + }, + { + "file": "libs/remix-ui/solidity-compiler/src/index.ts", + "hash": "386d3792be0b70a04fa8498657ccd7537336dd3b" + }, + { + "file": "libs/remix-ui/solidity-compiler/src/lib/actions/compiler.ts", + "hash": "b1c0b686dea979f672eb8e06f26dc426e0e52815", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/solidity-compiler/src/lib/api/compiler-api.ts", + "hash": "e27cc7aa55da4e7e88b87d9e40600b8741518175", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/solidity-compiler/src/lib/compiler-container.tsx", + "hash": "3fc8418c6bd8df3018db105a44c7049fbfc48c3c", + "deps": [ + "npm:react", + "npm:react-intl", + "npm:semver", + "npm:axios", + "npm:is-electron" + ] + }, + { + "file": "libs/remix-ui/solidity-compiler/src/lib/compilerConfiguration.tsx", + "hash": "eb204c56607a4ff3c20ced049d51ce47d61eb3c9" + }, + { + "file": "libs/remix-ui/solidity-compiler/src/lib/contract-selection.tsx", + "hash": "eb2fb584956f7bb85c782c385901e8a03d2fb2ca", + "deps": [ + "npm:react", + "npm:react-intl", + "npm:file-saver" + ] + }, + { + "file": "libs/remix-ui/solidity-compiler/src/lib/css/style.css", + "hash": "dbf0fc47d0ab857a6e1e3dbcf5fed1d46badc7a0" + }, + { + "file": "libs/remix-ui/solidity-compiler/src/lib/logic/compileTabLogic.ts", + "hash": "9f36b48e9c23e72fc85c2f5e423b400fecf25ac6", + "deps": [ + "npm:events" + ] + }, + { + "file": "libs/remix-ui/solidity-compiler/src/lib/logic/contract-parser.ts", + "hash": "92d18f754cd9957a7c1e2639da1f6a36060c4421", + "deps": [ + "npm:solc" + ] + }, + { + "file": "libs/remix-ui/solidity-compiler/src/lib/logic/flattenerUtilities.ts", + "hash": "b4b0824ebbb1457bf7fc9f4891311f90b6e2248f" + }, + { + "file": "libs/remix-ui/solidity-compiler/src/lib/logic/index.ts", + "hash": "e2c8f6d006c08119fe37c6352ac24592b27be2ef" + }, + { + "file": "libs/remix-ui/solidity-compiler/src/lib/reducers/compiler.ts", + "hash": "8734d8339c2b084f1dd054ab9aeb79ed3a68cb38" + }, + { + "file": "libs/remix-ui/solidity-compiler/src/lib/solidity-compiler.tsx", + "hash": "429fb093bd5ec2a8922dca7bf7d784fa66c82e38", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/solidity-compiler/src/lib/types/index.ts", + "hash": "848596f5e04ca20535763f842a8adf9d5301a40f" + }, + { + "file": "libs/remix-ui/solidity-uml-gen/src/index.ts", + "hash": "1e2d2606382debab9354fe0244e52f7eeec91778" + }, + { + "file": "libs/remix-ui/solidity-uml-gen/src/lib/components/UmlDownload.tsx", + "hash": "33636b820786a722b3f6ec7f19f9485403cd4592", + "deps": [ + "npm:react", + "npm:react-intl", + "npm:react-bootstrap" + ] + }, + { + "file": "libs/remix-ui/solidity-uml-gen/src/lib/css/solidity-uml-gen.css", + "hash": "d421d2546cf2d550e0acbe0bbd91bd7c0c9ee240" + }, + { + "file": "libs/remix-ui/solidity-uml-gen/src/lib/solidity-uml-gen.tsx", + "hash": "fa21607c1ceb7e80f5ba02d036e23d79a9212f61", + "deps": [ + "npm:react", + "npm:react-intl", + "npm:react-zoom-pan-pinch", + "npm:react-image-magnifiers" + ] + }, + { + "file": "libs/remix-ui/solidity-uml-gen/src/lib/utilities/UmlDownloadStrategy.ts", + "hash": "18f82c5ca43c650a1e289d5798b6f163d1e54787", + "deps": [ + "npm:jspdf" + ] + }, + { + "file": "libs/remix-ui/solidity-uml-gen/src/types/index.ts", + "hash": "43593026420bfa14644526d040a92340986ba226", + "deps": [ + "npm:@remixproject/engine-web", + "npm:@remixproject/plugin-api", + "npm:react" + ] + }, + { + "file": "libs/remix-ui/solidity-unit-testing/src/index.ts", + "hash": "ad00e8d3b4ceba78542ee7f43410aa5c272d0e0a" + }, + { + "file": "libs/remix-ui/solidity-unit-testing/src/lib/css/style.css", + "hash": "8f64f76a99215965f51c57071955d7315b4434be" + }, + { + "file": "libs/remix-ui/solidity-unit-testing/src/lib/logic/testTabLogic.ts", + "hash": "79954f42de3e8b79df69884306d20169ec2cc37f" + }, + { + "file": "libs/remix-ui/solidity-unit-testing/src/lib/solidity-unit-testing.tsx", + "hash": "a03903f1a670b59716b5d789560d4737e02bf53a", + "deps": [ + "npm:react", + "npm:react-intl", + "npm:semver", + "npm:async", + "npm:web3", + "npm:util", + "npm:is-electron" + ] + }, + { + "file": "libs/remix-ui/static-analyser/src/index.ts", + "hash": "86a00ccd14d910eccecd3835934c8ab5abc718c7" + }, + { + "file": "libs/remix-ui/static-analyser/src/lib/actions/staticAnalysisActions.ts", + "hash": "a48e45c2db4dd07dd01a4f040c7ca0e68ce4c2bb", + "deps": [ + "npm:@remixproject/plugin-api", + "npm:react" + ] + }, + { + "file": "libs/remix-ui/static-analyser/src/lib/Button/StaticAnalyserButton.tsx", + "hash": "b04fbc60577f66d2742a9568eb013e5f0ac2d68b", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/static-analyser/src/lib/components/BasicTitle.tsx", + "hash": "19e9de05644461b0f49ad5c361632839af2c984f", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/static-analyser/src/lib/ErrorRenderer.tsx", + "hash": "e3e048db3b7694e9e6d4d8052b0edcf0b2dfdf0c", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/static-analyser/src/lib/reducers/staticAnalysisReducer.ts", + "hash": "5b7785f3c1ca2e99d4161bb2f8e9096b9a93126b", + "deps": [ + "npm:@remixproject/plugin-api" + ] + }, + { + "file": "libs/remix-ui/static-analyser/src/lib/remix-ui-static-analyser.tsx", + "hash": "bcf7ab7fb91a1135ae43ef213926fa77e85ab9f6", + "deps": [ + "npm:react", + "npm:lodash", + "npm:semver", + "npm:react-bootstrap" + ] + }, + { + "file": "libs/remix-ui/static-analyser/src/staticanalyser.d.ts", + "hash": "91ab4880090182f56d35e602d1376464f26248a6", + "deps": [ + "npm:@remixproject/plugin-api", + "npm:@remixproject/engine-web", + "npm:events" + ] + }, + { + "file": "libs/remix-ui/tabs/src/index.ts", + "hash": "5f41e08497c21603f428945eb49ef870e0ee6b9b" + }, + { + "file": "libs/remix-ui/tabs/src/lib/remix-ui-tabs.css", + "hash": "e769523822a9d3e981d69551dec0c673fe7bb3a4" + }, + { + "file": "libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx", + "hash": "1e2b9684f7388dabc4319af8cd309bc2f3d38455", + "deps": [ + "npm:@remixproject/engine", + "npm:react", + "npm:react-intl", + "npm:react-tabs" + ] + }, + { + "file": "libs/remix-ui/terminal/src/index.ts", + "hash": "5b8eeca5b52fba10c95fce91876ad125698c9153" + }, + { + "file": "libs/remix-ui/terminal/src/lib/actions/terminalAction.ts", + "hash": "6b08bcd8080d76aa0708da74411419af23aa5cb5", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/terminal/src/lib/commands.ts", + "hash": "0dc02b371b6bc38faeebdbd8749f821af93d4c6f" + }, + { + "file": "libs/remix-ui/terminal/src/lib/components/ChechTxStatus.tsx", + "hash": "4f8c44a74a6d6d34d6fe0276a8e814f7093bda7f", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/terminal/src/lib/components/Context.tsx", + "hash": "1f06c16e2e958b96d9e93880add5e6878ab6bc83", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/terminal/src/lib/components/RenderCall.tsx", + "hash": "f715a9e0768e14077cdec80f820cf6480e7bb331", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/terminal/src/lib/components/RenderKnownTransactions.tsx", + "hash": "01dd02d445efcb433c6a586cd5d9b6e374ae47de", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/terminal/src/lib/components/RenderUnknownTransactions.tsx", + "hash": "1599178f553dab734dd90da43578b7ca5a620baa", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/terminal/src/lib/components/Table.tsx", + "hash": "35dd5d47ea99acbe0b0d39e909966bf565c45337", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/terminal/src/lib/custom-hooks/useKeyPress.tsx", + "hash": "2accab436d541998f21fdb12b2e02bec08175594", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/terminal/src/lib/reducers/terminalReducer.ts", + "hash": "c451abfbb83d1972361ef055e26dc27dbfe076b2" + }, + { + "file": "libs/remix-ui/terminal/src/lib/remix-ui-terminal.css", + "hash": "13402e45ee2b3baeb3ce719bb25c3c1ac381afe2" + }, + { + "file": "libs/remix-ui/terminal/src/lib/remix-ui-terminal.tsx", + "hash": "74b9999a2fe164377e46e89de7cbde9f88144da7", + "deps": [ + "npm:react", + "npm:react-intl", + "npm:javascript-serialize", + "npm:js-beautify", + "npm:html-react-parser" + ] + }, + { + "file": "libs/remix-ui/terminal/src/lib/terminalWelcome.tsx", + "hash": "cfb456f0206615b72fa2688df7f46b3e87f95f41", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/terminal/src/lib/types/terminalTypes.ts", + "hash": "d9537fcfd4443cb006e5f59f0eb099a6ffff38f2" + }, + { + "file": "libs/remix-ui/terminal/src/lib/utils/utils.ts", + "hash": "3ea77b6ed57c6d616f454ecee7ec9aa90cc34ad0" + }, + { + "file": "libs/remix-ui/terminal/src/lib/utils/wrapScript.ts", + "hash": "75b1972869cdcf8129cfe65a48e827f470868982" + }, + { + "file": "libs/remix-ui/theme-module/src/index.ts", + "hash": "f83499af53fdbb47e28b789beb7641977731bd94" + }, + { + "file": "libs/remix-ui/theme-module/src/lib/remix-ui-theme-module.module.css", + "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" + }, + { + "file": "libs/remix-ui/theme-module/src/lib/remix-ui-theme-module.tsx", + "hash": "e2f224669891f64ad0ede78dcaa2ed2e85e10f2b", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/theme-module/src/reducers/themeModuleReducers.ts", + "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" + }, + { + "file": "libs/remix-ui/theme-module/types/theme-module.ts", + "hash": "ac0b5db7cbe98807c16751acce99c3a8ba7703f8", + "deps": [ + "npm:@remixproject/engine", + "npm:events" + ] + }, + { + "file": "libs/remix-ui/toaster/src/index.ts", + "hash": "1db646761ee9ce30cc47c880d820fe08e45c52b2" + }, + { + "file": "libs/remix-ui/toaster/src/lib/toaster.css", + "hash": "c026edbf4923e8fac73f7c2e5b9364c247ee9a1c" + }, + { + "file": "libs/remix-ui/toaster/src/lib/toaster.tsx", + "hash": "85eb2a4fb02dda7b85355eebb01fd5c55abe7337", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/tooltip-popup/src/index.ts", + "hash": "cad02e885314a1b8d2612c4b6a44b860fce75a50" + }, + { + "file": "libs/remix-ui/tooltip-popup/src/lib/tooltip-popup.module.css", + "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" + }, + { + "file": "libs/remix-ui/tooltip-popup/src/lib/tooltip-popup.tsx", + "hash": "4d4a7f3c2a5ff61b25d772ebbf6241539fa8d286", + "deps": [ + "npm:react", + "npm:react-bootstrap" + ] + }, + { + "file": "libs/remix-ui/tooltip-popup/src/types/index.ts", + "hash": "747c392c4c9af0deeb8bf496d7101e92f996c381" + }, + { + "file": "libs/remix-ui/tree-view/src/index.ts", + "hash": "abc1b9387267619830256105b7a8f860b3748062" + }, + { + "file": "libs/remix-ui/tree-view/src/lib/remix-ui-tree-view.css", + "hash": "9064c468808a0df50c9465485311fc423a3509cb" + }, + { + "file": "libs/remix-ui/tree-view/src/lib/remix-ui-tree-view.tsx", + "hash": "e1deb79ea392fd2f00179f0467104c0deca7f547", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/tree-view/src/lib/tree-view-item/tree-view-item.css", + "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" + }, + { + "file": "libs/remix-ui/tree-view/src/lib/tree-view-item/tree-view-item.tsx", + "hash": "33c0469073ca9c399a56bf3faf1867bb99440b3c", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/tree-view/src/types/index.ts", + "hash": "4f6bfc9e020304ad447c4476f1559875b21c4a06" + }, + { + "file": "libs/remix-ui/utils/src/index.ts", + "hash": "d6282f565ac28a59d97bad35f0fce564c2fa7f75" + }, + { + "file": "libs/remix-ui/utils/src/lib/should-render.tsx", + "hash": "9305461fe62ce8c7552379205481a29e86e4ca96", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/vertical-icons-panel/src/index.ts", + "hash": "8a82a3c0faa32d1e98b44bc0f3bbba1fb2c621f4" + }, + { + "file": "libs/remix-ui/vertical-icons-panel/src/lib/components/Badge.tsx", + "hash": "77505133a9dfb3cf61e93b42571653d64e5b2cd5", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/vertical-icons-panel/src/lib/components/BasicLogo.tsx", + "hash": "76d42eec3a7517ed3c62320c8a9d2010cb21383f", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/vertical-icons-panel/src/lib/components/Chevron.tsx", + "hash": "fe8b6a5ef6fba565686c67fc7d6ab45a22d9e357", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/vertical-icons-panel/src/lib/components/Home.tsx", + "hash": "d548247d993a830f427e8f4d5e460a550b3349aa", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/vertical-icons-panel/src/lib/components/Icon.tsx", + "hash": "49ffcf2387b7a3851753321146d50010b10ba9bf", + "deps": [ + "npm:react", + "npm:react-intl", + "npm:@remixproject/engine" + ] + }, + { + "file": "libs/remix-ui/vertical-icons-panel/src/lib/components/IconList.tsx", + "hash": "d621ed2eb570a59ef24667f1bc87fc5d054501d9", + "deps": [ + "npm:react", + "npm:@remixproject/engine" + ] + }, + { + "file": "libs/remix-ui/vertical-icons-panel/src/lib/reducers/iconBadgeReducer.ts", + "hash": "0eeed6dc22d4a564fe70f77a7dba66176c92a3f8" + }, + { + "file": "libs/remix-ui/vertical-icons-panel/src/lib/reducers/verticalScrollReducer.ts", + "hash": "9987b3a3694d49c2753673e40b51b3cfc6c72455" + }, + { + "file": "libs/remix-ui/vertical-icons-panel/src/lib/remix-ui-vertical-icons-panel.css", + "hash": "393ee84773f3f7af77a8fc01d550f1c6bb0163c9" + }, + { + "file": "libs/remix-ui/vertical-icons-panel/src/lib/remix-ui-vertical-icons-panel.tsx", + "hash": "96f655ff5059d01dd8837bf1d2b11f3127805928", + "deps": [ + "npm:react", + "npm:@remixproject/engine" + ] + }, + { + "file": "libs/remix-ui/vertical-icons-panel/src/lib/types/index.ts", + "hash": "754c897b8b1ccd5f769ced2941cdb4fad2af935b", + "deps": [ + "npm:@remixproject/plugin-utils" + ] + }, + { + "file": "libs/remix-ui/vertical-icons-panel/src/lib/vertical-icons-context-menu.tsx", + "hash": "66cb24ef7aabac03b2ac82d086475467998667c5", + "deps": [ + "npm:@remixproject/engine", + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/workspace/src/index.ts", + "hash": "57cffde4528b33cb7c3c670880de756978498b62" + }, + { + "file": "libs/remix-ui/workspace/src/lib/actions/events.ts", + "hash": "ba93240c1b19e35477abd9508feaa3b01dbc698b", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/workspace/src/lib/actions/index.ts", + "hash": "7d56bd9f50155c4d14e23a8ec9174ae6f31dcacd", + "deps": [ + "npm:react", + "npm:gists", + "npm:@remixproject/plugin-api", + "npm:jszip", + "npm:is-electron" + ] + }, + { + "file": "libs/remix-ui/workspace/src/lib/actions/payload.ts", + "hash": "b1d762bce1a9704875e27084f0dd52353b054600" + }, + { + "file": "libs/remix-ui/workspace/src/lib/actions/workspace.ts", + "hash": "0f9166f5f17a42f96124a1dffab4e65d3d8f0b09", + "deps": [ + "npm:react", + "npm:@ethereumjs/util", + "npm:axios", + "remix-ide", + "npm:is-electron" + ] + }, + { + "file": "libs/remix-ui/workspace/src/lib/components/electron-menu.tsx", + "hash": "832caba6794438f246fbee9f4b11358163409b2d", + "deps": [ + "npm:react", + "npm:is-electron", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/workspace/src/lib/components/file-explorer-context-menu.tsx", + "hash": "9084d3acaef5076250f4af36ba331999d3212992", + "deps": [ + "npm:react", + "npm:react-intl", + "npm:@remixproject/plugin-api", + "npm:is-electron" + ] + }, + { + "file": "libs/remix-ui/workspace/src/lib/components/file-explorer-menu.tsx", + "hash": "89d777f6fd16473d96e8d3c45549f08ac4883f78", + "deps": [ + "npm:react", + "npm:react-intl", + "npm:react-bootstrap" + ] + }, + { + "file": "libs/remix-ui/workspace/src/lib/components/file-explorer.tsx", + "hash": "69e072ff40861739457aeed630cf9d2d6aaa41ac", + "deps": [ + "npm:react", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/workspace/src/lib/components/file-label.tsx", + "hash": "c9752a822d23b4bb623f3f14aef86c41b9e8bf3d", + "deps": [ + "npm:react-intl", + "npm:react" + ] + }, + { + "file": "libs/remix-ui/workspace/src/lib/components/file-render.tsx", + "hash": "a23ed76df325c3cf507464ac71d804a66fd34348", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/workspace/src/lib/components/upload-file.tsx", + "hash": "ddb99e9936375ce33c82c73411784966d2c86901", + "deps": [ + "npm:react" + ] + }, + { + "file": "libs/remix-ui/workspace/src/lib/components/workspace-hamburger-item.tsx", + "hash": "56e6c7746b39c2d499f733abe4508d172083951c", + "deps": [ + "npm:react", + "npm:react-bootstrap", + "npm:react-intl" + ] + }, + { + "file": "libs/remix-ui/workspace/src/lib/components/workspace-hamburger.tsx", + "hash": "399d85e215b6f7a1e899921619d45ed1a599a010", + "deps": [ + "npm:react", + "npm:react-bootstrap" + ] + }, + { + "file": "libs/remix-ui/workspace/src/lib/components/workspace-selector.tsx", + "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" + }, + { + "file": "libs/remix-ui/workspace/src/lib/contexts/index.ts", + "hash": "a01c06383e10bde7c3b7b028466d07e0856c6af4", + "deps": [ + "npm:@remixproject/plugin-api", + "npm:react" + ] + }, + { + "file": "libs/remix-ui/workspace/src/lib/css/electron-menu.css", + "hash": "a5b0aff3f06e35b4102d91b9bc9c609ebcf1b3a3" + }, + { + "file": "libs/remix-ui/workspace/src/lib/css/file-explorer-context-menu.css", + "hash": "8e2195a44a7ce8fa2607d0a9fc3b394b7ebb094f" + }, + { + "file": "libs/remix-ui/workspace/src/lib/css/file-explorer.css", + "hash": "c49a0a54a7201ffc6b9428a9cdded1c3d27c11b9" + }, + { + "file": "libs/remix-ui/workspace/src/lib/css/remix-ui-workspace.css", + "hash": "24c7d462c65c6f77d21faab8cce8d99db97510b9" + }, + { + "file": "libs/remix-ui/workspace/src/lib/providers/FileSystemProvider.tsx", + "hash": "1af9292e1357372833aa5266035d88f277daea03", + "deps": [ + "npm:react", + "npm:@remixproject/plugin-api" + ] + }, + { + "file": "libs/remix-ui/workspace/src/lib/reducers/workspace.ts", + "hash": "6e5d6803b5f88d7860d1686cb5af6c4cffd21982", + "deps": [ + "npm:lodash" + ] + }, + { + "file": "libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx", + "hash": "c1d5aecc6b1210e2bbbfe442890815493f55d88a", + "deps": [ + "npm:react", + "npm:react-intl", + "npm:react-bootstrap", + "npm:@remixproject/plugin-api", + "npm:is-electron" + ] + }, + { + "file": "libs/remix-ui/workspace/src/lib/types/index.ts", + "hash": "83d9b3a29a7cfec926e9ccdb482f1af877ad5a6f", + "deps": [ + "npm:react", + "npm:@remixproject/plugin-api", + "npm:@remixproject/engine-web", + "npm:react-overlays" + ] + }, + { + "file": "libs/remix-ui/workspace/src/lib/utils/constants.ts", + "hash": "688c4731d6f641cfa06322ed4cf8e4af1fe6c2ce" + }, + { + "file": "libs/remix-ui/workspace/src/lib/utils/gitStatusFilter.ts", + "hash": "ece2c219de550175bd5c23f7ff3319efc282922b" + }, + { + "file": "libs/remix-ui/workspace/src/lib/utils/index.ts", + "hash": "0302c0fbd221a9f4b849e661c04a68762b791a82" + }, + { + "file": "libs/remix-ui/xterm/src/index.ts", + "hash": "d0850bef79ae2d93b299272acc2c285f47608b0c" + }, + { + "file": "libs/remix-ui/xterm/src/lib/components/remix-ui-xterm.tsx", + "hash": "f93263808a01811611447c850f2f024fdddd1a3d", + "deps": [ + "npm:react", + "npm:@remixproject/engine-electron" + ] + }, + { + "file": "libs/remix-ui/xterm/src/lib/components/remix-ui-xterminals.tsx", + "hash": "0a3a4c9a5e7c02f9477213925d66236be633c259", + "deps": [ + "npm:react", + "npm:@remixproject/engine-electron", + "npm:react-bootstrap" + ] + }, + { + "file": "libs/remix-ui/xterm/src/lib/components/xterm-fit-addOn.ts", + "hash": "f5f402df7585c85de108353d3c5ae5bdfbe10a3d", + "deps": [ + "npm:xterm" + ] + }, + { + "file": "libs/remix-ui/xterm/src/lib/components/xterm-wrap.tsx", + "hash": "dd889277a34f4f71cca5d83216e487dddd03a793", + "deps": [ + "npm:react", + "npm:prop-types", + "npm:xterm" + ] + }, + { + "file": "libs/remix-ui/xterm/src/lib/css/index.css", + "hash": "e27039aac0f31d388eaff687189f55818c063cf5" + } + ] + } + }, + "doc-gen": { + "name": "doc-gen", + "type": "app", + "data": { + "name": "doc-gen", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "apps/doc-gen/src", + "projectType": "application", + "implicitDependencies": [], + "targets": { + "build": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/webpack:webpack", + "outputs": [ + "{options.outputPath}" + ], + "defaultConfiguration": "development", + "options": { + "compiler": "babel", + "outputPath": "dist/apps/doc-gen", + "index": "apps/doc-gen/src/index.html", + "baseHref": "./", + "main": "apps/doc-gen/src/main.tsx", + "tsConfig": "apps/doc-gen/tsconfig.app.json", + "assets": [ + "apps/doc-gen/src/favicon.ico", + "apps/doc-gen/src/profile.json" + ], + "styles": [], + "scripts": [], + "webpackConfig": "apps/doc-gen/webpack.config.js" + }, + "configurations": { + "development": {}, + "production": { + "fileReplacements": [ + { + "replace": "apps/doc-gen/src/environments/environment.ts", + "with": "apps/doc-gen/src/environments/environment.prod.ts" + } + ] + } + } + }, + "serve": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/webpack:dev-server", + "defaultConfiguration": "development", + "options": { + "buildTarget": "doc-gen:build", + "hmr": true, + "baseHref": "/" + }, + "configurations": { + "development": { + "buildTarget": "doc-gen:build:development", + "port": 6003 + }, + "production": { + "buildTarget": "doc-gen:build:production" + } + } + } + }, + "tags": [], + "root": "apps/doc-gen", + "files": [ + { + "file": "apps/doc-gen/.eslintrc.json", + "hash": "a92d0f887ac1dc9e913cb3e79f08f8c9645638fa" + }, + { + "file": "apps/doc-gen/.prettierrc", + "hash": "6e6d086922c1f851229dd97476abb6b0e1b0d21d" + }, + { + "file": "apps/doc-gen/project.json", + "hash": "4b997606a538c104a293df412ff5fc9b69e6236b" + }, + { + "file": "apps/doc-gen/src/app/App.css", + "hash": "609253955e26649b42db7210a88a658c97914e0c" + }, + { + "file": "apps/doc-gen/src/app/App.tsx", + "hash": "08fe6f7ba27600c70b85279f38e83011de6a3ac2", + "deps": [ + "npm:react" + ] + }, + { + "file": "apps/doc-gen/src/app/docgen-client.ts", + "hash": "ee06c3237fcf726557f757b904dec75dc043c07a", + "deps": [ + "npm:@remixproject/plugin", + "npm:@remixproject/plugin-api", + "npm:@remixproject/plugin-webview", + "npm:events", + "npm:solidity-ast" + ] + }, + { + "file": "apps/doc-gen/src/app/docgen/common/helpers.ts", + "hash": "3ee3dbe10a5bc7c8ea84acfd520d0bae4d4a50fc", + "deps": [ + "npm:solidity-ast" + ] + }, + { + "file": "apps/doc-gen/src/app/docgen/common/properties.ts", + "hash": "5366e8d7efe9b28f79c03d342a190554d8f3cab7", + "deps": [ + "npm:solidity-ast" + ] + }, + { + "file": "apps/doc-gen/src/app/docgen/config.ts", + "hash": "2a3f9fcc6e95aa1cffa669e40136a49ff255f3f9", + "deps": [ + "npm:solidity-ast" + ] + }, + { + "file": "apps/doc-gen/src/app/docgen/doc-item.ts", + "hash": "eb0322302714dc032ed3c0bc4efa24ea1ada654c", + "deps": [ + "npm:solidity-ast" + ] + }, + { + "file": "apps/doc-gen/src/app/docgen/render.ts", + "hash": "5c206f92b6e671fe2399f52d1c6aafa51c587d02", + "deps": [ + "npm:handlebars" + ] + }, + { + "file": "apps/doc-gen/src/app/docgen/site.ts", + "hash": "53ffd5bc929ec142e14fe343fe6e6ee795b7f42c", + "deps": [ + "npm:solidity-ast" + ] + }, + { + "file": "apps/doc-gen/src/app/docgen/templates.ts", + "hash": "b83d0ac77daebc0b7647e10cf04990c44757ec3b" + }, + { + "file": "apps/doc-gen/src/app/docgen/themes/markdown/common.hbs", + "hash": "b2a3b2a5a2a38bffb8289585ba427883b5ce203f" + }, + { + "file": "apps/doc-gen/src/app/docgen/themes/markdown/contract.hbs", + "hash": "d33aaefe841bdec82e5e314885b30747e25c5177" + }, + { + "file": "apps/doc-gen/src/app/docgen/themes/markdown/enum.hbs", + "hash": "677406db9c734d64fe1ccb06945cf3a241899496" + }, + { + "file": "apps/doc-gen/src/app/docgen/themes/markdown/error.hbs", + "hash": "5373296cbc5c01c84c11ee4cfff73d338668560b" + }, + { + "file": "apps/doc-gen/src/app/docgen/themes/markdown/event.hbs", + "hash": "5373296cbc5c01c84c11ee4cfff73d338668560b" + }, + { + "file": "apps/doc-gen/src/app/docgen/themes/markdown/function.hbs", + "hash": "5373296cbc5c01c84c11ee4cfff73d338668560b" + }, + { + "file": "apps/doc-gen/src/app/docgen/themes/markdown/helpers.ts", + "hash": "92492cf9312148c10d13cb07ff56149d114ef7ad", + "deps": [ + "npm:handlebars" + ] + }, + { + "file": "apps/doc-gen/src/app/docgen/themes/markdown/modifier.hbs", + "hash": "5373296cbc5c01c84c11ee4cfff73d338668560b" + }, + { + "file": "apps/doc-gen/src/app/docgen/themes/markdown/page.hbs", + "hash": "6597f0b5c7728af445076ef599a72ca2ce9b8a77" + }, + { + "file": "apps/doc-gen/src/app/docgen/themes/markdown/struct.hbs", + "hash": "867069e2bca9658c17d65a02c457f19ecd32dc9c" + }, + { + "file": "apps/doc-gen/src/app/docgen/themes/markdown/user-defined-value-type.hbs", + "hash": "5373296cbc5c01c84c11ee4cfff73d338668560b" + }, + { + "file": "apps/doc-gen/src/app/docgen/themes/markdown/variable.hbs", + "hash": "5373296cbc5c01c84c11ee4cfff73d338668560b" + }, + { + "file": "apps/doc-gen/src/app/docgen/utils/arrays-equal.ts", + "hash": "fe08726e95f4ada43e925d27f3dc41ead621119a" + }, + { + "file": "apps/doc-gen/src/app/docgen/utils/assert-equal-types.ts", + "hash": "0171d13a3664965b1afe14e208ceebb3ee368367" + }, + { + "file": "apps/doc-gen/src/app/docgen/utils/clone.ts", + "hash": "f92fa701899ebc9a904df237d28fa2ca7ce02744" + }, + { + "file": "apps/doc-gen/src/app/docgen/utils/ensure-array.ts", + "hash": "cd0f8ea570bcf83d029d4e3a9a4b0ca26eba66ae" + }, + { + "file": "apps/doc-gen/src/app/docgen/utils/execall.ts", + "hash": "2aca0ad77cc588a5b8f91f4225333dc7b03f7d49" + }, + { + "file": "apps/doc-gen/src/app/docgen/utils/is-child.ts", + "hash": "cb07cc7136799f757fff59bccf0f2b7a27f855a1" + }, + { + "file": "apps/doc-gen/src/app/docgen/utils/item-type.ts", + "hash": "8873ece1fcd72b624c1833550c2bac6cf38b494b" + }, + { + "file": "apps/doc-gen/src/app/docgen/utils/ItemError.ts", + "hash": "3791f71443a60212b97213a7e7f6922b13a110c5" + }, + { + "file": "apps/doc-gen/src/app/docgen/utils/map-keys.ts", + "hash": "7852cd85dc13d9c78b420732a150c8674975c32b" + }, + { + "file": "apps/doc-gen/src/app/docgen/utils/map-values.ts", + "hash": "c151d7d5529b1f008e23b8785613e3b674d27c99" + }, + { + "file": "apps/doc-gen/src/app/docgen/utils/memoized-getter.ts", + "hash": "1a2fef4ae5f650e75011a35b560c19ea7d0954a7" + }, + { + "file": "apps/doc-gen/src/app/docgen/utils/natspec.ts", + "hash": "40f752aaa85eea2600270dc2240f28098817e0b2", + "deps": [ + "npm:solidity-ast" + ] + }, + { + "file": "apps/doc-gen/src/app/docgen/utils/normalizeContractPath.ts", + "hash": "6701a6de613413ae26ea4d3daca34c2fe18775c1" + }, + { + "file": "apps/doc-gen/src/app/docgen/utils/read-item-docs.ts", + "hash": "36ee13aa7fc219bc555a09788892b0b9ac5556df" + }, + { + "file": "apps/doc-gen/src/app/docgen/utils/scope.ts", + "hash": "dabe99013783b15fe5402347d7afda4c61d0d3bd", + "deps": [ + "npm:solidity-ast" + ] + }, + { + "file": "apps/doc-gen/src/app/hooks/useLocalStorage.tsx", + "hash": "955658bac5139eef6b1c66ca563c2c73a3991038", + "deps": [ + "npm:react" + ] + }, + { + "file": "apps/doc-gen/src/app/views/ErrorView.tsx", + "hash": "31a3b90a73343941cc762ca3ff008a96641ba116", + "deps": [ + "npm:react" + ] + }, + { + "file": "apps/doc-gen/src/app/views/index.ts", + "hash": "8b137891791fe96927ad78e64b0aad7bded08bdc" + }, + { + "file": "apps/doc-gen/src/favicon.ico", + "hash": "bcd5dfd67cd0361b78123e95c2dd96031f27f743" + }, + { + "file": "apps/doc-gen/src/index.html", + "hash": "8b2167929333eb2f9178fe05e162c3e1187fc5c5" + }, + { + "file": "apps/doc-gen/src/main.tsx", + "hash": "d2d29f2bb49186ca5335bd8f1fb73de580a91e52", + "deps": [ + "npm:react", + "npm:react-dom" + ] + }, + { + "file": "apps/doc-gen/src/profile.json", + "hash": "d73a2eb1c35a71fdad36cbd0ae06c54d6232d48d" + }, + { + "file": "apps/doc-gen/src/types.ts", + "hash": "187fb6e7b31b5dce350e2fb11034b8ecc689f349" + }, + { + "file": "apps/doc-gen/tsconfig.app.json", + "hash": "af84f21cfc8066d0302f5772b7c157e81d418617" + }, + { + "file": "apps/doc-gen/tsconfig.json", + "hash": "5aab5e79111d8f97470be7e69da9fdb3ddb5819f" + }, + { + "file": "apps/doc-gen/webpack.config.js", + "hash": "86bcf513957b2af9bae4c51d306554e90633022f", + "deps": [ + "npm:@nrwl/webpack", + "npm:@nrwl/react", + "npm:webpack", + "npm:terser-webpack-plugin", + "npm:css-minimizer-webpack-plugin" + ] + } + ] + } + }, + "solhint": { + "name": "solhint", + "type": "app", + "data": { + "name": "solhint", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "apps/solhint/src", + "projectType": "application", + "implicitDependencies": [], + "targets": { + "build": { + "dependsOn": [ + "install" + ], + "executor": "@nrwl/webpack:webpack", + "outputs": [ + "{options.outputPath}" + ], + "defaultConfiguration": "development", + "options": { + "compiler": "babel", + "outputPath": "dist/apps/solhint", + "index": "apps/solhint/src/index.html", + "baseHref": "./", + "main": "apps/solhint/src/main.tsx", + "tsConfig": "apps/solhint/tsconfig.app.json", + "assets": [ + "apps/solhint/src/favicon.ico", + "apps/solhint/src/profile.json" + ], + "styles": [], + "webpackConfig": "apps/solhint/webpack.config.js" + }, + "configurations": { + "development": {}, + "production": { + "fileReplacements": [ + { + "replace": "apps/solhint/src/environments/environment.ts", + "with": "apps/solhint/src/environments/environment.prod.ts" + } + ] + } + } + }, + "install": { + "executor": "nx:run-commands", + "options": { + "commands": [ + "cd apps/solhint && yarn" + ], + "parallel": false + } + }, + "serve": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/webpack:dev-server", + "defaultConfiguration": "development", + "options": { + "buildTarget": "solhint:build", + "hmr": true, + "baseHref": "/" + }, + "configurations": { + "development": { + "buildTarget": "solhint:build:development", + "port": 7003 + }, + "production": { + "buildTarget": "solhint:build:production" + } + } + } + }, + "tags": [], + "root": "apps/solhint", + "files": [ + { + "file": "apps/solhint/package.json", + "hash": "c258c462e6bc2b79535c58628e491da00be87a75", + "deps": [ + "npm:@remixproject/plugin", + "npm:@remixproject/plugin-webview" + ] + }, + { + "file": "apps/solhint/project.json", + "hash": "dbd4bdce84907386bf713ca519aa9e518cc57138" + }, + { + "file": "apps/solhint/src/app/App.tsx", + "hash": "929d6c6658c9d09d35298c4f08cf4e6ff5fa03a4", + "deps": [ + "npm:react" + ] + }, + { + "file": "apps/solhint/src/app/SolhintPluginClient.ts", + "hash": "e3860961147382139fda9c5e6ad4fd9ae198e947", + "deps": [ + "npm:@remixproject/plugin", + "npm:@remixproject/plugin-webview", + "npm:events", + "npm:@remixproject/plugin-api" + ] + }, + { + "file": "apps/solhint/src/favicon.ico", + "hash": "317ebcb2336e0833a22dddf0ab287849f26fda57" + }, + { + "file": "apps/solhint/src/index.html", + "hash": "f7f8668c3305522289b1772fb9a1dd6eb8971ee7" + }, + { + "file": "apps/solhint/src/main.tsx", + "hash": "b8ec0b96a0b617e4f119d9720084f05b4b0eb7bc", + "deps": [ + "npm:react", + "npm:react-dom" + ] + }, + { + "file": "apps/solhint/src/profile.json", + "hash": "2964511f3b2a4102df1fd2e26ae5bd5255e6c20a" + }, + { + "file": "apps/solhint/tsconfig.app.json", + "hash": "af84f21cfc8066d0302f5772b7c157e81d418617" + }, + { + "file": "apps/solhint/tsconfig.json", + "hash": "5aab5e79111d8f97470be7e69da9fdb3ddb5819f" + }, + { + "file": "apps/solhint/webpack.config.js", + "hash": "a52cc43bf1be65d5f282eb093234476d7e3db83a", + "deps": [ + "npm:@nrwl/webpack", + "npm:@nrwl/react", + "npm:webpack", + "npm:terser-webpack-plugin", + "npm:css-minimizer-webpack-plugin" + ] + }, + { + "file": "apps/solhint/yarn.lock", + "hash": "b9a9bf3e3ad203f38ecf321e0ddc13c915818202" + } + ] + } + }, + "remixd": { + "name": "remixd", + "type": "lib", + "data": { + "name": "remixd", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/remixd/src", + "projectType": "library", + "implicitDependencies": [], + "targets": { + "build": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/js:tsc", + "outputs": [ + "{options.outputPath}" + ], + "options": { + "outputPath": "dist/libs/remixd", + "main": "libs/remixd/src/index.ts", + "tsConfig": "libs/remixd/tsconfig.lib.json", + "updateBuildableProjectDepsInPackageJson": false, + "assets": [ + "libs/remixd/*.md", + "libs/remixd/origins.json" + ] + }, + "configurations": {} + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "libs/remixd/**/*.ts" + ] + } + } + }, + "tags": [], + "root": "libs/remixd", + "files": [ + { + "file": "libs/remixd/.eslintrc", + "hash": "ab8f38339cde4762a7feb906e9e0f963958e3f93" + }, + { + "file": "libs/remixd/nodemon.json", + "hash": "e16a2bdca3a3750a85b347ef832676d6436ca9cd" + }, + { + "file": "libs/remixd/origins.json", + "hash": "3357227bcafbaa46e04388643e9d058d3b636af6" + }, + { + "file": "libs/remixd/package.json", + "hash": "97f6db55064e066a2b2cda5a6149ab4333522a57", + "deps": [ + "npm:@remixproject/plugin", + "npm:@remixproject/plugin-api", + "npm:@remixproject/plugin-utils", + "npm:@remixproject/plugin-ws", + "npm:axios", + "npm:chokidar", + "npm:commander", + "npm:fs-extra", + "npm:isbinaryfile", + "npm:ws", + "npm:latest-version", + "npm:semver", + "npm:@types/axios", + "npm:@types/fs-extra", + "npm:@types/node", + "npm:@types/ws", + "npm:@typescript-eslint/eslint-plugin", + "npm:@typescript-eslint/parser", + "npm:eslint", + "npm:eslint-config-standard", + "npm:eslint-plugin-import", + "npm:eslint-plugin-node", + "npm:eslint-plugin-promise", + "npm:eslint-plugin-standard", + "npm:nodemon", + "npm:ts-node", + "npm:typescript" + ] + }, + { + "file": "libs/remixd/project.json", + "hash": "b4da03d85f91d76b0e587b221e23c3c136b47ad1" + }, + { + "file": "libs/remixd/README.md", + "hash": "5738300893f0a5342f4af2bd1d90be398f5585e8" + }, + { + "file": "libs/remixd/src/bin/remixd.ts", + "hash": "9ca4104325c2ee4e2af3c3a8fe82164f978c34af", + "deps": [ + "npm:latest-version", + "npm:semver", + "npm:ws", + "npm:axios", + "npm:fs-extra", + "npm:commander" + ] + }, + { + "file": "libs/remixd/src/index.ts", + "hash": "05195edb3c313651cce52b446a43179dbd835c19" + }, + { + "file": "libs/remixd/src/scripts/installSlither.ts", + "hash": "2dd6f99fa5dec5425f58846b4ed3f05b89e65589", + "deps": [ + "npm:child_process" + ] + }, + { + "file": "libs/remixd/src/serviceList.ts", + "hash": "c1afd0b3adccf6c3c1eb0055d76965d158e3462e" + }, + { + "file": "libs/remixd/src/services/foundryClient.ts", + "hash": "add3378407d7d66c030fa12886245d9f2fa3159f", + "deps": [ + "npm:ws", + "npm:@remixproject/plugin", + "npm:chokidar", + "npm:fs-extra", + "npm:child_process" + ] + }, + { + "file": "libs/remixd/src/services/gitClient.ts", + "hash": "71f691a8a6f6d3be4ff67247c686e697391ffa1e", + "deps": [ + "npm:ws", + "npm:@remixproject/plugin", + "npm:child_process" + ] + }, + { + "file": "libs/remixd/src/services/hardhatClient.ts", + "hash": "3928e9af64b49bae93e707fd268da8ff4afb0b9e", + "deps": [ + "npm:ws", + "npm:@remixproject/plugin", + "npm:chokidar", + "npm:fs-extra", + "npm:child_process" + ] + }, + { + "file": "libs/remixd/src/services/remixdClient.ts", + "hash": "4718cfbcf10e0e1ad89de48b5c0e7f7261284e79", + "deps": [ + "npm:@remixproject/plugin", + "npm:ws", + "npm:chokidar", + "npm:fs-extra", + "npm:isbinaryfile" + ] + }, + { + "file": "libs/remixd/src/services/slitherClient.ts", + "hash": "64839d4a3532941a1a853818300cc2d2cd1ad9fb", + "deps": [ + "npm:ws", + "npm:@remixproject/plugin", + "npm:child_process" + ] + }, + { + "file": "libs/remixd/src/services/truffleClient.ts", + "hash": "e62fe54ba25c774bb7739717da5b4304263fe1d2", + "deps": [ + "npm:ws", + "npm:@remixproject/plugin", + "npm:chokidar", + "npm:fs-extra", + "npm:child_process" + ] + }, + { + "file": "libs/remixd/src/types/index.ts", + "hash": "48d4640de35f6bc4fd6fd92db68ffaddb3c4bc6e", + "deps": [ + "npm:ws" + ] + }, + { + "file": "libs/remixd/src/utils.ts", + "hash": "93aefb325a538ca2244d703b3ac8a6d2dc87b7e9", + "deps": [ + "npm:fs-extra", + "npm:isbinaryfile" + ] + }, + { + "file": "libs/remixd/src/websocket.ts", + "hash": "fa30ccf381bb271c4870060110fb44c51cd47c91", + "deps": [ + "npm:ws", + "npm:@remixproject/plugin-ws" + ] + }, + { + "file": "libs/remixd/tsconfig.json", + "hash": "62ebbd946474cea997e774d20fffc4d585c184f3" + }, + { + "file": "libs/remixd/tsconfig.lib.json", + "hash": "f367bc80510c232335997d44ec5f815c9f9bbb76" + }, + { + "file": "libs/remixd/tsconfig.spec.json", + "hash": "4fa5ed9ba03d9e30526331b47a0dbad7775ef8c3" + } + ] + } + }, + "vyper": { + "name": "vyper", + "type": "app", + "data": { + "name": "vyper", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "apps/vyper/src", + "projectType": "application", + "targets": { + "build": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/webpack:webpack", + "outputs": [ + "{options.outputPath}" + ], + "defaultConfiguration": "development", + "options": { + "compiler": "babel", + "outputPath": "dist/apps/vyper", + "index": "apps/vyper/src/index.html", + "baseHref": "./", + "main": "apps/vyper/src/main.tsx", + "polyfills": "apps/vyper/src/polyfills.ts", + "tsConfig": "apps/vyper/tsconfig.app.json", + "assets": [ + "apps/vyper/src/favicon.ico", + "apps/vyper/src/assets", + "apps/vyper/src/profile.json" + ], + "styles": [ + "apps/vyper/src/styles.css" + ], + "scripts": [], + "webpackConfig": "apps/vyper/webpack.config.js" + }, + "configurations": { + "development": {}, + "production": { + "fileReplacements": [ + { + "replace": "apps/vyper/src/environments/environment.ts", + "with": "apps/vyper/src/environments/environment.prod.ts" + } + ] + } + } + }, + "serve": { + "dependsOn": [ + { + "target": "build", + "projects": "dependencies" + } + ], + "executor": "@nrwl/webpack:dev-server", + "defaultConfiguration": "development", + "options": { + "buildTarget": "vyper:build", + "hmr": true, + "baseHref": "/" + }, + "configurations": { + "development": { + "buildTarget": "vyper:build:development", + "port": 5002 + }, + "production": { + "buildTarget": "vyper:build:production" + } + } + } + }, + "tags": [], + "root": "apps/vyper", + "implicitDependencies": [], + "files": [ + { + "file": "apps/vyper/.babelrc", + "hash": "b1fc97545671f056cd1764f581888d976ec90b89" + }, + { + "file": "apps/vyper/.browserslistrc", + "hash": "f1d12df4faa25ab7f0f03196105e957395f609af" + }, + { + "file": "apps/vyper/.eslintrc", + "hash": "b7d498eea1713f564162cc17f359c194301610d0" + }, + { + "file": "apps/vyper/project.json", + "hash": "543c0873fdf39e2e2013a947a1d0eae24ec11ff6" + }, + { + "file": "apps/vyper/README.md", + "hash": "1ab9b0b88a92a1b352e7b713daf4adbf2e1a5ece" + }, + { + "file": "apps/vyper/src/app/app.css", + "hash": "db9ee76b635f0ffc009803d2f38c53321870ca40" + }, + { + "file": "apps/vyper/src/app/app.tsx", + "hash": "aa4ab4093f78c9ec95015d7f2c2e0a2e8c8421b3", + "deps": [ + "npm:react", + "npm:@remixproject/plugin-api", + "npm:react-bootstrap" + ] + }, + { + "file": "apps/vyper/src/app/components/CompilerButton.tsx", + "hash": "9cb3ac630a031425933c775df9038c797f2365fd", + "deps": [ + "npm:react", + "npm:react-bootstrap" + ] + }, + { + "file": "apps/vyper/src/app/components/LocalUrl.tsx", + "hash": "58f4b3d3c7b5e5e09181e31d2337dd49a27d427f", + "deps": [ + "npm:react", + "npm:react-bootstrap" + ] + }, + { + "file": "apps/vyper/src/app/components/VyperResult.tsx", + "hash": "016271805b2b98b2b5e29352213020cf7ec313a3", + "deps": [ + "npm:react", + "npm:react-bootstrap", + "npm:react-json-view" + ] + }, + { + "file": "apps/vyper/src/app/components/WarnRemote.tsx", + "hash": "ee0d4b9422ba803c343e84cdd77c791ad057c053", + "deps": [ + "npm:react" + ] + }, + { + "file": "apps/vyper/src/app/utils/compiler.tsx", + "hash": "d1312322c42bf1de9d7c6ea0686164923fb3ac88", + "deps": [ + "npm:@remixproject/plugin-api" + ] + }, + { + "file": "apps/vyper/src/app/utils/index.ts", + "hash": "cb094b5d7bbf04edce31ed86dae65ea249fa9f7b" + }, + { + "file": "apps/vyper/src/app/utils/remix-client.tsx", + "hash": "b9f94320f561f4fc1f44da3f0139ab628600b36f", + "deps": [ + "npm:@remixproject/plugin-api", + "npm:@remixproject/plugin-utils", + "npm:@remixproject/plugin-webview", + "npm:@remixproject/plugin" + ] + }, + { + "file": "apps/vyper/src/assets/.gitkeep", + "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" + }, + { + "file": "apps/vyper/src/assets/logo.svg", + "hash": "78302e19f46ba92735007049a1c60bd45d70d338" + }, + { + "file": "apps/vyper/src/assets/star.svg", + "hash": "901053d3854900761496d4077229c1633391b272" + }, + { + "file": "apps/vyper/src/environments/environment.prod.ts", + "hash": "3612073bc31cd4c1f5d6cbb00318521e9a61bd8a" + }, + { + "file": "apps/vyper/src/environments/environment.ts", + "hash": "d9370e924b51bc67ecddee7fc3b6693681a324b6" + }, + { + "file": "apps/vyper/src/favicon.ico", + "hash": "317ebcb2336e0833a22dddf0ab287849f26fda57" + }, + { + "file": "apps/vyper/src/index.html", + "hash": "85eb9df0fd4a8cb778d18db46881396174046897" + }, + { + "file": "apps/vyper/src/main.tsx", + "hash": "5f17c9ab24d4a7edf960fca463cea8c44ee83993", + "deps": [ + "npm:react", + "npm:react-dom" + ] + }, + { + "file": "apps/vyper/src/polyfills.ts", + "hash": "2adf3d05b6fcf479dd61c74f6bda95d9edb6ac6b", + "deps": [ + "npm:core-js", + "npm:regenerator-runtime" + ] + }, + { + "file": "apps/vyper/src/profile.json", + "hash": "2c953d0f13660e620cfb6df586c8ea9b1d5eb87a" + }, + { + "file": "apps/vyper/src/styles.css", + "hash": "90d4ee0072ce3fc41812f8af910219f9eea3c3de" + }, + { + "file": "apps/vyper/tsconfig.app.json", + "hash": "62d6d52c3dcac8ea17a4667169c5b592211d531f" + }, + { + "file": "apps/vyper/tsconfig.json", + "hash": "89dc063037d396b341ec1eb427ea567e1cb949db" + }, + { + "file": "apps/vyper/webpack.config.js", + "hash": "4bc648f1dbc2c5057041c2685f51a448a2c13492", + "deps": [ + "npm:@nrwl/webpack", + "npm:webpack", + "npm:terser-webpack-plugin", + "npm:css-minimizer-webpack-plugin" + ] + } + ] + } + } + }, + "dependencies": { + "plugin_api": [], + "remix-url-resolver": [], + "remix-ws-templates": [], + "solidity-compiler": [], + "remix-core-plugin": [], + "circuit-compiler": [ + { + "source": "circuit-compiler", + "target": "remixd", + "type": "implicit" + } + ], + "ghaction-helper": [ + { + "source": "ghaction-helper", + "target": "remix-solidity", + "type": "implicit" + }, + { + "source": "ghaction-helper", + "target": "remix-simulator", + "type": "static" + } + ], + "remix-astwalker": [ + { + "source": "remix-astwalker", + "target": "remix-lib", + "type": "implicit" + } + ], + "remix-simulator": [ + { + "source": "remix-simulator", + "target": "remix-lib", + "type": "implicit" + } + ], + "remix-analyzer": [ + { + "source": "remix-analyzer", + "target": "remix-astwalker", + "type": "implicit" + }, + { + "source": "remix-analyzer", + "target": "remix-lib", + "type": "implicit" + } + ], + "remix-solidity": [ + { + "source": "remix-solidity", + "target": "remix-lib", + "type": "implicit" + } + ], + "walletconnect": [], + "remix-debug": [ + { + "source": "remix-debug", + "target": "remix-lib", + "type": "implicit" + }, + { + "source": "remix-debug", + "target": "remix-astwalker", + "type": "implicit" + }, + { + "source": "remix-debug", + "target": "remix-simulator", + "type": "static" + }, + { + "source": "remix-debug", + "target": "remix-solidity", + "type": "static" + } + ], + "remix-tests": [ + { + "source": "remix-tests", + "target": "remix-lib", + "type": "implicit" + }, + { + "source": "remix-tests", + "target": "remix-simulator", + "type": "implicit" + }, + { + "source": "remix-tests", + "target": "remix-solidity", + "type": "implicit" + }, + { + "source": "remix-tests", + "target": "remix-url-resolver", + "type": "static" + } + ], + "doc-viewer": [], + "etherscan": [], + "remix-ide": [ + { + "source": "remix-ide", + "target": "doc-gen", + "type": "implicit" + }, + { + "source": "remix-ide", + "target": "doc-viewer", + "type": "implicit" + }, + { + "source": "remix-ide", + "target": "etherscan", + "type": "implicit" + }, + { + "source": "remix-ide", + "target": "vyper", + "type": "implicit" + }, + { + "source": "remix-ide", + "target": "solhint", + "type": "implicit" + }, + { + "source": "remix-ide", + "target": "walletconnect", + "type": "implicit" + }, + { + "source": "remix-ide", + "target": "circuit-compiler", + "type": "implicit" + }, + { + "source": "remix-ide", + "target": "remixd", + "type": "static" + }, + { + "source": "remix-ide", + "target": "remix-ui", + "type": "static" + } + ], + "remix-lib": [], + "debugger": [ + { + "source": "debugger", + "target": "remix-debug", + "type": "implicit" + } + ], + "remix-ui": [ + { + "source": "remix-ui", + "target": "remix-ide", + "type": "static" + } + ], + "doc-gen": [], + "solhint": [], + "remixd": [], + "vyper": [] + } + }, + "affectedProjects": [], + "criticalPath": [] +} diff --git a/tsconfig.json b/tsconfig.json index 91a6ab5034..e771f4a3e9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,9 +11,9 @@ "resolveJsonModule": true, "experimentalDecorators": true, "importHelpers": true, - "target": "ES2015", + "target": "ES6", "esModuleInterop": true, - "module": "CommonJS", + "module": "ES6", "lib": [ "es2017", "dom", diff --git a/tsconfig.paths.json b/tsconfig.paths.json index 73a9d0ff7e..9fc27276d1 100644 --- a/tsconfig.paths.json +++ b/tsconfig.paths.json @@ -159,7 +159,11 @@ ], "@remixproject/walletconnect-plugin": [ "apps/walletconnect/src/index.ts" - ] + ], + "@remix-ui/xterm": [ + "libs/remix-ui/xterm/src/index.ts" + ], + } } } diff --git a/yarn.lock b/yarn.lock index 18ffaad87c..8ead0f4bb3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,11 @@ # yarn lockfile v1 +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + "@adraffy/ens-normalize@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.9.0.tgz#223572538f6bea336750039bb43a4016dcc8182d" @@ -411,7 +416,14 @@ dependencies: "@babel/types" "^7.16.0" -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.18.6": +"@babel/helper-module-imports@^7.10.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" + integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== + dependencies: + "@babel/types" "^7.21.4" + +"@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" integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== @@ -593,6 +605,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== +"@babel/helper-string-parser@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz#2b3eea65443c6bdc31c22d037c65f6d323b6b2bd" + integrity sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w== + "@babel/helper-string-parser@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" @@ -1632,7 +1649,14 @@ core-js-pure "^3.19.0" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.8", "@babel/runtime@^7.14.0", "@babel/runtime@^7.15.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.13.8": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.6.tgz#c05e610dc228855dc92ef1b53d07389ed8ab521d" + integrity sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.15.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.16.3" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.3.tgz#b86f0db02a04187a3c17caa77de69840165d42d5" integrity sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ== @@ -1660,13 +1684,6 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.7.6": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" - integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== - dependencies: - regenerator-runtime "^0.13.4" - "@babel/template@^7.15.4", "@babel/template@^7.20.7", "@babel/template@^7.3.3", "@babel/template@^7.4.0": version "7.20.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" @@ -1781,6 +1798,15 @@ "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" +"@babel/types@^7.21.4": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.3.tgz#0cc6af178b91490acaeb4a2f70dcbf27cdf3d8f3" + integrity sha512-P3na3xIQHTKY4L0YOG7pM8M8uoUIB910WQaSiiMCZUC2Cy8XFEQONGABFnHWBa2gpGKODTAJcNhi5Zk0sLRrzg== + dependencies: + "@babel/helper-string-parser" "^7.21.5" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.3": version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.3.tgz#d5ea892c07f2ec371ac704420f4dcdb07b5f9598" @@ -1896,6 +1922,223 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== +"@electron-forge/cli@^6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@electron-forge/cli/-/cli-6.1.1.tgz#671b81f365570a385b40d9726b3d9a027c503782" + integrity sha512-ufD9wKh35Mynj5MEKcWQKLpuIgxPvehwvykHRULi2ev8MWLCqxN4wda1Wy/cj57Uaeokf2rTbcGHGqbBX60bFQ== + dependencies: + "@electron-forge/core" "6.1.1" + "@electron-forge/shared-types" "6.1.1" + "@electron/get" "^2.0.0" + chalk "^4.0.0" + commander "^4.1.1" + debug "^4.3.1" + fs-extra "^10.0.0" + listr2 "^5.0.3" + semver "^7.2.1" + +"@electron-forge/core-utils@6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@electron-forge/core-utils/-/core-utils-6.1.1.tgz#4eaa3b3d5f4d0b888c3500e3b6f4f0b975100c2c" + integrity sha512-7Kt0o85UEzpYjWU2WQ3pVuSOnRIDfuFimCQ1bh9qym5NLrkDcIQx9sIsCFIFkWYkUY7oIuMIMOhrGA4tyWGl2w== + dependencies: + "@electron-forge/shared-types" "6.1.1" + "@electron/rebuild" "^3.2.10" + "@malept/cross-spawn-promise" "^2.0.0" + chalk "^4.0.0" + debug "^4.3.1" + find-up "^5.0.0" + fs-extra "^10.0.0" + log-symbols "^4.0.0" + semver "^7.2.1" + yarn-or-npm "^3.0.1" + +"@electron-forge/core@6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@electron-forge/core/-/core-6.1.1.tgz#09995ca65c3b35efef24695fdb8b8033585965ac" + integrity sha512-Fh1rNY1eI2wqbFXJ8eRBsJDS6gxfElgVR4nhMY+I+MZs9ddw1MFHIWwoqYjGFJKUBd9xTXCk5lkf8TwCpb4Igg== + dependencies: + "@electron-forge/core-utils" "6.1.1" + "@electron-forge/maker-base" "6.1.1" + "@electron-forge/plugin-base" "6.1.1" + "@electron-forge/publisher-base" "6.1.1" + "@electron-forge/shared-types" "6.1.1" + "@electron-forge/template-base" "6.1.1" + "@electron-forge/template-vite" "6.1.1" + "@electron-forge/template-webpack" "6.1.1" + "@electron-forge/template-webpack-typescript" "6.1.1" + "@electron/get" "^2.0.0" + "@electron/rebuild" "^3.2.10" + "@malept/cross-spawn-promise" "^2.0.0" + chalk "^4.0.0" + debug "^4.3.1" + electron-packager "^17.1.1" + fast-glob "^3.2.7" + filenamify "^4.1.0" + find-up "^5.0.0" + fs-extra "^10.0.0" + got "^11.8.5" + interpret "^3.1.1" + listr2 "^5.0.3" + lodash "^4.17.20" + log-symbols "^4.0.0" + node-fetch "^2.6.7" + progress "^2.0.3" + rechoir "^0.8.0" + resolve-package "^1.0.1" + semver "^7.2.1" + source-map-support "^0.5.13" + sudo-prompt "^9.1.1" + username "^5.1.0" + yarn-or-npm "^3.0.1" + +"@electron-forge/maker-base@6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@electron-forge/maker-base/-/maker-base-6.1.1.tgz#2c8fdaaaa28ff39fbf4ff26e664dc79265f96b49" + integrity sha512-qEW8vuSq6/r1rKh7JENK9yGmueymMzbm817GDk5usHia5o7otHYY4JMkdzZaKww56Ed/Ege2ch6LEYqYGTfl/Q== + dependencies: + "@electron-forge/shared-types" "6.1.1" + fs-extra "^10.0.0" + which "^2.0.2" + +"@electron-forge/plugin-base@6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@electron-forge/plugin-base/-/plugin-base-6.1.1.tgz#73f4688654cd29591af533be53c2a3a656405331" + integrity sha512-xZWZxvD2fQYnkFREK+46FS59vMEsPFINwydtD24QGTBoRMOKXkfXv16yN4eexVi+02Hj6mihYY8zhxJi56OmxA== + dependencies: + "@electron-forge/shared-types" "6.1.1" + +"@electron-forge/publisher-base@6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@electron-forge/publisher-base/-/publisher-base-6.1.1.tgz#45e53554613b9ff9bca18cd2b4c8aab5ba85f099" + integrity sha512-vxGzx2G7bWhz2G091MzNh+LHGrOM4gmp8FqW2VNpFJfFEYODr6D9KxitUihKAWc79bwG+YywvISXEMy5IBQu0Q== + dependencies: + "@electron-forge/shared-types" "6.1.1" + +"@electron-forge/shared-types@6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@electron-forge/shared-types/-/shared-types-6.1.1.tgz#f08cf783bf0a086331784b9f13110b4fade84846" + integrity sha512-sFQQ2ldMq5mlNv4m7lZOZLf9aOn6MLNc8QVeTzOBQ+psxI3mVTDjb+/Lhs/jU8dm2igVfEqAmlj57Gi+C4u4Vw== + dependencies: + "@electron/rebuild" "^3.2.10" + electron-packager "^17.1.1" + listr2 "^5.0.3" + +"@electron-forge/template-base@6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@electron-forge/template-base/-/template-base-6.1.1.tgz#ff6f32735491a235f404bf0cb069c8737fbfc4d4" + integrity sha512-i4EZHXIFTo+nJXJHPS1k9PAnWKEKGC4kMUvIsyYKEu+NrOTcGLMT4FIRM9VYe1nGarQLd486/274S3b2SaCUuw== + dependencies: + "@electron-forge/shared-types" "6.1.1" + "@malept/cross-spawn-promise" "^2.0.0" + debug "^4.3.1" + fs-extra "^10.0.0" + username "^5.1.0" + +"@electron-forge/template-vite@6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@electron-forge/template-vite/-/template-vite-6.1.1.tgz#b4eff93c1f9c4e6eeb60d0c71359c36f0c485a13" + integrity sha512-/6Sv7trkfjJR9LI7i83xmddVhi32pDlDE2kwlCkRgcoE2jGoW0fJU1BNfjNWy61Rd1wNzgrpfjMTPQlMnwHb4g== + dependencies: + "@electron-forge/shared-types" "6.1.1" + "@electron-forge/template-base" "6.1.1" + fs-extra "^10.0.0" + +"@electron-forge/template-webpack-typescript@6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@electron-forge/template-webpack-typescript/-/template-webpack-typescript-6.1.1.tgz#422a9e93daa9ed957dc3ee28d9d5092a8ee3397b" + integrity sha512-Ck7EgqoqfUL4r4NCioTsQT1/EFNCUqnsNd71MboU1RUvRbcrqpYvkoKk99+9QvxBrljMQp935gTieY7HADWQ9A== + dependencies: + "@electron-forge/shared-types" "6.1.1" + "@electron-forge/template-base" "6.1.1" + fs-extra "^10.0.0" + +"@electron-forge/template-webpack@6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@electron-forge/template-webpack/-/template-webpack-6.1.1.tgz#34413a0c21a68b70ea06b00c8b9d76df2cf6cbab" + integrity sha512-M3hTEF3iV6VYufassMilautoOYTLbqD06U1u3B6MDZVn74xAzprIZ+5EgrvQR33N+E3PyDpkgyMh+FJtWCo0/A== + dependencies: + "@electron-forge/shared-types" "6.1.1" + "@electron-forge/template-base" "6.1.1" + fs-extra "^10.0.0" + +"@electron/asar@^3.2.1": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.2.4.tgz#7e8635a3c4f6d8b3f8ae6efaf5ecb9fbf3bd9864" + integrity sha512-lykfY3TJRRWFeTxccEKdf1I6BLl2Plw81H0bbp4Fc5iEc67foDCa5pjJQULVgo0wF+Dli75f3xVcdb/67FFZ/g== + dependencies: + chromium-pickle-js "^0.2.0" + commander "^5.0.0" + glob "^7.1.6" + minimatch "^3.0.4" + +"@electron/get@^2.0.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.2.tgz#ae2a967b22075e9c25aaf00d5941cd79c21efd7e" + integrity sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g== + dependencies: + debug "^4.1.1" + env-paths "^2.2.0" + fs-extra "^8.1.0" + got "^11.8.5" + progress "^2.0.3" + semver "^6.2.0" + sumchecker "^3.0.1" + optionalDependencies: + global-agent "^3.0.0" + +"@electron/notarize@^1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@electron/notarize/-/notarize-1.2.3.tgz#38056a629e5a0b5fd56c975c4828c0f74285b644" + integrity sha512-9oRzT56rKh5bspk3KpAVF8lPKHYQrBnRwcgiOeR0hdilVEQmszDaAu0IPCPrwwzJN0ugNs0rRboTreHMt/6mBQ== + dependencies: + debug "^4.1.1" + fs-extra "^9.0.1" + +"@electron/osx-sign@^1.0.1": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@electron/osx-sign/-/osx-sign-1.0.4.tgz#8e91442846471636ca0469426a82b253b9170151" + integrity sha512-xfhdEcIOfAZg7scZ9RQPya1G1lWo8/zMCwUXAulq0SfY7ONIW+b9qGyKdMyuMctNYwllrIS+vmxfijSfjeh97g== + dependencies: + compare-version "^0.1.2" + debug "^4.3.4" + fs-extra "^10.0.0" + isbinaryfile "^4.0.8" + minimist "^1.2.6" + plist "^3.0.5" + +"@electron/rebuild@^3.2.10": + version "3.2.13" + resolved "https://registry.yarnpkg.com/@electron/rebuild/-/rebuild-3.2.13.tgz#98fbb98981b1a86162546a2ab91b2355569cca4c" + integrity sha512-DH9Ol4JCnHDYVOD0fKWq+Qqbn/0WU1O6QR0mIpMXEVU4YFM4PlaqNC9K36mGShNBxxGFotZCMDrB1wl/iHM12g== + dependencies: + "@malept/cross-spawn-promise" "^2.0.0" + chalk "^4.0.0" + debug "^4.1.1" + detect-libc "^2.0.1" + fs-extra "^10.0.0" + got "^11.7.0" + node-abi "^3.0.0" + node-api-version "^0.1.4" + node-gyp "^9.0.0" + ora "^5.1.0" + semver "^7.3.5" + tar "^6.0.5" + yargs "^17.0.1" + +"@electron/universal@^1.3.2": + version "1.3.4" + resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.3.4.tgz#bccd94b635d7c85eeed5eabba457eb4ed2be2777" + integrity sha512-BdhBgm2ZBnYyYRLRgOjM5VHkyFItsbggJ0MHycOjKWdFGYwK97ZFXH54dTvUWEfha81vfvwr5On6XBjt99uDcg== + dependencies: + "@electron/asar" "^3.2.1" + "@malept/cross-spawn-promise" "^1.1.0" + debug "^4.3.1" + dir-compare "^3.0.0" + fs-extra "^9.0.1" + minimatch "^3.0.4" + plist "^3.0.4" + "@erebos/bzz-node@^0.13.0": version "0.13.0" resolved "https://registry.yarnpkg.com/@erebos/bzz-node/-/bzz-node-0.13.0.tgz#495240c8b4fa67fa920c52a2d8db2cf82e673e1a" @@ -1914,21 +2157,148 @@ dependencies: "@babel/runtime" "^7.8.3" -"@eslint/eslintrc@^1.3.3": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" - integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg== +"@esbuild/android-arm64@0.19.6": + version "0.19.6" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.6.tgz#13d98a34bbbde4237867cc232307a20ded139b6f" + integrity sha512-KQ/hbe9SJvIJ4sR+2PcZ41IBV+LPJyYp6V1K1P1xcMRup9iYsBoQn4MzE3mhMLOld27Au2eDcLlIREeKGUXpHQ== + +"@esbuild/android-arm@0.19.6": + version "0.19.6" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.6.tgz#68898d949672c56f10451f540fd92301dc713fb3" + integrity sha512-muPzBqXJKCbMYoNbb1JpZh/ynl0xS6/+pLjrofcR3Nad82SbsCogYzUE6Aq9QT3cLP0jR/IVK/NHC9b90mSHtg== + +"@esbuild/android-x64@0.19.6": + version "0.19.6" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.6.tgz#51a0ab83680dedc6dd1ae26133def26b178ed3a1" + integrity sha512-VVJVZQ7p5BBOKoNxd0Ly3xUM78Y4DyOoFKdkdAe2m11jbh0LEU4bPles4e/72EMl4tapko8o915UalN/5zhspg== + +"@esbuild/darwin-arm64@0.19.6": + version "0.19.6" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.6.tgz#2883f14197111febb118c0463c080930a30883e5" + integrity sha512-91LoRp/uZAKx6ESNspL3I46ypwzdqyDLXZH7x2QYCLgtnaU08+AXEbabY2yExIz03/am0DivsTtbdxzGejfXpA== + +"@esbuild/darwin-x64@0.19.6": + version "0.19.6" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.6.tgz#400bf20f9a35a7d68a17f5898c0f9ecb099f062b" + integrity sha512-QCGHw770ubjBU1J3ZkFJh671MFajGTYMZumPs9E/rqU52md6lIil97BR0CbPq6U+vTh3xnTNDHKRdR8ggHnmxQ== + +"@esbuild/freebsd-arm64@0.19.6": + version "0.19.6" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.6.tgz#8af07bd848afa2470b8a2339b203ce29a721152b" + integrity sha512-J53d0jGsDcLzWk9d9SPmlyF+wzVxjXpOH7jVW5ae7PvrDst4kiAz6sX+E8btz0GB6oH12zC+aHRD945jdjF2Vg== + +"@esbuild/freebsd-x64@0.19.6": + version "0.19.6" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.6.tgz#ae0230860e27df204a616671e028ff8fdffa009a" + integrity sha512-hn9qvkjHSIB5Z9JgCCjED6YYVGCNpqB7dEGavBdG6EjBD8S/UcNUIlGcB35NCkMETkdYwfZSvD9VoDJX6VeUVA== + +"@esbuild/linux-arm64@0.19.6": + version "0.19.6" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.6.tgz#3042bc423a978deab44a72244b863f743fd9fda1" + integrity sha512-HQCOrk9XlH3KngASLaBfHpcoYEGUt829A9MyxaI8RMkfRA8SakG6YQEITAuwmtzFdEu5GU4eyhKcpv27dFaOBg== + +"@esbuild/linux-arm@0.19.6": + version "0.19.6" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.6.tgz#50a537de609315979509120b0181882978294db1" + integrity sha512-G8IR5zFgpXad/Zp7gr7ZyTKyqZuThU6z1JjmRyN1vSF8j0bOlGzUwFSMTbctLAdd7QHpeyu0cRiuKrqK1ZTwvQ== + +"@esbuild/linux-ia32@0.19.6": + version "0.19.6" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.6.tgz#f99c48b597facf9cbf8e1a2522ce379b2ad7b0c4" + integrity sha512-22eOR08zL/OXkmEhxOfshfOGo8P69k8oKHkwkDrUlcB12S/sw/+COM4PhAPT0cAYW/gpqY2uXp3TpjQVJitz7w== + +"@esbuild/linux-loong64@0.19.6": + version "0.19.6" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.6.tgz#9fe79be31ce305564aa62da190f38e199d6d26b7" + integrity sha512-82RvaYAh/SUJyjWA8jDpyZCHQjmEggL//sC7F3VKYcBMumQjUL3C5WDl/tJpEiKtt7XrWmgjaLkrk205zfvwTA== + +"@esbuild/linux-mips64el@0.19.6": + version "0.19.6" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.6.tgz#5a922dad90fc8a83fd0631c136b46128153ffb6f" + integrity sha512-8tvnwyYJpR618vboIv2l8tK2SuK/RqUIGMfMENkeDGo3hsEIrpGldMGYFcWxWeEILe5Fi72zoXLmhZ7PR23oQA== + +"@esbuild/linux-ppc64@0.19.6": + version "0.19.6" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.6.tgz#a7fccf924824999b301546843adb4f51051965e8" + integrity sha512-Qt+D7xiPajxVNk5tQiEJwhmarNnLPdjXAoA5uWMpbfStZB0+YU6a3CtbWYSy+sgAsnyx4IGZjWsTzBzrvg/fMA== + +"@esbuild/linux-riscv64@0.19.6": + version "0.19.6" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.6.tgz#41d2db11550662d6c03902d9d8d26b0ed5bb8d55" + integrity sha512-lxRdk0iJ9CWYDH1Wpnnnc640ajF4RmQ+w6oHFZmAIYu577meE9Ka/DCtpOrwr9McMY11ocbp4jirgGgCi7Ls/g== + +"@esbuild/linux-s390x@0.19.6": + version "0.19.6" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.6.tgz#d7a843a2620e73c5c9d65c482e2fbddc7e0f7753" + integrity sha512-MopyYV39vnfuykHanRWHGRcRC3AwU7b0QY4TI8ISLfAGfK+tMkXyFuyT1epw/lM0pflQlS53JoD22yN83DHZgA== + +"@esbuild/linux-x64@0.19.6": + version "0.19.6" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.6.tgz#d3f20f0c2bdaa1b9ed1c0df7db034771e7aa5234" + integrity sha512-UWcieaBzsN8WYbzFF5Jq7QULETPcQvlX7KL4xWGIB54OknXJjBO37sPqk7N82WU13JGWvmDzFBi1weVBajPovg== + +"@esbuild/netbsd-x64@0.19.6": + version "0.19.6" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.6.tgz#6108d7270599ee37cd57bb14e4516a83541885d5" + integrity sha512-EpWiLX0fzvZn1wxtLxZrEW+oQED9Pwpnh+w4Ffv8ZLuMhUoqR9q9rL4+qHW8F4Mg5oQEKxAoT0G+8JYNqCiR6g== + +"@esbuild/openbsd-x64@0.19.6": + version "0.19.6" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.6.tgz#b1b5aaa2c9028e90a2bef6774a9c67451f53f164" + integrity sha512-fFqTVEktM1PGs2sLKH4M5mhAVEzGpeZJuasAMRnvDZNCV0Cjvm1Hu35moL2vC0DOrAQjNTvj4zWrol/lwQ8Deg== + +"@esbuild/sunos-x64@0.19.6": + version "0.19.6" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.6.tgz#b51b648cea77c62b1934a4fdcfee7aaa9de174cb" + integrity sha512-M+XIAnBpaNvaVAhbe3uBXtgWyWynSdlww/JNZws0FlMPSBy+EpatPXNIlKAdtbFVII9OpX91ZfMb17TU3JKTBA== + +"@esbuild/win32-arm64@0.19.6": + version "0.19.6" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.6.tgz#34e5665f239047c302c8d153406c87db22afd58a" + integrity sha512-2DchFXn7vp/B6Tc2eKdTsLzE0ygqKkNUhUBCNtMx2Llk4POIVMUq5rUYjdcedFlGLeRe1uLCpVvCmE+G8XYybA== + +"@esbuild/win32-ia32@0.19.6": + version "0.19.6" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.6.tgz#f7aaebe325e67f44c0a738e80a98221504677b4a" + integrity sha512-PBo/HPDQllyWdjwAVX+Gl2hH0dfBydL97BAH/grHKC8fubqp02aL4S63otZ25q3sBdINtOBbz1qTZQfXbP4VBg== + +"@esbuild/win32-x64@0.19.6": + version "0.19.6" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.6.tgz#7134e5dea1f5943b013e96fc34f9638a5f3d7e3e" + integrity sha512-OE7yIdbDif2kKfrGa+V0vx/B3FJv2L4KnIiLlvtibPyO9UkgO3rzYE0HhpREo2vmJ1Ixq1zwm9/0er+3VOSZJA== + +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.4.0": + version "4.5.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" + integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== + +"@eslint/eslintrc@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.0.tgz#82256f164cc9e0b59669efc19d57f8092706841d" + integrity sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.4.0" - globals "^13.15.0" + espree "^9.6.0" + globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" js-yaml "^4.1.0" minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@eslint/js@8.44.0": + version "8.44.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.44.0.tgz#961a5903c74139390478bdc808bcde3fc45ab7af" + integrity sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw== + "@ethereumjs/block@^4.2.0", "@ethereumjs/block@^4.2.2": version "4.2.2" resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-4.2.2.tgz#fddecd34ed559f84ab8eb13098a6dee51a1360ae" @@ -2577,14 +2947,19 @@ resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz#ecda5712b61ac852c760d8b3c79c96adca5554e5" integrity sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg== -"@humanwhocodes/config-array@^0.11.6": - version "0.11.6" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.6.tgz#6a51d603a3aaf8d4cf45b42b3f2ac9318a4adc4b" - integrity sha512-jJr+hPTJYKyDILJfhNSHsjiwXYf26Flsz8DvNndOsHs5pwSnpGUEy8yzF0JYhCEvTDdV2vuOK5tt8BVhwO5/hg== +"@gar/promisify@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + +"@humanwhocodes/config-array@^0.11.10": + version "0.11.10" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" + integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" - minimatch "^3.0.4" + minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" @@ -3610,6 +3985,20 @@ dependencies: "@lit-labs/ssr-dom-shim" "^1.0.0" +"@malept/cross-spawn-promise@^1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz#504af200af6b98e198bce768bc1730c6936ae01d" + integrity sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ== + dependencies: + cross-spawn "^7.0.1" + +"@malept/cross-spawn-promise@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz#d0772de1aa680a0bfb9ba2f32b4c828c7857cb9d" + integrity sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg== + dependencies: + cross-spawn "^7.0.1" + "@metamask/eth-sig-util@^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" @@ -3646,19 +4035,19 @@ react-lifecycles-compat "~3.0.4" react-textarea-autosize "~8.3.2" -"@monaco-editor/loader@^1.3.3": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.3.3.tgz#7f1742bd3cc21c0362a46a4056317f6e5215cfca" - integrity sha512-6KKF4CTzcJiS8BJwtxtfyYt9shBiEv32ateQ9T4UVogwn4HM/uPo9iJd2Dmbkpz8CM6Y0PDUpjnZzCwC+eYo2Q== +"@monaco-editor/loader@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.4.0.tgz#f08227057331ec890fa1e903912a5b711a2ad558" + integrity sha512-00ioBig0x642hytVspPl7DbQyaSWRaolYie/UFNjoTdvoKPzo6xrXLhTk9ixgIKcLH5b5vDOjVNiGyY+uDCUlg== dependencies: state-local "^1.0.6" -"@monaco-editor/react@4.5.1": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-4.5.1.tgz#fbc76c692aee9a33b9ab24ae0c5f219b8f002fdb" - integrity sha512-NNDFdP+2HojtNhCkRfE6/D6ro6pBNihaOzMbGK84lNWzRu+CfBjwzGt4jmnqimLuqp5yE5viHS2vi+QOAnD5FQ== +"@monaco-editor/react@4.6.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-4.6.0.tgz#bcc68671e358a21c3814566b865a54b191e24119" + integrity sha512-RFkU9/i7cN2bsq/iTkurMWOEErmYcY6JiQI3Jn+WeR/FGISH8JbHERjpS9oRuSOPvDMJI0Z8nJeKkbOs9sBYQw== dependencies: - "@monaco-editor/loader" "^1.3.3" + "@monaco-editor/loader" "^1.4.0" "@motionone/animation@^10.15.1": version "10.15.1" @@ -4024,6 +4413,22 @@ "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.0" "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.0" +"@npmcli/fs@^2.1.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" + integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== + dependencies: + "@gar/promisify" "^1.1.3" + semver "^7.3.5" + +"@npmcli/move-file@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" + integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + "@nrwl/cli@15.7.1": version "15.7.1" resolved "https://registry.yarnpkg.com/@nrwl/cli/-/cli-15.7.1.tgz#e6b874806f6188439b9e81cf1bb45216c2d89bb7" @@ -4031,13 +4436,6 @@ dependencies: nx "15.7.1" -"@nrwl/cli@15.7.2", "@nrwl/cli@^15.7.1": - version "15.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/cli/-/cli-15.7.2.tgz#fd705b022e628f2ed23d9fc5c3542e4d652b8710" - integrity sha512-A/72FAW1e0ku8YB/PaCqN9BpVvciO83MS5F5bvX5PA8xCNqe1+iXp/5T2ASnN2lB9zR3fQJmvR7mHKTKQlqQQQ== - dependencies: - nx "15.7.2" - "@nrwl/cypress@15.7.1": version "15.7.1" resolved "https://registry.yarnpkg.com/@nrwl/cypress/-/cypress-15.7.1.tgz#dfbdeb97fbaa70cb209476790e2ae40bdb1dad37" @@ -4061,7 +4459,7 @@ semver "7.3.4" tslib "^2.3.0" -"@nrwl/eslint-plugin-nx@^15.7.1": +"@nrwl/eslint-plugin-nx@15.7.1": version "15.7.1" resolved "https://registry.yarnpkg.com/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-15.7.1.tgz#9c769b7be35f73260d3d027ef1cfa2b15caed36f" integrity sha512-6TGCf+SDWNO1Z/uyQaazqakb3iEUWKXUAUsXrZUWrdHca8/Ql9QQHNV6wbQ3ciT8zrV6TG0d9P+uAX97oORwQQ== @@ -4146,91 +4544,46 @@ resolved "https://registry.yarnpkg.com/@nrwl/nx-darwin-arm64/-/nx-darwin-arm64-15.7.1.tgz#7c65e79988356eb8c55560a77870f583d9ad6f0c" integrity sha512-YaNq1kP0xoaG2SDTjAzc0ZXAzRHE4obnEtVbisMzGRJkMld7SiOzYZAoaLJI6mZJuc7cIzUlA+wFkE2e21q5tQ== -"@nrwl/nx-darwin-arm64@15.7.2": - version "15.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-darwin-arm64/-/nx-darwin-arm64-15.7.2.tgz#08cf48f474f8e4e0d02998e4f095ba8c60b5c15a" - integrity sha512-F82exjuqkAkElSTxEcTFeLMhHpbGiccfTQh2VjXMS+ONldxM+Kd7atJjtUG8wKNXfg0lxxjjAdnzLy3iBuN/HQ== - "@nrwl/nx-darwin-x64@15.7.1": version "15.7.1" resolved "https://registry.yarnpkg.com/@nrwl/nx-darwin-x64/-/nx-darwin-x64-15.7.1.tgz#bc7a1bf3455a7cf4bd1242015ecd959986db8040" integrity sha512-G/0joeAQfZm4FuqaDyOAam912EfVS6mlG1gFrzp3P/kzzE+gxt/I+iQHNmEOl8Dnp4ercTgW6epUEQ03teRLOA== -"@nrwl/nx-darwin-x64@15.7.2": - version "15.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-darwin-x64/-/nx-darwin-x64-15.7.2.tgz#674941b2fc157df70f6b435e3193a6053f261a08" - integrity sha512-MNT7Bxz6yhoVLCgGpR0NtVkj20SER1CbrCaY7tmsKVNY9iA/EOZhz9qa3LeA1KZ4lw8Gpi2vD42mOngn7Mwr7w== - "@nrwl/nx-linux-arm-gnueabihf@15.7.1": version "15.7.1" resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-15.7.1.tgz#e73f00a648ba4e0f293533d74a2b11519c365dcf" integrity sha512-WeZndiNyAPolRc08C4LLY7y+b3g9wAsJVVTWugW9PyaTMD19KY6oFkNG5gg1W0InoGISazW5fUissE+911kgog== -"@nrwl/nx-linux-arm-gnueabihf@15.7.2": - version "15.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-15.7.2.tgz#e647a52c503483ad586116af79bee56fc9b3e736" - integrity sha512-QGyPkYnZ9LnUnuCzrP50bwsMJ9n6r8K2bNC1sQQwioijY+4MHNL+bMTOGWc8+lYBP7Ju3gpTqozGV3FQVkaM2w== - "@nrwl/nx-linux-arm64-gnu@15.7.1": version "15.7.1" resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-15.7.1.tgz#f6eddd0b295b7e2286b060fc67ae9afa8d010b3a" integrity sha512-efDPQl2Z1YLnUlEKyu7lsvRnFIRXmvnbkH2nRv3HNHVufnHjjQ41UBw2Gqz4WUrEpmBz2Xq31cYUZluUP7/o6Q== -"@nrwl/nx-linux-arm64-gnu@15.7.2": - version "15.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-15.7.2.tgz#43fe691eb56241357242bb85e86bb34c03f08b5b" - integrity sha512-HqufFVIvuunfChEFGkIhsLhhQjWLTFcCH2aQBSNesHpm6AhFVRGyokNu+PT6NNobr+BTrqJMocBqNQR1uvSyRQ== - "@nrwl/nx-linux-arm64-musl@15.7.1": version "15.7.1" resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-arm64-musl/-/nx-linux-arm64-musl-15.7.1.tgz#ba4bb123736816caba01312b57e0738bf4d98500" integrity sha512-Esv+ko6vMrI0HLnIXs76up7zUCaDfjArgn2TfMxvPjDEp4qmExiI8gmSh5JM1kC0MkHb4HghCnsSQ86Gg1BRiQ== -"@nrwl/nx-linux-arm64-musl@15.7.2": - version "15.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-arm64-musl/-/nx-linux-arm64-musl-15.7.2.tgz#8fa5f886f17f2636acdbce1f9b2f45cd33d1f56a" - integrity sha512-9B8q6I/OVyQuYe+Yg2wNyxza/CsbvejIUsrK3QGGWUwHlkklqOSmUOHyTrcyMHUSped6CWPyKdIywngYOQzltQ== - "@nrwl/nx-linux-x64-gnu@15.7.1": version "15.7.1" resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-x64-gnu/-/nx-linux-x64-gnu-15.7.1.tgz#69b6caf42ffadbfc6de403a6b230d87b0cb0c9b4" integrity sha512-9ZkeCHhk+a3ok8CBEcbIheWrlp+gY1KdhmHOksJuDsHTcRMirbZ9HWm+/UIYB2FVaEENCBgcA4akwXRDaxrmYw== -"@nrwl/nx-linux-x64-gnu@15.7.2": - version "15.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-x64-gnu/-/nx-linux-x64-gnu-15.7.2.tgz#3e40aff8a4b0bce02dfc80f0ac4a16e5fbc11fa3" - integrity sha512-8/6WtQn4derYKUWu5SxWWM+1dGihSZXMhDW9l/sXOr/qbMZu3XBmM2XZSguw/+p9gEVHcMmN0+D+Cai+q6/vDQ== - "@nrwl/nx-linux-x64-musl@15.7.1": version "15.7.1" resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-x64-musl/-/nx-linux-x64-musl-15.7.1.tgz#458240b013b7fe4fb3236ed4d97d0882466f9ca5" integrity sha512-FOs8FhcACKfYjL5l/mIHUESs25KPsZsp3TWrpCYgQNkrvNV9lWbrQ+h9acWf23hR2FYVk7xKVo4wFYsUqF+DbA== -"@nrwl/nx-linux-x64-musl@15.7.2": - version "15.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-x64-musl/-/nx-linux-x64-musl-15.7.2.tgz#8303afde8e9c78aa0a02b0c9157d85a34c808592" - integrity sha512-c5SbqYZZBeBHhH5E30xwb4cHzCMVa/GQMCyTpZgsS/AHAPHbdkv+pO6bxxALvLPTyimcub7V+xbLCL7rgALzyw== - "@nrwl/nx-win32-arm64-msvc@15.7.1": version "15.7.1" resolved "https://registry.yarnpkg.com/@nrwl/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-15.7.1.tgz#0aed542e90c128297ff4053daacf134d2f5439ab" integrity sha512-JEhy0ac+ivhIdAPWqEfAN9EqFznKA5vt4oVjIqjDysqgzN9GBKOeo7gphdii9WyqrIKEbOs1L++ADWXw1gev6Q== -"@nrwl/nx-win32-arm64-msvc@15.7.2": - version "15.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-15.7.2.tgz#c3f44bfc8a5b124a23910de0974b5c8666d50cbb" - integrity sha512-gWD/+gSO3XBma8PHX1Dp86fM6EcntHFfa7n/BISwDFkZ19MfV/gK6HbO847fkD6I34/IcDM/z1PsFwoIpTeoow== - "@nrwl/nx-win32-x64-msvc@15.7.1": version "15.7.1" resolved "https://registry.yarnpkg.com/@nrwl/nx-win32-x64-msvc/-/nx-win32-x64-msvc-15.7.1.tgz#2436f248306b75853ab9b872295366de9ae3ad7b" integrity sha512-GLh5TXKViRb55jBviZSZweavilUr2frmb/8iv3Fz7MPS6VvA+axIqNhuVcTJP1H3C/1yt3Nx5wwsXdWgg3mZpw== -"@nrwl/nx-win32-x64-msvc@15.7.2": - version "15.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-win32-x64-msvc/-/nx-win32-x64-msvc-15.7.2.tgz#cb622a96c0f85c37973420c4817e383783237a84" - integrity sha512-ARE4qGPgk+e+pSm0uPhHan5UCRtwNYc5ddVNS88NFrVoDTPm5MxYLGdvLnshWWio/Bx526FcwUMSCBWSW8HIFw== - "@nrwl/react@15.7.1": version "15.7.1" resolved "https://registry.yarnpkg.com/@nrwl/react/-/react-15.7.1.tgz#28821c16669790695540ba2fabbe74be08af4476" @@ -4277,13 +4630,6 @@ dependencies: nx "15.7.1" -"@nrwl/tao@15.7.2", "@nrwl/tao@^15.7.1": - version "15.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-15.7.2.tgz#6c9264cd815d15d02710202e5046aba3e68156db" - integrity sha512-srx9heMIt/QIyuqfewiVYbRpFcD/2pHkTkrEEUKspPd25kzAL2adcAITQKVCHI7/VS2sPdDR67pVsGQPZFBMRQ== - dependencies: - nx "15.7.2" - "@nrwl/web@15.7.1": version "15.7.1" resolved "https://registry.yarnpkg.com/@nrwl/web/-/web-15.7.1.tgz#5cc2d503e80b5f8382be17400c32b94063e83d22" @@ -4349,7 +4695,7 @@ webpack-node-externals "^3.0.0" webpack-subresource-integrity "^5.1.0" -"@nrwl/workspace@15.7.1", "@nrwl/workspace@^15.7.1": +"@nrwl/workspace@15.7.1": version "15.7.1" resolved "https://registry.yarnpkg.com/@nrwl/workspace/-/workspace-15.7.1.tgz#b2e58da79186b32673d869ea00ad6dd288c99255" integrity sha512-vwqcPnlTdgQfWLdG9UkZqwXDQy1P/vENHzUlN1dKeml56Vdjf3LGFiHnJ3LdRYlBSfwPMQNZQHQz167laYw1eg== @@ -4780,10 +5126,10 @@ resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== -"@popperjs/core@^2.8.6": - version "2.10.2" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.10.2.tgz#0798c03351f0dea1a5a4cabddf26a55a7cbee590" - integrity sha512-IXf3XA7+XyN7CP9gGh/XB0UxVMlvARGEgGXLubFICsUMGz6Q+DU+i4gGlpOxTjKvXjkJDJC8YdqdKkDj9qZHEQ== +"@popperjs/core@^2.11.6": + version "2.11.8" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" + integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" @@ -4851,63 +5197,87 @@ unbzip2-stream "1.4.3" yargs "17.7.1" -"@remixproject/engine-web@0.3.33": - version "0.3.33" - resolved "https://registry.yarnpkg.com/@remixproject/engine-web/-/engine-web-0.3.33.tgz#2a444c327cca5bd54bb1e12e2a937c24dde8703f" - integrity sha512-YP62Cy6LSYiSw7Aon8ukS/Ut+fX34NIvRPPaJNq0r8F3IgB9vXAuKgOLs5QoIbrDJNb0ddM+0L2sIDWiNN1RtQ== +"@remix-run/router@1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.14.0.tgz#9bc39a5a3a71b81bdb310eba6def5bc3966695b7" + integrity sha512-WOHih+ClN7N8oHk9N4JUiMxQJmRVaOxcg8w7F/oHUXzJt920ekASLI/7cYX8XkntDWRhLZtsk6LbGrkgOAvi5A== + +"@remixproject/engine-electron@0.3.42": + version "0.3.42" + resolved "https://registry.yarnpkg.com/@remixproject/engine-electron/-/engine-electron-0.3.42.tgz#12328f762f3a2969a55abda58c9f3307143bb03b" + integrity sha512-rtvHtNPfAUUxDEFeHd2Wm6M7ee6Tx8uDhprgA9PRxiL3WjJg39PVTCm6X4Y3hpPdiqFvC56cTW30q5Fsg8X8dQ== dependencies: - "@remixproject/engine" "0.3.33" - "@remixproject/plugin-api" "0.3.33" - "@remixproject/plugin-utils" "0.3.33" + "@remixproject/engine" "0.3.42" + "@remixproject/plugin-api" "0.3.42" + "@remixproject/plugin-utils" "0.3.42" -"@remixproject/engine@0.3.33": - version "0.3.33" - resolved "https://registry.yarnpkg.com/@remixproject/engine/-/engine-0.3.33.tgz#c3f15e5eefbd7bc04dda7aee776fa3f3ad460703" - integrity sha512-IoWIERfoT407nYcXPJZR03LOBXA3cbAxFXvhmxYrUh658jumljxTwH+SIAbIGew/kKtu0TXyTOr8RBaOb1cEog== +"@remixproject/engine-web@0.3.42": + version "0.3.42" + resolved "https://registry.yarnpkg.com/@remixproject/engine-web/-/engine-web-0.3.42.tgz#1221666a43d33c73119df97e6f65ab908fc2e80d" + integrity sha512-FtKfXOLY3mxHtkgdEKargup17N4w9Qqniiwxec5193zO6nR0wlBz5fB8ClKUp3V1boiQAg7fEOJv01QZ4UUTgw== dependencies: - "@remixproject/plugin-api" "0.3.33" - "@remixproject/plugin-utils" "0.3.33" + "@remixproject/engine" "0.3.42" + "@remixproject/plugin-api" "0.3.42" + "@remixproject/plugin-utils" "0.3.42" -"@remixproject/plugin-api@0.3.33": - version "0.3.33" - resolved "https://registry.yarnpkg.com/@remixproject/plugin-api/-/plugin-api-0.3.33.tgz#29699f980ea00bebf720961cc0e78887e03903ec" - integrity sha512-fBEbRr6/mgQdfNdRqYQL3yewsPfTxV41F509CngbD6YdY5YKBihJhfGFHbd2rKSyXOgBiHIbe0SsV3OXpFdWnw== +"@remixproject/engine@0.3.42": + version "0.3.42" + resolved "https://registry.yarnpkg.com/@remixproject/engine/-/engine-0.3.42.tgz#30606ea9c6b6d16a14eb71480ad450e82bac18dd" + integrity sha512-5t0H7SLxzyy03FAm7OSVLaiufrOYRinICAY3LRZDIqTu2wWeNQ/MTuBsfzBv0erzq8F/07rRyksbaPQdeQKoOw== dependencies: - "@remixproject/plugin-utils" "0.3.33" + "@remixproject/plugin-api" "0.3.42" + "@remixproject/plugin-utils" "0.3.42" -"@remixproject/plugin-utils@0.3.33": - version "0.3.33" - resolved "https://registry.yarnpkg.com/@remixproject/plugin-utils/-/plugin-utils-0.3.33.tgz#7b697403031598276baaf16bb82d6c62062053fc" - integrity sha512-cAo21ot4/G5BkN8ypDwg8MMCrEmLdXwMd3lQZUeB5enPC3KxmzQz71+OgEYl718Hwy+GtHaLq17FEXCHC5YV9w== +"@remixproject/plugin-api@0.3.42": + version "0.3.42" + resolved "https://registry.yarnpkg.com/@remixproject/plugin-api/-/plugin-api-0.3.42.tgz#c64d8b75a139d4e5cc342861d288d638818a8081" + integrity sha512-q1YLSAeluuTaLZDO2iwn3k3wW4Ii/FFVMt/5IoB8bId7pWLyVe4C+QtntrIpoRnfa8D1Hi6XEE3Sq0l5W2knMQ== + dependencies: + "@remixproject/plugin-utils" "0.3.42" + +"@remixproject/plugin-electron@0.3.42": + version "0.3.42" + resolved "https://registry.yarnpkg.com/@remixproject/plugin-electron/-/plugin-electron-0.3.42.tgz#e3a230593c5ec5d9f88ef6e6bb5a8a0d0c52e6ed" + integrity sha512-Raa/A6raZ79VRAh4GYPxD74ZXy4W1JqocnR23AV/WVVjefF/5EsmjBFyCGJLFW9cN53+QeB968T3VFNBjHtaUQ== + dependencies: + "@remixproject/engine" "0.3.42" + "@remixproject/plugin" "0.3.42" + "@remixproject/plugin-api" "0.3.42" + "@remixproject/plugin-utils" "0.3.42" + +"@remixproject/plugin-utils@0.3.42": + version "0.3.42" + resolved "https://registry.yarnpkg.com/@remixproject/plugin-utils/-/plugin-utils-0.3.42.tgz#4ac4b4aaa15e14f1a905236645a4813a63b00c9c" + integrity sha512-4SkvanwKTxZ7iffTkjwxFqqXo9XLl1swc4SIyW02WrzXAOYPKZ8Vj48N1CIcTA+HqZtnoKAHlQklYcegDtL2sw== dependencies: tslib "2.0.1" -"@remixproject/plugin-webview@0.3.33": - version "0.3.33" - resolved "https://registry.yarnpkg.com/@remixproject/plugin-webview/-/plugin-webview-0.3.33.tgz#97393ee1c9511009f5f299698987e29f946c106b" - integrity sha512-cMwpRzgL7rfTQKlLuTuyYyFvo4hiZ6nsDX9FfLRjGJpgCDUsSmOA0JvGv+/GsyZvpSo4FXL/0TQKTgm0t78Ocg== +"@remixproject/plugin-webview@0.3.42": + version "0.3.42" + resolved "https://registry.yarnpkg.com/@remixproject/plugin-webview/-/plugin-webview-0.3.42.tgz#08febdcd1b61e8296128fdb4130d99415e8a63dc" + integrity sha512-Do+TmHDMirXXzbuneVRWdsfUax3z4R3d+dAu2AVMO2eRkiElRUgxO9A4bcwMZNP2ETW2A5Dq9jL0qDtjyaYiXg== dependencies: - "@remixproject/plugin" "0.3.33" - "@remixproject/plugin-api" "0.3.33" - "@remixproject/plugin-utils" "0.3.33" + "@remixproject/plugin" "0.3.42" + "@remixproject/plugin-api" "0.3.42" + "@remixproject/plugin-utils" "0.3.42" axios "^0.21.1" -"@remixproject/plugin-ws@0.3.33": - version "0.3.33" - resolved "https://registry.yarnpkg.com/@remixproject/plugin-ws/-/plugin-ws-0.3.33.tgz#98a003e83ffafb5a7a35ca4e8c59d849ecb017cf" - integrity sha512-Zkp8MK8jxnNm3uruu0dF8vqeh90JsLXttJP4LZF0HaStRRK4d2XG6CgE5mBiC2J4uTEwGP26H/vmqi+POBPTEg== +"@remixproject/plugin-ws@0.3.42": + version "0.3.42" + resolved "https://registry.yarnpkg.com/@remixproject/plugin-ws/-/plugin-ws-0.3.42.tgz#5c93112445de3bfbaddd3ce04e177d66e2ebd08a" + integrity sha512-CifgiuaHWHQVTjH4O5tMBGd9ov4LW1ENBObez1xTLYEGW90EQjFHnBXBgyyMbR9vrpMtBim7unTBUZokRdT9bg== dependencies: - "@remixproject/plugin" "0.3.33" - "@remixproject/plugin-api" "0.3.33" - "@remixproject/plugin-utils" "0.3.33" + "@remixproject/plugin" "0.3.42" + "@remixproject/plugin-api" "0.3.42" + "@remixproject/plugin-utils" "0.3.42" -"@remixproject/plugin@0.3.33": - version "0.3.33" - resolved "https://registry.yarnpkg.com/@remixproject/plugin/-/plugin-0.3.33.tgz#2939cdb6a1231743d7f00c10f5ea47eddd49b602" - integrity sha512-ia6LevsWYPkcRwOBl3umA2fPCgYt2TmB437Pafs9BE6fD9judEvlvEqXjBy9GLBsZzZWSiyYenOnW8HIiwqfMA== +"@remixproject/plugin@0.3.42": + version "0.3.42" + resolved "https://registry.yarnpkg.com/@remixproject/plugin/-/plugin-0.3.42.tgz#26709eedf53a7fe13717fa909eebebfd757f74bf" + integrity sha512-QhpKCnxlxuwGWxaJHpO7yW3p+GqEEA7451BMT2zeFfUs///RrkmJdG7Z56RHAmH8GaGlALrMemsg68O3K55eAQ== dependencies: - "@remixproject/plugin-api" "0.3.33" - "@remixproject/plugin-utils" "0.3.33" + "@remixproject/plugin-api" "0.3.42" + "@remixproject/plugin-utils" "0.3.42" events "3.2.0" "@restart/context@^2.1.4": @@ -4915,12 +5285,21 @@ resolved "https://registry.yarnpkg.com/@restart/context/-/context-2.1.4.tgz#a99d87c299a34c28bd85bb489cb07bfd23149c02" integrity sha512-INJYZQJP7g+IoDUh/475NlGiTeMfwTXUEr3tmRneckHIxNolGOW9CTq83S8cxq0CgJwwcMzMJFchxvlwe7Rk8Q== -"@restart/hooks@^0.3.26": - version "0.3.27" - resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.3.27.tgz#91f356d66d4699a8cd8b3d008402708b6a9dc505" - integrity sha512-s984xV/EapUIfkjlf8wz9weP2O9TNKR96C68FfMEy2bE69+H4cNv3RD4Mf97lW7Htt7PjZrYTjSC8f3SB9VCXw== +"@restart/hooks@^0.4.7": + version "0.4.15" + resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.4.15.tgz#70990085c9b79d1f3e140db824b29218bdc2b5bb" + integrity sha512-cZFXYTxbpzYcieq/mBwSyXgqnGMHoBVh3J7MU0CCoIB4NRZxV9/TuwTBAaLMqpNhC3zTPMCgkQ5Ey07L02Xmcw== + dependencies: + dequal "^2.0.3" + +"@ricarso/react-image-magnifiers@^1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@ricarso/react-image-magnifiers/-/react-image-magnifiers-1.9.0.tgz#c743620a05acc6c288797dac93e91f229ada9cb0" + integrity sha512-2s+xbcRQMcTu5d5WRNCjveeOoiSUl8Qc6rGgZ2P5HTlyHzBsI/uCHQD3UWg0i3o2CaEV/veAHE/kMYyu216pzQ== dependencies: - dequal "^2.0.2" + prop-types "^15.7.2" + react-input-position "^1.3.1" + typescript "^4.8.4" "@rollup/plugin-babel@^5.3.0": version "5.3.1" @@ -5505,6 +5884,11 @@ "@testing-library/dom" "^8.5.0" "@types/react-dom" "^18.0.0" +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + "@tootallnate/quickjs-emscripten@^0.23.0": version "0.23.0" resolved "https://registry.yarnpkg.com/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz#db4ecfd499a9765ab24002c3b696d02e6d32a12c" @@ -5804,9 +6188,9 @@ "@types/node" "*" "@types/invariant@^2.2.33": - version "2.2.35" - resolved "https://registry.yarnpkg.com/@types/invariant/-/invariant-2.2.35.tgz#cd3ebf581a6557452735688d8daba6cf0bd5a3be" - integrity sha512-DxX1V9P8zdJPYQat1gHyY0xj3efl8gnMVjiM9iCY6y27lj+PoQWkgjt8jDqmovPqULkKVpKRg8J36iQiA+EtEg== + version "2.2.37" + resolved "https://registry.yarnpkg.com/@types/invariant/-/invariant-2.2.37.tgz#1709741e534364d653c87dff22fc76fa94aa7bc0" + integrity sha512-IwpIMieE55oGWiXkQPSBY1nw1nFs6bsKXTFskNY8sdS17K24vyEBRQZEwlRS7ZmXCWnJcQtbxWzly+cODWGs2A== "@types/isomorphic-git__lightning-fs@^4.4.2": version "4.4.2" @@ -5946,6 +6330,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== +"@types/node@^18.11.18": + version "18.16.16" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.16.tgz#3b64862856c7874ccf7439e6bab872d245c86d8e" + integrity sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g== + "@types/normalize-package-data@^2.4.0": version "2.4.1" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" @@ -5968,7 +6357,7 @@ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0" integrity sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg== -"@types/prop-types@*", "@types/prop-types@^15.7.3": +"@types/prop-types@*": version "15.7.4" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== @@ -5978,6 +6367,11 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== +"@types/prop-types@^15.7.3": + version "15.7.11" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563" + integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== + "@types/qs@*": version "6.9.7" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" @@ -6000,13 +6394,6 @@ dependencies: "@types/react" "*" -"@types/react-dom@^17.0.9": - version "17.0.18" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.18.tgz#8f7af38f5d9b42f79162eea7492e5a1caff70dc2" - integrity sha512-rLVtIfbwyur2iFKykP2w0pl/1unw26b5td16d5xMgp7/yjTHomkyxPYChFoCr/FtEX1lN9wY6lFj1qvKdS5kDw== - dependencies: - "@types/react" "^17" - "@types/react-dom@^18.0.0": version "18.0.7" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.7.tgz#ee7cf8ec4e6977e3f0a7b1d38bd89c75aa2aec28" @@ -6014,6 +6401,13 @@ dependencies: "@types/react" "*" +"@types/react-dom@^18.2.0": + version "18.2.18" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.18.tgz#16946e6cd43971256d874bc3d0a72074bb8571dd" + integrity sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw== + dependencies: + "@types/react" "*" + "@types/react-image-magnifiers@^1.3.2": version "1.3.2" resolved "https://registry.yarnpkg.com/@types/react-image-magnifiers/-/react-image-magnifiers-1.3.2.tgz#7c8f08105ee72b7a306d0d068916a9d53a49e3f9" @@ -6031,7 +6425,7 @@ hoist-non-react-statics "^3.3.0" redux "^4.0.0" -"@types/react-router-dom@^5.3.0": +"@types/react-router-dom@^5.3.3": version "5.3.3" resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== @@ -6049,16 +6443,23 @@ "@types/react" "*" "@types/react-transition-group@^4.4.1": - version "4.4.4" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.4.tgz#acd4cceaa2be6b757db61ed7b432e103242d163e" - integrity sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug== + version "4.4.10" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.10.tgz#6ee71127bdab1f18f11ad8fb3322c6da27c327ac" + integrity sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q== + dependencies: + "@types/react" "*" + +"@types/react-window@^1.8.8": + version "1.8.8" + resolved "https://registry.yarnpkg.com/@types/react-window/-/react-window-1.8.8.tgz#c20645414d142364fbe735818e1c1e0a145696e3" + integrity sha512-8Ls660bHR1AUA2kuRvVG9D/4XpRC6wjAaPT9dil7Ckc76eP9TKWZwwmgfq8Q1LANX3QNDnoU4Zp48A3w+zK69Q== dependencies: "@types/react" "*" -"@types/react@*", "@types/react@16 || 17 || 18", "@types/react@>=16.14.8", "@types/react@>=16.9.11", "@types/react@^17", "@types/react@^17.0.24": - version "17.0.52" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.52.tgz#10d8b907b5c563ac014a541f289ae8eaa9bf2e9b" - integrity sha512-vwk8QqVODi0VaZZpDXQCmEmiOuyjEFPY7Ttaw5vjM112LOq37yz1CDJGrRJwA1fYEq4Iitd5rnjd1yWAc/bT+A== +"@types/react@*", "@types/react@16 || 17 || 18", "@types/react@>=16.14.8", "@types/react@>=16.9.11", "@types/react@^18.2.0": + version "18.2.45" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.45.tgz#253f4fac288e7e751ab3dc542000fb687422c15c" + integrity sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -6334,6 +6735,13 @@ resolved "https://registry.yarnpkg.com/@uniswap/v3-core/-/v3-core-1.0.1.tgz#b6d2bdc6ba3c3fbd610bdc502395d86cd35264a0" integrity sha512-7pVk4hEm00j9tc71Y9+ssYpO6ytkeI0y7WE9P6UcmNzhxPePwyAxImuhVsTqWK9YFvzgtvzJHi64pBl4jUzKMQ== +"@vercel/webpack-asset-relocator-loader@^1.7.3": + version "1.7.3" + resolved "https://registry.yarnpkg.com/@vercel/webpack-asset-relocator-loader/-/webpack-asset-relocator-loader-1.7.3.tgz#e65ca1fd9feb045039788f9b4710e5acc84b01b0" + integrity sha512-vizrI18v8Lcb1PmNNUBz7yxPxxXoOeuaVEjTG9MjvDrphjiSxFZrRJ5tIghk+qdLFRCXI5HBCshgobftbmrC5g== + dependencies: + resolve "^1.10.0" + "@wagmi/chains@1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@wagmi/chains/-/chains-1.2.0.tgz#d59eaa70ec51a5fdcd113975926992acfb17ab12" @@ -7023,7 +7431,7 @@ abab@^2.0.5: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== -abbrev@1: +abbrev@1, abbrev@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== @@ -7165,11 +7573,16 @@ acorn@^7.0.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.0.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: +acorn@^8.0.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1: version "8.8.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== +acorn@^8.9.0: + version "8.9.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59" + integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ== + adm-zip@^0.4.16: version "0.4.16" resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" @@ -7192,7 +7605,7 @@ agent-base@4, agent-base@^4.3.0: dependencies: es6-promisify "^5.0.0" -agent-base@6: +agent-base@6, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== @@ -7487,21 +7900,29 @@ aproba@^1.0.3: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +"aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + aproba@^1.1.1, aproba@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" integrity sha512-wddRlyVZ7n0ZClzsf0Aqf5vGke7/X8QT0GElKYr8qAuE80tlqbvKf4hlrDE0/zqI8Z6j4HjIIaB9gZ484kjjsw== -aproba@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - archy@^1.0.0, archy@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + are-we-there-yet@~1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" @@ -7730,13 +8151,13 @@ array.prototype.flatmap@^1.2.4: es-abstract "^1.19.0" array.prototype.flatmap@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz#a7e8ed4225f4788a70cd910abcf0791e76a5534f" - integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg== + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" arraybuffer.prototype.slice@^1.0.2: @@ -7916,6 +8337,11 @@ atomic-sleep@^1.0.0: resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== +author-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/author-regex/-/author-regex-1.0.0.tgz#d08885be6b9bbf9439fe087c76287245f0a81450" + integrity sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g== + autoprefixer@^10.4.9: version "10.4.12" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.12.tgz#183f30bf0b0722af54ee5ef257f7d4320bb33129" @@ -8723,7 +9149,7 @@ base64-arraybuffer@^1.0.2: resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz#1c37589a7c4b0746e34bd1feb951da2df01c1bdc" integrity sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ== -base64-js@^1.0.2, base64-js@^1.3.1: +base64-js@^1.0.2, base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -8888,7 +9314,7 @@ block-stream@*: dependencies: inherits "~2.0.0" -bluebird@^3.0.5, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5, bluebird@^3.7.2: +bluebird@^3.0.5, bluebird@^3.1.1, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5, bluebird@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -8969,6 +9395,11 @@ boolbase@^1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== +boolean@^3.0.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b" + integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw== + boom@2.x.x: version "2.10.1" resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" @@ -8977,9 +9408,9 @@ boom@2.x.x: hoek "2.x.x" bootstrap@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.2.2.tgz#834e053eed584a65e244d8aa112a6959f56e27a0" - integrity sha512-dEtzMTV71n6Fhmbg4fYJzQsw1N29hJKO1js5ackCgIpDcGid2ETMGC6zwSYw09v05Y+oRdQ9loC54zB1La3hHQ== + version "5.3.2" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.3.2.tgz#97226583f27aae93b2b28ab23f4c114757ff16ae" + integrity sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g== borc@^2.1.2: version "2.1.2" @@ -9535,6 +9966,30 @@ cacache@^12.0.0, cacache@^12.0.3: unique-filename "^1.1.1" y18n "^4.0.0" +cacache@^16.1.0: + version "16.1.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" + integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== + dependencies: + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^2.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + glob "^8.0.1" + infer-owner "^1.0.4" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + unique-filename "^2.0.0" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -10022,6 +10477,11 @@ chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.4: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + chownr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" @@ -10032,6 +10492,11 @@ chrome-trace-event@^1.0.2: resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== +chromium-pickle-js@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" + integrity sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw== + ci-info@3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" @@ -10114,9 +10579,9 @@ classic-level@^1.2.0: node-gyp-build "^4.3.0" classnames@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" - integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== + version "2.3.2" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" + integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== clean-git-ref@^2.0.1: version "2.0.1" @@ -10312,11 +10777,21 @@ cloneable-readable@^1.0.0: process-nextick-args "^2.0.0" readable-stream "^2.3.5" +clsx@^1.0.4: + version "1.2.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== + clsx@^1.1.0, clsx@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== +clsx@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.0.0.tgz#12658f3fd98fafe62075595a5c30e43d18f3d00b" + integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q== + cmd-shim@~2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-2.0.2.tgz#6fcbda99483a8fd15d7d30a196ca69d688a2efdb" @@ -10525,11 +11000,16 @@ commander@^2.12.1, commander@^2.15.0, commander@^2.20.0, commander@^2.20.3, comm resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^4.0.1: +commander@^4.0.1, commander@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== +commander@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + commander@^7.0.0, commander@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" @@ -10558,6 +11038,11 @@ compare-func@^2.0.0: array-ify "^1.0.0" dot-prop "^5.1.0" +compare-version@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080" + integrity sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A== + compare-versions@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.0.tgz#3f2131e3ae93577df111dba133e6db876ffe127a" @@ -10677,7 +11162,7 @@ console-browserify@^1.1.0: resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== -console-control-strings@^1.0.0, console-control-strings@~1.1.0: +console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= @@ -11069,6 +11554,15 @@ cross-spawn-async@^2.1.1: lru-cache "^4.0.0" which "^1.2.8" +cross-spawn-windows-exe@^1.1.0, cross-spawn-windows-exe@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/cross-spawn-windows-exe/-/cross-spawn-windows-exe-1.2.0.tgz#46253b0f497676e766faf4a7061004618b5ac5ec" + integrity sha512-mkLtJJcYbDCxEG7Js6eUnUNndWjyUZwJ3H7bErmmtOYU/Zb99DyUkpamuIZE0b3bhmJyZ7D90uS6f+CGxRRjOw== + dependencies: + "@malept/cross-spawn-promise" "^1.1.0" + is-wsl "^2.2.0" + which "^2.0.2" + cross-spawn@^4: version "4.0.2" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" @@ -11097,7 +11591,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.1, 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" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -11523,7 +12017,7 @@ debug@4.3.3: dependencies: ms "2.1.2" -debug@4.3.4, debug@^4.0.0, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4.3.4, debug@^4.0.0, debug@^4.0.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -11830,16 +12324,11 @@ deps-sort@^2.0.0, deps-sort@^2.0.1: subarg "^1.0.0" through2 "^2.0.0" -dequal@^2.0.0: +dequal@^2.0.0, dequal@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== -dequal@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.2.tgz#85ca22025e3a87e65ef75a7a437b35284a7e319d" - integrity sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug== - des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" @@ -11873,6 +12362,11 @@ detect-libc@^2.0.0, detect-libc@^2.0.2: resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== +detect-libc@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" + integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== + detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" @@ -11959,10 +12453,18 @@ dijkstrajs@^1.0.1: resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.2.tgz#2e48c0d3b825462afe75ab4ad5e829c8ece36257" integrity sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg== -dir-glob@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" - integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== +dir-compare@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/dir-compare/-/dir-compare-3.3.0.tgz#2c749f973b5c4b5d087f11edaae730db31788416" + integrity sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg== + dependencies: + buffer-equal "^1.0.0" + minimatch "^3.0.4" + +dir-glob@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" + integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== dependencies: path-type "^3.0.0" @@ -12020,7 +12522,7 @@ dom-accessibility-api@^0.5.9: resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz#56082f71b1dc7aac69d83c4285eef39c15d93f56" integrity sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg== -dom-helpers@^5.0.1, dom-helpers@^5.2.0, dom-helpers@^5.2.1: +dom-helpers@^5.0.1, dom-helpers@^5.1.3, dom-helpers@^5.2.0, dom-helpers@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== @@ -12263,6 +12765,38 @@ ejs@^3.1.7, ejs@^3.1.8: dependencies: jake "^10.8.5" +electron-packager@^17.1.1: + version "17.1.1" + resolved "https://registry.yarnpkg.com/electron-packager/-/electron-packager-17.1.1.tgz#f156fc63d3a66f4e902e4b42992550a172982d59" + integrity sha512-r1NDtlajsq7gf2EXgjRfblCVPquvD2yeg+6XGErOKblvxOpDi0iulZLVhgYDP4AEF1P5/HgbX/vwjlkEv7PEIQ== + dependencies: + "@electron/asar" "^3.2.1" + "@electron/get" "^2.0.0" + "@electron/notarize" "^1.2.3" + "@electron/osx-sign" "^1.0.1" + "@electron/universal" "^1.3.2" + cross-spawn-windows-exe "^1.2.0" + debug "^4.0.1" + extract-zip "^2.0.0" + filenamify "^4.1.0" + fs-extra "^10.1.0" + galactus "^0.2.1" + get-package-info "^1.0.0" + junk "^3.1.0" + parse-author "^2.0.0" + plist "^3.0.0" + rcedit "^3.0.1" + resolve "^1.1.6" + semver "^7.1.3" + yargs-parser "^21.1.1" + +electron-squirrel-startup@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/electron-squirrel-startup/-/electron-squirrel-startup-1.0.0.tgz#19b4e55933fa0ef8f556784b9c660f772546a0b8" + integrity sha512-Oce8mvgGdFmwr+DsAcXBmFK8jFfN6yaFAP9IvyhTfupM3nFkBku/7VS/mdtJteWumImkC6P+BKGsxScoDDkv9Q== + dependencies: + debug "^2.2.0" + electron-to-chromium@^1.3.47: version "1.4.308" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.308.tgz#39e7047579867c59973eec5168d8bf440780cb7a" @@ -12273,6 +12807,15 @@ electron-to-chromium@^1.4.251: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.264.tgz#2f68a062c38b7a04bf57f3e6954b868672fbdcd3" integrity sha512-AZ6ZRkucHOQT8wke50MktxtmcWZr67kE17X/nAXFf62NIdMdgY6xfsaJD5Szoy84lnkuPWH+4tTNE3s2+bPCiw== +electron@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/electron/-/electron-24.4.0.tgz#48d05561dab6a5835ec1a3a96852797f69824eea" + integrity sha512-A9YzLHRUA+HfYVf2daNv0jPXNCWShgcgcTaGntrZRGynQLEhDTbti9Lfmq2tjRKoEgXZ7qj+aJFw+tJZsT/Cfw== + dependencies: + "@electron/get" "^2.0.0" + "@types/node" "^18.11.18" + extract-zip "^2.0.1" + elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" @@ -12336,7 +12879,7 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -encoding@^0.1.11: +encoding@^0.1.11, encoding@^0.1.13: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== @@ -12402,7 +12945,7 @@ err-code@^1.0.0: resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= -err-code@^2.0.0, err-code@^2.0.3: +err-code@^2.0.0, err-code@^2.0.2, err-code@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== @@ -12489,6 +13032,46 @@ es-abstract@^1.19.2, es-abstract@^1.19.5: string.prototype.trimstart "^1.0.5" unbox-primitive "^1.0.2" +es-abstract@^1.20.4: + version "1.21.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" + integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== + dependencies: + array-buffer-byte-length "^1.0.0" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.2.0" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.3" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.9" + es-abstract@^1.22.1: version "1.22.2" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.2.tgz#90f7282d91d0ad577f505e423e52d4c1d93c1b8a" @@ -12596,7 +13179,7 @@ es5-ext@^0.10.53, es5-ext@^0.10.61, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~ es6-symbol "^3.1.3" next-tick "^1.1.0" -es6-error@^4.0.1: +es6-error@^4.0.1, es6-error@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== @@ -12640,6 +13223,39 @@ es6-weak-map@^2.0.1, es6-weak-map@^2.0.3: es6-iterator "^2.0.3" es6-symbol "^3.1.1" +esbuild-wasm@^0.19.6: + version "0.19.6" + resolved "https://registry.yarnpkg.com/esbuild-wasm/-/esbuild-wasm-0.19.6.tgz#eda8a1ea2fe8d656caa3185bf25e38a8ab7af977" + integrity sha512-PmjQeQlCXjN5ILhu1tOLkDc7Mqyxw0M2x9lRMi4VwLoVKnfbANieH5pRwhszkBg64LkM/GUiZZNsME4mfTigwA== + +esbuild@^0.19.6: + version "0.19.6" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.6.tgz#baa0e8b6b9e655c54ffd57f1772e44677a7931cc" + integrity sha512-Xl7dntjA2OEIvpr9j0DVxxnog2fyTGnyVoQXAMQI6eR3mf9zCQds7VIKUDCotDgE/p4ncTgeRqgX8t5d6oP4Gw== + optionalDependencies: + "@esbuild/android-arm" "0.19.6" + "@esbuild/android-arm64" "0.19.6" + "@esbuild/android-x64" "0.19.6" + "@esbuild/darwin-arm64" "0.19.6" + "@esbuild/darwin-x64" "0.19.6" + "@esbuild/freebsd-arm64" "0.19.6" + "@esbuild/freebsd-x64" "0.19.6" + "@esbuild/linux-arm" "0.19.6" + "@esbuild/linux-arm64" "0.19.6" + "@esbuild/linux-ia32" "0.19.6" + "@esbuild/linux-loong64" "0.19.6" + "@esbuild/linux-mips64el" "0.19.6" + "@esbuild/linux-ppc64" "0.19.6" + "@esbuild/linux-riscv64" "0.19.6" + "@esbuild/linux-s390x" "0.19.6" + "@esbuild/linux-x64" "0.19.6" + "@esbuild/netbsd-x64" "0.19.6" + "@esbuild/openbsd-x64" "0.19.6" + "@esbuild/sunos-x64" "0.19.6" + "@esbuild/win32-arm64" "0.19.6" + "@esbuild/win32-ia32" "0.19.6" + "@esbuild/win32-x64" "0.19.6" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -12819,10 +13435,10 @@ eslint-scope@5.1.1, eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.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" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== +eslint-scope@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" + integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" @@ -12856,13 +13472,21 @@ eslint-visitor-keys@^3.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== +eslint-visitor-keys@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" + integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== + eslint@^8.26.0: - version "8.26.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.26.0.tgz#2bcc8836e6c424c4ac26a5674a70d44d84f2181d" - integrity sha512-kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg== - dependencies: - "@eslint/eslintrc" "^1.3.3" - "@humanwhocodes/config-array" "^0.11.6" + version "8.44.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.44.0.tgz#51246e3889b259bbcd1d7d736a0c10add4f0e500" + integrity sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.4.0" + "@eslint/eslintrc" "^2.1.0" + "@eslint/js" "8.44.0" + "@humanwhocodes/config-array" "^0.11.10" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" ajv "^6.10.0" @@ -12871,44 +13495,41 @@ eslint@^8.26.0: debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.0" + eslint-scope "^7.2.0" + eslint-visitor-keys "^3.4.1" + espree "^9.6.0" + esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" find-up "^5.0.0" glob-parent "^6.0.2" - globals "^13.15.0" - grapheme-splitter "^1.0.4" + globals "^13.19.0" + graphemer "^1.4.0" ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" is-path-inside "^3.0.3" - js-sdsl "^4.1.4" js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" + optionator "^0.9.3" strip-ansi "^6.0.1" strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^9.4.0: - version "9.4.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.0.tgz#cd4bc3d6e9336c433265fc0aa016fc1aaf182f8a" - integrity sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw== +espree@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.0.tgz#80869754b1c6560f32e3b6929194a3fe07c5b82f" + integrity sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A== dependencies: - acorn "^8.8.0" + acorn "^8.9.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.1" esprima@1.2.2: version "1.2.2" @@ -12920,13 +13541,20 @@ esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.1, esquery@^1.4.0: +esquery@^1.0.1: version "1.4.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== dependencies: estraverse "^5.1.0" +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + 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" @@ -13476,7 +14104,7 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extract-zip@2.0.1: +extract-zip@2.0.1, extract-zip@^2.0.0, extract-zip@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== @@ -13580,7 +14208,7 @@ fast-levenshtein@^1.0.0: fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fast-redact@^3.0.0: version "3.1.2" @@ -13783,6 +14411,20 @@ filename-regex@^2.0.0: resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= +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" + integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ== + +filenamify@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-4.3.0.tgz#62391cb58f02b09971c9d4f9d63b3cf9aba03106" + integrity sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg== + dependencies: + filename-reserved-regex "^2.0.0" + strip-outer "^1.0.1" + trim-repeated "^1.0.0" + fill-range@^2.1.0: version "2.2.4" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" @@ -13952,6 +14594,14 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== +flora-colossus@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/flora-colossus/-/flora-colossus-1.0.1.tgz#aba198425a8185341e64f9d2a6a96fd9a3cbdb93" + integrity sha512-d+9na7t9FyH8gBJoNDSi28mE4NgQVGGvxQ4aHtFRetjyh5SXjuus+V5EZaxFmFdXVemSOrx0lsgEl/ZMjnOWJA== + dependencies: + debug "^4.1.1" + fs-extra "^7.0.0" + flush-write-stream@^1.0.0, flush-write-stream@^1.0.2: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" @@ -14095,18 +14745,19 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" -formik@^2.2.9: - version "2.2.9" - resolved "https://registry.yarnpkg.com/formik/-/formik-2.2.9.tgz#8594ba9c5e2e5cf1f42c5704128e119fc46232d0" - integrity sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA== +formik@^2.4.5: + version "2.4.5" + resolved "https://registry.yarnpkg.com/formik/-/formik-2.4.5.tgz#f899b5b7a6f103a8fabb679823e8fafc7e0ee1b4" + integrity sha512-Gxlht0TD3vVdzMDHwkiNZqJ7Mvg77xQNfmBRrNtvzcHZs72TJppSTDKHpImCMJZwcWPBJ8jSQQ95GJzXFf1nAQ== dependencies: + "@types/hoist-non-react-statics" "^3.3.1" deepmerge "^2.1.1" hoist-non-react-statics "^3.3.0" lodash "^4.17.21" lodash-es "^4.17.21" react-fast-compare "^2.0.1" tiny-warning "^1.0.2" - tslib "^1.10.0" + tslib "^2.0.0" forwarded@0.2.0: version "0.2.0" @@ -14213,7 +14864,16 @@ fs-extra@^3.0.1: jsonfile "^3.0.0" universalify "^0.1.0" -fs-extra@^7.0.1: +fs-extra@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^7.0.0, fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== @@ -14248,6 +14908,13 @@ fs-minipass@^1.2.7: dependencies: minipass "^2.6.0" +fs-minipass@^2.0.0, fs-minipass@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + fs-mkdirp-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" @@ -14375,6 +15042,15 @@ functions-have-names@^1.2.2, functions-have-names@^1.2.3: resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== +galactus@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/galactus/-/galactus-0.2.1.tgz#cbed2d20a40c1f5679a35908e2b9415733e78db9" + integrity sha512-mDc8EQJKtxjp9PMYS3PbpjjbX3oXhBTxoGaPahw620XZBIHJ4+nvw5KN/tRtmmSDR9dypstGNvqQ3C29QGoGHQ== + dependencies: + debug "^3.1.0" + flora-colossus "^1.0.0" + fs-extra "^4.0.0" + ganache@^7.9.1: version "7.9.1" resolved "https://registry.yarnpkg.com/ganache/-/ganache-7.9.1.tgz#94f8518215c7989ff5fd542db80bd47d7c7da786" @@ -14396,6 +15072,20 @@ ganache@^7.9.1: bufferutil "4.0.5" utf-8-validate "5.0.7" +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + gauge@~2.7.1, gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -14447,6 +15137,13 @@ get-func-name@^2.0.0: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== +get-installed-path@^2.0.3: + version "2.1.1" + resolved "https://registry.yarnpkg.com/get-installed-path/-/get-installed-path-2.1.1.tgz#a1f33dc6b8af542c9331084e8edbe37fe2634152" + integrity sha512-Qkn9eq6tW5/q9BDVdMpB8tOHljX9OSP0jRC5TRNVA4qRc839t4g8KQaR8t0Uv0EFVL0MlyG7m/ofjEgAROtYsA== + dependencies: + global-modules "1.0.0" + get-intrinsic@^1.0.1, get-intrinsic@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" @@ -14489,6 +15186,16 @@ get-iterator@^1.0.2: resolved "https://registry.yarnpkg.com/get-iterator/-/get-iterator-1.0.2.tgz#cd747c02b4c084461fac14f48f6b45a80ed25c82" integrity sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg== +get-package-info@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-package-info/-/get-package-info-1.0.0.tgz#6432796563e28113cd9474dbbd00052985a4999c" + integrity sha512-SCbprXGAPdIhKAXiG+Mk6yeoFH61JlYunqdFQFHDtLjJlDjFf6x07dsS8acO+xWt52jpdVo49AlVDnUVK1sDNw== + dependencies: + bluebird "^3.1.1" + debug "^2.2.0" + lodash.get "^4.0.0" + read-pkg-up "^2.0.0" + 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" @@ -14826,7 +15533,19 @@ glob@~7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" -global-modules@^1.0.0: +global-agent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6" + integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q== + dependencies: + boolean "^3.0.1" + es6-error "^4.1.1" + matcher "^3.0.0" + roarr "^2.15.3" + semver "^7.3.2" + serialize-error "^7.0.1" + +global-modules@1.0.0, global-modules@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== @@ -14851,10 +15570,10 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^13.15.0: - version "13.17.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" - integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== +globals@^13.19.0: + version "13.20.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== dependencies: type-fest "^0.20.2" @@ -14863,7 +15582,7 @@ globals@^9.18.0: resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== -globalthis@^1.0.3: +globalthis@^1.0.1, globalthis@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== @@ -14947,6 +15666,23 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" +got@^11.7.0, got@^11.8.5: + version "11.8.6" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + got@^11.8.2: version "11.8.3" resolved "https://registry.yarnpkg.com/got/-/got-11.8.3.tgz#f496c8fdda5d729a90b4905d2b07dbd148170770" @@ -15008,10 +15744,10 @@ graceful-fs@~4.1.11: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg= -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== growl@1.10.5: version "1.10.5" @@ -15346,13 +16082,6 @@ hey-listen@^1.0.8: resolved "https://registry.yarnpkg.com/hey-listen/-/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68" integrity sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q== -history@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/history/-/history-5.3.0.tgz#1548abaa245ba47992f063a0783db91ef201c73b" - integrity sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ== - dependencies: - "@babel/runtime" "^7.7.6" - hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -15481,6 +16210,11 @@ http-cache-semantics@^4.0.0: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== +http-cache-semantics@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" @@ -15520,6 +16254,15 @@ http-proxy-agent@^2.1.0: agent-base "4" debug "3.1.0" +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + http-proxy-agent@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz#e9096c5afd071a3fce56e6252bb321583c124673" @@ -15966,6 +16709,11 @@ interpret@^2.2.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== +interpret@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" + integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== + intl-messageformat@10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.1.0.tgz#ffbbcbf1068af8466ad5497f78c30c3d96ef5505" @@ -16283,6 +17031,13 @@ is-circular@^1.0.2: resolved "https://registry.yarnpkg.com/is-circular/-/is-circular-1.0.2.tgz#2e0ab4e9835f4c6b0ea2b9855a84acd501b8366c" integrity sha512-YttjnrswnUYRVJvxCvu8z+PGMUSzC2JttP0OEXezlAEdp3EXzhf7IZ3j0gRAybJBQupedIZFhY61Tga6E0qASA== +is-core-module@^2.11.0: + version "2.12.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" + integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== + dependencies: + has "^1.0.3" + is-core-module@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" @@ -16469,6 +17224,11 @@ is-ip@^3.1.0: dependencies: ip-regex "^4.0.0" +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + is-map@^2.0.1, is-map@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" @@ -16808,6 +17568,11 @@ isbinaryfile@^3.0.2: dependencies: buffer-alloc "^1.2.0" +isbinaryfile@^4.0.8: + version "4.0.10" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" + integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -17784,6 +18549,11 @@ jszip@^3.6.0: readable-stream "~2.3.6" set-immediate-shim "~1.0.1" +junk@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/junk/-/junk-3.1.0.tgz#31499098d902b7e98c5d9b9c80f43457a88abfa1" + integrity sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ== + just-debounce-it@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/just-debounce-it/-/just-debounce-it-1.1.0.tgz#8e92578effc155358a44f458c52ffbee66983bef" @@ -17799,6 +18569,11 @@ just-once@1.1.0: resolved "https://registry.yarnpkg.com/just-once/-/just-once-1.1.0.tgz#fe81a185ebaeeb0947a7e705bf01cb6808db0ad8" integrity sha512-+rZVpl+6VyTilK7vB/svlMPil4pxqIJZkbnN7DKZTOzyXfun6ZiFeq2Pk4EtCEHZ0VU4EkdFzG8ZK5F3PErcDw== +just-once@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/just-once/-/just-once-2.2.0.tgz#e8ebc8c80838d0fdb0d3c888f1591d88ad4be4d7" + integrity sha512-Wo547FgUOUZ98jbrZ1KX8nRezdEdtgIlC2NK1u1RvR1oZ/WoU++FjprP8J8hRbaox776MHyeMZZED4DvhhHVjg== + jwa@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" @@ -18144,7 +18919,7 @@ lightercollective@^0.1.0: resolved "https://registry.yarnpkg.com/lightercollective/-/lightercollective-0.1.0.tgz#70df102c530dcb8d0ccabfe6175a8d00d5f61300" integrity sha512-J9tg5uraYoQKaWbmrzDDexbG6hHnMcWS1qLYgJSWE+mpA3U5OCSeMUhb+K55otgZJ34oFdR0ECvdIb3xuO5JOQ== -lilconfig@2.1.0: +lilconfig@2.1.0, lilconfig@^2.0.5: version "2.1.0" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== @@ -18154,11 +18929,6 @@ lilconfig@^2.0.3: resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082" integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA== -lilconfig@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.6.tgz#32a384558bd58af3d4c6e077dd1ad1d397bc69d4" - integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg== - lines-and-columns@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" @@ -18188,7 +18958,7 @@ lint-staged@^13.2.3: string-argv "^0.3.1" yaml "^2.2.2" -listr2@^5.0.7: +listr2@^5.0.3, listr2@^5.0.7: version "5.0.8" resolved "https://registry.yarnpkg.com/listr2/-/listr2-5.0.8.tgz#a9379ffeb4bd83a68931a65fb223a11510d6ba23" integrity sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA== @@ -18247,6 +19017,16 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ== + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" @@ -18462,7 +19242,7 @@ lodash.flow@^3.3.0: resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" integrity sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw== -lodash.get@^4.4.2: +lodash.get@^4.0.0, lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= @@ -18613,7 +19393,7 @@ log-symbols@4.0.0: dependencies: chalk "^4.0.0" -log-symbols@4.1.0, log-symbols@^4.1.0: +log-symbols@4.1.0, log-symbols@^4.0.0, log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== @@ -18747,7 +19527,7 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lru-cache@^7.14.1: +lru-cache@^7.14.1, lru-cache@^7.7.1: version "7.18.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== @@ -18815,6 +19595,28 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +make-fetch-happen@^10.0.3: + version "10.2.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" + integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== + dependencies: + agentkeepalive "^4.2.1" + cacache "^16.1.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-fetch "^2.0.3" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^9.0.0" + make-fetch-happen@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" @@ -18912,6 +19714,13 @@ matchdep@^2.0.0: resolve "^1.4.0" stack-trace "0.0.10" +matcher@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca" + integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng== + dependencies: + escape-string-regexp "^4.0.0" + math-random@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" @@ -19086,7 +19895,7 @@ mem@^1.1.0: dependencies: mimic-fn "^1.0.0" -mem@^4.0.0: +mem@^4.0.0, mem@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== @@ -19102,7 +19911,7 @@ memfs@^3.4.1, memfs@^3.4.3: dependencies: fs-monkey "^1.0.3" -memoize-one@^5.1.1: +"memoize-one@>=3.1.1 <6", memoize-one@^5.1.1: version "5.2.1" resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== @@ -19680,7 +20489,7 @@ minimatch@^3.0.0, minimatch@^3.0.2: dependencies: brace-expansion "^1.0.0" -minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -19748,6 +20557,45 @@ minimisted@^2.0.0: dependencies: minimist "^1.2.5" +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" + integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== + dependencies: + minipass "^3.1.6" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + minipass@^2.3.5, minipass@^2.6.0, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" @@ -19756,6 +20604,18 @@ minipass@^2.3.5, minipass@^2.6.0, minipass@^2.9.0: safe-buffer "^5.1.2" yallist "^3.0.0" +minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + minixhr@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/minixhr/-/minixhr-4.0.0.tgz#c0b7a36c436402650fdb3495bffd6fc3180075f3" @@ -19768,6 +20628,14 @@ minizlib@^1.3.3: dependencies: minipass "^2.9.0" +minizlib@^2.1.1, minizlib@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" @@ -19841,16 +20709,16 @@ mkdirp@^0.5.6: dependencies: minimist "^1.2.6" +mkdirp@^1.0.3, mkdirp@^1.0.4, mkdirp@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + mkdirp@^2.1.3: version "2.1.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.6.tgz#964fbcb12b2d8c5d6fbc62a963ac95a273e2cc19" integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A== -mkdirp@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - mkpath@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/mkpath/-/mkpath-1.0.0.tgz#ebb3a977e7af1c683ae6fda12b545a6ba6c5853d" @@ -19990,10 +20858,10 @@ mold-source-map@~0.4.0: convert-source-map "^1.1.0" through "~2.2.7" -monaco-editor@0.41.0: - version "0.41.0" - resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.41.0.tgz#2ba31e5af7e3ae93ac5d7467ec2772ef9b3d967f" - integrity sha512-1o4olnZJsiLmv5pwLEAmzHTE/5geLKQ07BrGxlF4Ri/AXAc2yyDGZwHjiTqD8D/ROKUZmwMA28A+yEowLNOEcA== +monaco-editor@0.44.0: + version "0.44.0" + resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.44.0.tgz#3c0fe3655923bbf7dd647057302070b5095b6c59" + integrity sha512-5SmjNStN6bSuSE5WPT2ZV+iYn1/yI9sd4Igtk23ChvqB7kDk9lZbB9F5frsuvpB+2njdIeGGFf2G4gbE6rCC9Q== motion@10.16.2: version "10.16.2" @@ -20307,7 +21175,7 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -negotiator@0.6.3: +negotiator@0.6.3, negotiator@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== @@ -20384,6 +21252,13 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" +node-abi@^3.0.0: + version "3.40.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.40.0.tgz#51d8ed44534f70ff1357dfbc3a89717b1ceac1b4" + integrity sha512-zNy02qivjjRosswoYmPi8hIKJRr8MpQyeKT6qlcq/OnOgA3Rhoae+IYOqsM9V5+JnHWmxKnWOT2GxvtqdtOCXA== + dependencies: + semver "^7.3.5" + node-abi@^3.3.0: version "3.51.0" resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.51.0.tgz#970bf595ef5a26a271307f8a4befa02823d4e87d" @@ -20416,6 +21291,13 @@ node-addon-api@^6.1.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== +node-api-version@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/node-api-version/-/node-api-version-0.1.4.tgz#1ed46a485e462d55d66b5aa1fe2821720dedf080" + integrity sha512-KGXihXdUChwJAOHO53bv9/vXcLmdUsZ6jIptbvYvkpKfth+r7jw44JkVxQFA3kX5nQjzjmGu1uAu/xNNLNlI5g== + dependencies: + semver "^7.3.5" + node-emoji@^1.4.1: version "1.11.0" resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" @@ -20503,6 +21385,22 @@ node-gyp@^5.0.2: tar "^4.4.12" which "^1.3.1" +node-gyp@^9.0.0: + version "9.3.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.3.1.tgz#1e19f5f290afcc9c46973d68700cbd21a96192e4" + integrity sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^10.0.3" + nopt "^6.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + node-gyp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.0.tgz#7474f63a3a0501161dda0b6341f022f14c423fa6" @@ -20610,6 +21508,13 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" +nopt@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" + integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== + dependencies: + abbrev "^1.0.0" + nopt@~1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" @@ -20983,6 +21888,16 @@ npmlog@^4.1.2: gauge "~2.7.3" set-blocking "~2.0.0" +npmlog@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + nth-check@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" @@ -21053,57 +21968,6 @@ nx@15.7.1: "@nrwl/nx-win32-arm64-msvc" "15.7.1" "@nrwl/nx-win32-x64-msvc" "15.7.1" -nx@15.7.2: - version "15.7.2" - resolved "https://registry.yarnpkg.com/nx/-/nx-15.7.2.tgz#048f8968420f5d56a1f464a83c8c3e84dfc95bf4" - integrity sha512-VRb+CZCji3G4ikdMAGoh6TeU9Q6n5atRwqRSFhUX63er8zhlMvWHLskPMZC4q/81edo/E7RhbmEVUD5MB0JoeA== - dependencies: - "@nrwl/cli" "15.7.2" - "@nrwl/tao" "15.7.2" - "@parcel/watcher" "2.0.4" - "@yarnpkg/lockfile" "^1.1.0" - "@yarnpkg/parsers" "^3.0.0-rc.18" - "@zkochan/js-yaml" "0.0.6" - axios "^1.0.0" - chalk "^4.1.0" - cli-cursor "3.1.0" - cli-spinners "2.6.1" - cliui "^7.0.2" - dotenv "~10.0.0" - enquirer "~2.3.6" - fast-glob "3.2.7" - figures "3.2.0" - flat "^5.0.2" - fs-extra "^11.1.0" - glob "7.1.4" - ignore "^5.0.4" - js-yaml "4.1.0" - jsonc-parser "3.2.0" - lines-and-columns "~2.0.3" - minimatch "3.0.5" - npm-run-path "^4.0.1" - open "^8.4.0" - semver "7.3.4" - string-width "^4.2.3" - strong-log-transformer "^2.1.0" - tar-stream "~2.2.0" - tmp "~0.2.1" - tsconfig-paths "^4.1.2" - tslib "^2.3.0" - v8-compile-cache "2.3.0" - yargs "^17.6.2" - yargs-parser "21.1.1" - optionalDependencies: - "@nrwl/nx-darwin-arm64" "15.7.2" - "@nrwl/nx-darwin-x64" "15.7.2" - "@nrwl/nx-linux-arm-gnueabihf" "15.7.2" - "@nrwl/nx-linux-arm64-gnu" "15.7.2" - "@nrwl/nx-linux-arm64-musl" "15.7.2" - "@nrwl/nx-linux-x64-gnu" "15.7.2" - "@nrwl/nx-linux-x64-musl" "15.7.2" - "@nrwl/nx-win32-arm64-msvc" "15.7.2" - "@nrwl/nx-win32-x64-msvc" "15.7.2" - nyc@^13.3.0: version "13.3.0" resolved "https://registry.yarnpkg.com/nyc/-/nyc-13.3.0.tgz#da4dbe91a9c8b9ead3f4f3344c76f353e3c78c75" @@ -21224,22 +22088,22 @@ object.defaults@^1.0.0, object.defaults@^1.1.0: isobject "^3.0.0" object.entries@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" - integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" + integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" object.fromentries@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251" - integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== + version "2.0.6" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" + integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" object.getownpropertydescriptors@^2.0.3: version "2.1.3" @@ -21251,12 +22115,12 @@ object.getownpropertydescriptors@^2.0.3: es-abstract "^1.19.1" object.hasown@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.1.tgz#ad1eecc60d03f49460600430d97f23882cf592a3" - integrity sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A== + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" + integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== dependencies: define-properties "^1.1.4" - es-abstract "^1.19.5" + es-abstract "^1.20.4" object.map@^1.0.0: version "1.0.1" @@ -21477,24 +22341,24 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" - word-wrap "^1.2.3" options@>=0.0.5: version "0.0.6" resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" integrity sha512-bOj3L1ypm++N+n7CEbbe473A414AB7z+amKYshRb//iuL3MpdDCLhPnw6aVTdKB9g5ZRVHIEp8eUln6L2NUStg== -ora@5.4.1: +ora@5.4.1, ora@^5.1.0: version "5.4.1" resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== @@ -21857,6 +22721,13 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.6: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" +parse-author@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-author/-/parse-author-2.0.0.tgz#d3460bf1ddd0dfaeed42da754242e65fb684a81f" + integrity sha512-yx5DfvkN8JsHL2xk2Os9oTia467qnvRgey4ahSm2X8epehBLx/gWLcy5KI+Y36ful5DzGbCS6RazqZGgy1gHNw== + dependencies: + author-regex "^1.0.0" + parse-duration@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/parse-duration/-/parse-duration-0.4.4.tgz#11c0f51a689e97d06c57bd772f7fda7dc013243c" @@ -22102,6 +22973,13 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ== + dependencies: + pify "^2.0.0" + path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -22271,6 +23149,14 @@ platform@^1.3.6: resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg== +plist@^3.0.0, plist@^3.0.4, plist@^3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.6.tgz#7cfb68a856a7834bca6dbfe3218eb9c7740145d3" + integrity sha512-WiIVYyrp8TD4w8yCvyeIr+lkmrGRd5u0VbRnU+tP/aRLxP/YadJUYOMZJ/6hIa3oUyVCsycXvtNRgd5XBJIbiA== + dependencies: + base64-js "^1.5.1" + xmlbuilder "^15.1.1" + plur@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/plur/-/plur-1.0.0.tgz#db85c6814f5e5e5a3b49efc28d604fec62975156" @@ -22807,7 +23693,7 @@ process@^0.11.10, process@~0.11.0: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== -progress@2.0.3: +progress@2.0.3, progress@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== @@ -22825,6 +23711,14 @@ promise-retry@^1.1.1: err-code "^1.0.0" retry "^0.10.0" +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + promise.series@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/promise.series/-/promise.series-0.2.0.tgz#2cc7ebe959fc3a6619c04ab4dbdc9e452d864bbd" @@ -23280,6 +24174,13 @@ rc@^1.1.1, rc@^1.2.7, rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" +rcedit@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/rcedit/-/rcedit-3.0.1.tgz#ae21b43e49c075f4d84df1929832a12c302f3c90" + integrity sha512-XM0Jv40/y4hVAqj/MO70o/IWs4uOsaSoo2mLyk3klFDW+SStLnCtzuQu+1OBTIMGlM8CvaK9ftlYCp6DJ+cMsw== + dependencies: + cross-spawn-windows-exe "^1.1.0" + re-emitter@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/re-emitter/-/re-emitter-1.1.3.tgz#fa9e319ffdeeeb35b27296ef0f3d374dac2f52a7" @@ -23309,13 +24210,13 @@ react-beautiful-dnd@^13.1.0: use-memo-one "^1.1.1" react-bootstrap@^1.6.4: - version "1.6.4" - resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-1.6.4.tgz#94d5d2422e26bba277656d3529128e14f838b7ca" - integrity sha512-z3BhBD4bEZuLP8VrYqAD7OT7axdcSkkyvWBWnS2U/4MhyabUihrUyucPWkan7aMI1XIHbmH4LCpEtzWGfx/yfA== + version "1.6.7" + resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-1.6.7.tgz#7afea926cada8175d67df07b893dbad2998ae463" + integrity sha512-IzCYXuLSKDEjGFglbFWk0/iHmdhdcJzTmtS6lXxc0kaNFx2PFgrQf5jKnx5sarF2tiXh9Tgx3pSt3pdK7YwkMA== dependencies: "@babel/runtime" "^7.14.0" "@restart/context" "^2.1.4" - "@restart/hooks" "^0.3.26" + "@restart/hooks" "^0.4.7" "@types/invariant" "^2.2.33" "@types/prop-types" "^15.7.3" "@types/react" ">=16.14.8" @@ -23326,19 +24227,18 @@ react-bootstrap@^1.6.4: invariant "^2.2.4" prop-types "^15.7.2" prop-types-extra "^1.1.0" - react-overlays "^5.1.1" + react-overlays "^5.1.2" react-transition-group "^4.4.1" uncontrollable "^7.2.1" warning "^4.0.3" -react-dom@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== +react-dom@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" + scheduler "^0.23.0" react-draggable@^4.4.4: version "4.4.5" @@ -23353,14 +24253,6 @@ react-fast-compare@^2.0.1: resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== -react-image-magnifiers@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/react-image-magnifiers/-/react-image-magnifiers-1.4.0.tgz#0472e93491d5a199a278d4efc855f03542214601" - integrity sha512-ZszHusdsYteccKGysHXUOgLRGtHqfRYuG1koHh3VAvuhrzF4BEs1Ot5tSe1WA2v+EsjAEfYcrRyi/Is4QDD61A== - dependencies: - prop-types "^15.7.2" - react-input-position "^1.3.1" - react-input-position@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/react-input-position/-/react-input-position-1.3.2.tgz#4e1f3b671eb41c0bd9f232846b94328263a7b65b" @@ -23384,11 +24276,6 @@ react-intl@^6.0.4: intl-messageformat "10.1.0" tslib "2.4.0" -"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - react-is@^16.13.1, react-is@^16.3.2, react-is@^16.7.0, react-is@^16.8.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" @@ -23399,6 +24286,11 @@ react-is@^17.0.1, react-is@^17.0.2: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + react-lifecycles-compat@^3.0.4, react-lifecycles-compat@~3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" @@ -23430,14 +24322,14 @@ react-multi-carousel@^2.8.2: resolved "https://registry.yarnpkg.com/react-multi-carousel/-/react-multi-carousel-2.8.2.tgz#4bbd7a9656d8e49e081745331593e5500eefdbe4" integrity sha512-M9Y7DfAp8bA/r6yexttU6RLA7uyppje4c0ELRuCHZWswH+u7nr0uVP6qHNPjc4XGOEY1MYFOb5nBg7JvoKutuQ== -react-overlays@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-5.1.1.tgz#2e7cf49744b56537c7828ccb94cfc63dd778ae4f" - integrity sha512-eCN2s2/+GVZzpnId4XVWtvDPYYBD2EtOGP74hE+8yDskPzFy9+pV1H3ZZihxuRdEbQzzacySaaDkR7xE0ydl4Q== +react-overlays@^5.1.2: + version "5.2.1" + resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-5.2.1.tgz#49dc007321adb6784e1f212403f0fb37a74ab86b" + integrity sha512-GLLSOLWr21CqtJn8geSwQfoJufdt3mfdsnIiQswouuQ2MMPns+ihZklxvsTDKD3cR2tF8ELbi5xUsvqVhR6WvA== dependencies: "@babel/runtime" "^7.13.8" - "@popperjs/core" "^2.8.6" - "@restart/hooks" "^0.3.26" + "@popperjs/core" "^2.11.6" + "@restart/hooks" "^0.4.7" "@types/warning" "^3.0.0" dom-helpers "^5.2.0" prop-types "^15.7.2" @@ -23466,47 +24358,29 @@ react-refresh@^0.14.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== -react-router-dom@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.3.0.tgz#a0216da813454e521905b5fa55e0e5176123f43d" - integrity sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw== - dependencies: - history "^5.2.0" - react-router "6.3.0" - -react-router@6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.3.0.tgz#3970cc64b4cb4eae0c1ea5203a80334fdd175557" - integrity sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ== +react-router-dom@^6.16.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.21.0.tgz#aa4c6bc046a8e8723095bc09b3c0ab2254532712" + integrity sha512-1dUdVj3cwc1npzJaf23gulB562ESNvxf7E4x8upNJycqyUm5BRRZ6dd3LrlzhtLaMrwOCO8R0zoiYxdaJx4LlQ== dependencies: - history "^5.2.0" + "@remix-run/router" "1.14.0" + react-router "6.21.0" -react-shallow-renderer@^16.13.1: - version "16.15.0" - resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz#48fb2cf9b23d23cde96708fe5273a7d3446f4457" - integrity sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA== +react-router@6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.21.0.tgz#6fe3e59877aca3dccceec1801d26991ddf42d12b" + integrity sha512-hGZ0HXbwz3zw52pLZV3j3+ec+m/PQ9cTpBvqjFQmy2XVUWGn5MD+31oXHb6dVTxYzmAeaiUBYjkoNz66n3RGCg== dependencies: - object-assign "^4.1.1" - react-is "^16.12.0 || ^17.0.0 || ^18.0.0" + "@remix-run/router" "1.14.0" -react-tabs@^3.2.2: - version "3.2.3" - resolved "https://registry.yarnpkg.com/react-tabs/-/react-tabs-3.2.3.tgz#ccbb3e1241ad3f601047305c75db661239977f2f" - integrity sha512-jx325RhRVnS9DdFbeF511z0T0WEqEoMl1uCE3LoZ6VaZZm7ytatxbum0B8bCTmaiV0KsU+4TtLGTGevCic7SWg== +react-tabs@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/react-tabs/-/react-tabs-6.0.2.tgz#bc1065c3828561fee285a8fd045f22e0fcdde1eb" + integrity sha512-aQXTKolnM28k3KguGDBSAbJvcowOQr23A+CUJdzJtOSDOtTwzEaJA+1U4KwhNL9+Obe+jFS7geuvA7ICQPXOnQ== dependencies: - clsx "^1.1.0" + clsx "^2.0.0" prop-types "^15.5.0" -react-test-renderer@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-17.0.2.tgz#4cd4ae5ef1ad5670fc0ef776e8cc7e1231d9866c" - integrity sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ== - dependencies: - object-assign "^4.1.1" - react-is "^17.0.2" - react-shallow-renderer "^16.13.1" - scheduler "^0.20.2" - react-textarea-autosize@~8.3.2: version "8.3.4" resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz#270a343de7ad350534141b02c9cb78903e553524" @@ -23517,27 +24391,51 @@ react-textarea-autosize@~8.3.2: use-latest "^1.2.1" react-transition-group@^4.4.1: - version "4.4.2" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.2.tgz#8b59a56f09ced7b55cbd53c36768b922890d5470" - integrity sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg== + version "4.4.5" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== dependencies: "@babel/runtime" "^7.5.5" dom-helpers "^5.0.1" loose-envify "^1.4.0" prop-types "^15.6.2" -react-zoom-pan-pinch@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/react-zoom-pan-pinch/-/react-zoom-pan-pinch-3.0.2.tgz#706c67e875e9a30480cdbef8dd4e3d6fdac9921c" - integrity sha512-c8BxPl/zK6RiOYrV/xBQ+ebgZpsMvbz6WOoqv2P/1QWxGCk1+q3xWF+5ub4QYasv4W8+J6vSelOR8H0WCEbL4w== +react-virtualized@^9.22.5: + version "9.22.5" + resolved "https://registry.yarnpkg.com/react-virtualized/-/react-virtualized-9.22.5.tgz#bfb96fed519de378b50d8c0064b92994b3b91620" + integrity sha512-YqQMRzlVANBv1L/7r63OHa2b0ZsAaDp1UhVNEdUaXI8A5u6hTpA5NYtUueLH2rFuY/27mTGIBl7ZhqFKzw18YQ== + dependencies: + "@babel/runtime" "^7.7.2" + clsx "^1.0.4" + dom-helpers "^5.1.3" + loose-envify "^1.4.0" + prop-types "^15.7.2" + react-lifecycles-compat "^3.0.4" -react@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== +react-virtuoso@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/react-virtuoso/-/react-virtuoso-4.6.2.tgz#74b59ebe3260e1f73e92340ffec84a6853285a12" + integrity sha512-vvlqvzPif+MvBrJ09+hJJrVY0xJK9yran+A+/1iwY78k0YCVKsyoNPqoLxOxzYPggspNBNXqUXEcvckN29OxyQ== + +react-window@^1.8.10: + version "1.8.10" + resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.10.tgz#9e6b08548316814b443f7002b1cf8fd3a1bdde03" + integrity sha512-Y0Cx+dnU6NLa5/EvoHukUD0BklJ8qITCtVEPY1C/nL8wwoZ0b5aEw8Ff1dOVHw7fCzMt55XfJDd8S8W8LCaUCg== + dependencies: + "@babel/runtime" "^7.0.0" + memoize-one ">=3.1.1 <6" + +react-zoom-pan-pinch@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/react-zoom-pan-pinch/-/react-zoom-pan-pinch-3.3.0.tgz#873648438c5244d89fcc2127614046928429cbe0" + integrity sha512-vy1h8aenDzXye+HRqANZaSA8IPHoqOiuDPFBkswoyPUH8uMfsmbeH6gFI4r4BhEJa0xIlcA+FbvhidRWKGUrOg== + +react@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" read-cache@^1.0.0: version "1.0.0" @@ -23630,6 +24528,14 @@ read-pkg-up@^1.0.1: find-up "^1.0.0" read-pkg "^1.0.0" +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w== + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + read-pkg-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" @@ -23664,6 +24570,15 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA== + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" @@ -23811,6 +24726,13 @@ rechoir@^0.7.0: dependencies: resolve "^1.9.0" +rechoir@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" + integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== + dependencies: + resolve "^1.20.0" + redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -23883,6 +24805,11 @@ regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.7: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + regenerator-transform@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" @@ -23922,7 +24849,7 @@ regexp.prototype.flags@^1.2.0: call-bind "^1.0.2" define-properties "^1.1.3" -regexp.prototype.flags@^1.3.0, regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: +regexp.prototype.flags@^1.3.0, regexp.prototype.flags@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== @@ -24269,6 +25196,13 @@ resolve-options@^1.1.0: dependencies: value-or-function "^3.0.0" +resolve-package@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-package/-/resolve-package-1.0.1.tgz#686f70b188bd7d675f5bbc4282ccda060abb9d27" + integrity sha512-rzB7NnQpOkPHBWFPP3prUMqOP6yg3HkRGgcvR+lDyvyHoY3fZLFLYDkPXh78SPVBAE6VTCk/V+j8we4djg6o4g== + dependencies: + get-installed-path "^2.0.3" + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" @@ -24291,7 +25225,7 @@ resolve@1.17.0: dependencies: path-parse "^1.0.6" -resolve@^1.1.4, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.22.0, resolve@^1.5.0, resolve@^1.9.0: +resolve@^1.1.4, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.22.0, resolve@^1.5.0, resolve@^1.9.0: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -24308,6 +25242,15 @@ resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12. is-core-module "^2.2.0" path-parse "^1.0.6" +resolve@^1.19.0: + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^2.0.0-next.3: version "2.0.0-next.3" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" @@ -24450,6 +25393,18 @@ rlp@^3.0.0: resolved "https://registry.yarnpkg.com/rlp/-/rlp-3.0.0.tgz#5a60725ca4314a3a165feecca1836e4f2c1e2343" integrity sha512-PD6U2PGk6Vq2spfgiWZdomLvRGDreBLxi5jv5M8EpRo3pU6VEm31KO+HFxE18Q3vgqfDrQ9pZA3FP95rkijNKw== +roarr@^2.15.3: + version "2.15.4" + resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd" + integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A== + dependencies: + boolean "^3.0.1" + detect-node "^2.0.4" + globalthis "^1.0.1" + json-stringify-safe "^5.0.1" + semver-compare "^1.0.0" + sprintf-js "^1.1.2" + rollup-plugin-copy@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/rollup-plugin-copy/-/rollup-plugin-copy-3.4.0.tgz#f1228a3ffb66ffad8606e2f3fb7ff23141ed3286" @@ -24685,13 +25640,12 @@ sax@>=0.6.0, sax@~1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: version "3.1.1" @@ -24783,6 +25737,11 @@ selfsigned@^2.1.1: dependencies: node-forge "^1" +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== + semver-diff@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" @@ -24821,6 +25780,13 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semve resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.1.3, semver@^7.2.1, semver@^7.3.2: + version "7.5.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" + integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== + dependencies: + lru-cache "^6.0.0" + semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.4.0: version "7.5.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.2.tgz#5b851e66d1be07c1cdaf37dfc856f543325a2beb" @@ -24873,6 +25839,13 @@ sentence-case@^3.0.4: tslib "^2.0.3" upper-case-first "^2.0.2" +serialize-error@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18" + integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== + dependencies: + type-fest "^0.13.1" + serialize-javascript@5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" @@ -25269,6 +26242,15 @@ socks-proxy-agent@^4.0.0: agent-base "~4.2.1" socks "~2.3.2" +socks-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" + integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + socks-proxy-agent@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.1.tgz#ffc5859a66dac89b0c4dab90253b96705f3e7120" @@ -25278,7 +26260,7 @@ socks-proxy-agent@^8.0.1: debug "^4.3.4" socks "^2.7.1" -socks@^2.7.1: +socks@^2.6.2, socks@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== @@ -25592,6 +26574,11 @@ split@^1.0.0: dependencies: through "2" +sprintf-js@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -25620,6 +26607,13 @@ ssri@^6.0.0, ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" +ssri@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" + integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== + dependencies: + minipass "^3.1.1" + stable@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" @@ -25837,17 +26831,17 @@ string-width@^5.0.0: strip-ansi "^7.0.1" string.prototype.matchall@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" - integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== + version "4.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" + integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - get-intrinsic "^1.1.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" has-symbols "^1.0.3" internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.1" + regexp.prototype.flags "^1.4.3" side-channel "^1.0.4" string.prototype.padend@^3.0.0: @@ -25859,6 +26853,15 @@ string.prototype.padend@^3.0.0: define-properties "^1.1.3" es-abstract "^1.19.1" +string.prototype.trim@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" + integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + string.prototype.trim@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" @@ -25894,6 +26897,15 @@ string.prototype.trimend@^1.0.5: define-properties "^1.1.4" es-abstract "^1.19.5" +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + string.prototype.trimend@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" @@ -25920,6 +26932,15 @@ string.prototype.trimstart@^1.0.5: define-properties "^1.1.4" es-abstract "^1.19.5" +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + string.prototype.trimstart@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" @@ -26063,6 +27084,13 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= +strip-outer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" + integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== + dependencies: + escape-string-regexp "^1.0.2" + strong-log-transformer@^2.0.0, strong-log-transformer@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" @@ -26149,6 +27177,18 @@ subarg@^1.0.0: dependencies: minimist "^1.1.0" +sudo-prompt@^9.1.1: + version "9.2.1" + resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.2.1.tgz#77efb84309c9ca489527a4e749f287e6bdd52afd" + integrity sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw== + +sumchecker@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42" + integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg== + dependencies: + debug "^4.1.0" + superstruct@^0.14.2: version "0.14.2" resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.14.2.tgz#0dbcdf3d83676588828f1cf5ed35cda02f59025b" @@ -26382,6 +27422,18 @@ tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: safe-buffer "^5.2.1" yallist "^3.1.1" +tar@^6.0.5, tar@^6.1.11, tar@^6.1.2: + version "6.1.15" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69" + integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + temp-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" @@ -26768,6 +27820,13 @@ trim-newlines@^3.0.0: resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== +trim-repeated@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" + integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg== + dependencies: + escape-string-regexp "^1.0.2" + trim@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" @@ -26882,7 +27941,7 @@ tslib@^2.0.0, tslib@^2.3.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== -tslib@^2.0.1, tslib@^2.1.0: +tslib@^2.0.1: version "2.6.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410" integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig== @@ -26892,6 +27951,11 @@ tslib@^2.0.3, tslib@^2.3.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== +tslib@^2.1.0: + version "2.5.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.2.tgz#1b6f07185c881557b0ffa84b111a0106989e8338" + integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA== + tslint@~6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.0.0.tgz#1c0148beac4779924216302f192cdaa153618310" @@ -26976,6 +28040,11 @@ type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +type-fest@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" + integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== + type-fest@^0.18.0: version "0.18.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" @@ -27321,6 +28390,13 @@ unique-filename@^1.1.1: dependencies: unique-slug "^2.0.0" +unique-filename@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" + integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== + dependencies: + unique-slug "^3.0.0" + unique-filename@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3" @@ -27335,6 +28411,13 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" +unique-slug@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" + integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== + dependencies: + imurmurhash "^0.1.4" + unique-stream@^2.0.2: version "2.3.1" resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" @@ -27558,6 +28641,14 @@ use@^3.0.0, use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== +username@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/username/-/username-5.1.0.tgz#a7f9325adce2d0166448cdd55d4985b1360f2508" + integrity sha512-PCKbdWw85JsYMvmCv5GH3kXmM66rCd9m1hBEDutPNv94b/pqCMT4NtcKyeWYvLFiE8b+ha1Jdl8XAaUdPn5QTg== + dependencies: + execa "^1.0.0" + mem "^4.3.0" + utf-8-validate@5.0.7, utf-8-validate@^5.0.2: version "5.0.7" resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.7.tgz#c15a19a6af1f7ad9ec7ddc425747ca28c3644922" @@ -28290,7 +29381,7 @@ webpack-dev-server@^4.9.3: webpack-dev-middleware "^5.3.1" ws "^8.4.2" -webpack-merge@^5.7.3, webpack-merge@^5.8.0: +webpack-merge@^5.7.3: version "5.8.0" resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== @@ -28298,6 +29389,14 @@ webpack-merge@^5.7.3, webpack-merge@^5.8.0: clone-deep "^4.0.1" wildcard "^2.0.0" +webpack-merge@^5.8.0: + version "5.9.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.9.0.tgz#dc160a1c4cf512ceca515cc231669e9ddb133826" + integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + webpack-node-externals@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz#1a3407c158d547a9feb4229a9e3385b7b60c9917" @@ -28437,6 +29536,18 @@ which-typed-array@^1.1.2: has-tostringtag "^1.0.0" is-typed-array "^1.1.7" +which-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" + which@1, which@^1.2.8, which@~1.2.14: version "1.2.14" resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" @@ -28465,7 +29576,7 @@ wide-align@1.1.3: dependencies: string-width "^1.0.2 || 2" -wide-align@^1.1.0: +wide-align@^1.1.0, wide-align@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== @@ -28526,11 +29637,6 @@ winston@^3.3.3: triple-beam "^1.3.0" winston-transport "^4.4.0" -word-wrap@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" - integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA== - word-wrap@~1.2.3: version "1.2.5" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" @@ -28725,6 +29831,11 @@ xml2js@^0.4.19: sax ">=0.6.0" xmlbuilder "~11.0.0" +xmlbuilder@^15.1.1: + version "15.1.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5" + integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg== + xmlbuilder@~11.0.0: version "11.0.1" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" @@ -28740,6 +29851,16 @@ xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== +xterm-addon-search@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.12.0.tgz#2ef8f56aecf699a3989223a1260f1e079d7c74e2" + integrity sha512-hXAuO7Ts2+Jf9K8mZrUx8IFd7c/Flgks/jyqA1L4reymyfmXtcsd+WDLel8R9Tgy2CLyKABVBP09/Ua/FmXcvg== + +xterm@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/xterm/-/xterm-5.2.1.tgz#b3fea7bdb55b9be1d4b31f4cd1091f26ac42afb8" + integrity sha512-cs5Y1fFevgcdoh2hJROMVIWwoBHD80P1fIP79gopLHJIE4kTzzblanoivxTiQ4+92YM9IxS36H1q0MxIJXQBcA== + y18n@^3.2.1: version "3.2.2" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" @@ -28940,6 +30061,19 @@ yargs@^15.3.1: y18n "^4.0.0" yargs-parser "^18.1.2" +yargs@^17.0.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + yargs@^17.6.2: version "17.6.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" @@ -28982,6 +30116,14 @@ yargs@~3.10.0: decamelize "^1.0.0" window-size "0.1.0" +yarn-or-npm@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/yarn-or-npm/-/yarn-or-npm-3.0.1.tgz#6336eea4dff7e23e226acc98c1a8ada17a1b8666" + integrity sha512-fTiQP6WbDAh5QZAVdbMQkecZoahnbOjClTQhzv74WX5h2Uaidj1isf9FDes11TKtsZ0/ZVfZsqZ+O3x6aLERHQ== + dependencies: + cross-spawn "^6.0.5" + pkg-dir "^4.2.0" + yauzl@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"