Repository: mysteriumnetwork/mysterium-vpn-desktop Branch: master Commit: e6f390555038 Files: 239 Total size: 1.3 MB Directory structure: gitextract_p7zwqvqt/ ├── .eslintrc ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ └── feature_request.md │ ├── stale.yml │ └── workflows/ │ ├── lint.yml │ └── release.yml ├── .gitignore ├── .prettierrc ├── .yarnclean ├── LICENSE ├── README.md ├── assets/ │ ├── README.md │ └── backgrounds/ │ ├── identity-bg.xcf │ └── terms-bg.xcf ├── build/ │ ├── background.tiff │ ├── entitlements.mac.plist │ └── nsis/ │ └── customize.nsi ├── ci/ │ ├── afterPack.js │ └── notarize.js ├── docs/ │ ├── DEV_GUIDE.md │ ├── DOCS_CONTRIBUTING │ ├── myst-supervisor.mmd │ └── node-tequilapi.mmd ├── monkey-patch-crypto.js ├── package.json ├── sentry-symbols.js ├── sentry.properties ├── src/ │ ├── app/ │ │ ├── .eslintrc │ │ ├── analytics/ │ │ │ ├── analytics.ts │ │ │ └── event.ts │ │ ├── config/ │ │ │ ├── filters.ts │ │ │ └── store.ts │ │ ├── connection/ │ │ │ ├── components/ │ │ │ │ ├── ConnectButton/ │ │ │ │ │ └── ConnectButton.tsx │ │ │ │ └── DisconnectButton/ │ │ │ │ └── DisconnectButton.tsx │ │ │ ├── status.ts │ │ │ └── store.ts │ │ ├── daemon/ │ │ │ ├── components/ │ │ │ │ ├── AppVersion.tsx │ │ │ │ └── StartupLoadingView/ │ │ │ │ └── StartupLoadingView.tsx │ │ │ └── store.ts │ │ ├── feedback/ │ │ │ └── store.ts │ │ ├── identity/ │ │ │ ├── components/ │ │ │ │ ├── IdentityRegistrationView/ │ │ │ │ │ └── IdentityRegistrationView.tsx │ │ │ │ └── IdentityUpgradeView/ │ │ │ │ └── IdentityUpgradeView.tsx │ │ │ ├── identity.ts │ │ │ └── store.ts │ │ ├── index.tsx │ │ ├── location/ │ │ │ ├── components/ │ │ │ │ ├── CurrentIP/ │ │ │ │ │ └── CurrentIP.tsx │ │ │ │ ├── Flag/ │ │ │ │ │ └── Flag.tsx │ │ │ │ └── ProtectionStatus/ │ │ │ │ └── ProtectionStatus.tsx │ │ │ ├── countries.ts │ │ │ └── states.ts │ │ ├── navigation/ │ │ │ ├── components/ │ │ │ │ ├── Routes/ │ │ │ │ │ └── Routes.tsx │ │ │ │ ├── TitleBar/ │ │ │ │ │ ├── NakedTitleBar.tsx │ │ │ │ │ ├── TitleBar.tsx │ │ │ │ │ ├── WindowButtonsLinux.tsx │ │ │ │ │ └── WindowButtonsWindows.tsx │ │ │ │ ├── ViewContainer/ │ │ │ │ │ └── ViewContainer.tsx │ │ │ │ ├── ViewContent/ │ │ │ │ │ └── ViewContent.tsx │ │ │ │ ├── ViewNavBar/ │ │ │ │ │ └── ViewNavBar.tsx │ │ │ │ ├── ViewSidebar/ │ │ │ │ │ └── ViewSidebar.tsx │ │ │ │ └── ViewSplit/ │ │ │ │ └── ViewSplit.tsx │ │ │ ├── locations.ts │ │ │ └── store.ts │ │ ├── onboarding/ │ │ │ ├── components/ │ │ │ │ ├── IdentityBackup/ │ │ │ │ │ ├── IdentityBackup.tsx │ │ │ │ │ └── animation_identity_keys.json │ │ │ │ ├── IdentitySetup/ │ │ │ │ │ ├── IdentitySetup.tsx │ │ │ │ │ └── animation_identity.json │ │ │ │ ├── InitialTopup/ │ │ │ │ │ ├── InitialTopup.tsx │ │ │ │ │ ├── UseReferralCodePrompt.tsx │ │ │ │ │ └── animation_onboarding_topup.json │ │ │ │ ├── IntroductionSteps/ │ │ │ │ │ ├── IntroductionSteps.tsx │ │ │ │ │ ├── Step1.tsx │ │ │ │ │ ├── Step2.tsx │ │ │ │ │ ├── Step3.tsx │ │ │ │ │ ├── Step4.tsx │ │ │ │ │ ├── animation_crypto.json │ │ │ │ │ ├── animation_network.json │ │ │ │ │ ├── animation_payasyougo.json │ │ │ │ │ └── animation_privacy.json │ │ │ │ └── Welcome/ │ │ │ │ └── Welcome.tsx │ │ │ └── store.ts │ │ ├── payment/ │ │ │ ├── components/ │ │ │ │ ├── SelectTaxCountry/ │ │ │ │ │ └── SelectTaxCountry.tsx │ │ │ │ └── SelectTaxState/ │ │ │ │ └── SelectTaxState.tsx │ │ │ ├── currency.ts │ │ │ ├── display.ts │ │ │ ├── methods.ts │ │ │ ├── rate.ts │ │ │ └── store.ts │ │ ├── proposals/ │ │ │ ├── components/ │ │ │ │ ├── CountryFilter/ │ │ │ │ │ └── CountryFilter.tsx │ │ │ │ ├── Preset/ │ │ │ │ │ └── Preset.tsx │ │ │ │ ├── ProposalQuality/ │ │ │ │ │ └── ProposalQuality.tsx │ │ │ │ ├── ProposalTable/ │ │ │ │ │ ├── ProposalTable.tsx │ │ │ │ │ └── RowRenderer.tsx │ │ │ │ ├── QualityFilter/ │ │ │ │ │ └── QualityFilter.tsx │ │ │ │ └── SelectedProposal/ │ │ │ │ └── SelectedProposal.tsx │ │ │ ├── store.ts │ │ │ └── uiProposal.ts │ │ ├── referral/ │ │ │ └── store.ts │ │ ├── storage/ │ │ │ └── localStorage.ts │ │ ├── store.ts │ │ ├── tequilapi/ │ │ │ └── index.ts │ │ ├── ui-kit/ │ │ │ ├── colors.ts │ │ │ ├── components/ │ │ │ │ ├── Anchor.tsx │ │ │ │ ├── Button/ │ │ │ │ │ ├── BrandButton.tsx │ │ │ │ │ ├── CancelButton.tsx │ │ │ │ │ ├── GhostButton.tsx │ │ │ │ │ ├── LightButton.tsx │ │ │ │ │ ├── OutlineButton.tsx │ │ │ │ │ ├── RippleButton.tsx │ │ │ │ │ ├── SecondaryButton.tsx │ │ │ │ │ └── SidebarButtons.tsx │ │ │ │ ├── Clipboard/ │ │ │ │ │ └── Clipboard.tsx │ │ │ │ ├── CryptoAnimation/ │ │ │ │ │ ├── CryptoAnimation.tsx │ │ │ │ │ ├── animation_btc.json │ │ │ │ │ ├── animation_dai.json │ │ │ │ │ ├── animation_doge.json │ │ │ │ │ ├── animation_eth.json │ │ │ │ │ ├── animation_ltc.json │ │ │ │ │ ├── animation_myst.json │ │ │ │ │ └── animation_usdt.json │ │ │ │ ├── LogoTitle/ │ │ │ │ │ └── LogoTitle.tsx │ │ │ │ ├── MysteriumVPN2Toast/ │ │ │ │ │ └── MysteriumVPN2Toast.tsx │ │ │ │ ├── Prompt/ │ │ │ │ │ └── Prompt.tsx │ │ │ │ ├── QR/ │ │ │ │ │ └── QR.tsx │ │ │ │ ├── SectionTitle/ │ │ │ │ │ └── SectionTitle.tsx │ │ │ │ ├── Spinner/ │ │ │ │ │ ├── Spinner.tsx │ │ │ │ │ └── animation_spinner.json │ │ │ │ ├── StepProgressBar/ │ │ │ │ │ └── StepProgressBar.tsx │ │ │ │ ├── Toggle/ │ │ │ │ │ └── Toggle.tsx │ │ │ │ └── dismissibleToast.tsx │ │ │ ├── form-components/ │ │ │ │ ├── Checkbox/ │ │ │ │ │ └── Checkbox.tsx │ │ │ │ ├── Search.tsx │ │ │ │ ├── Select.tsx │ │ │ │ ├── TextArea.tsx │ │ │ │ └── TextInput.tsx │ │ │ ├── icons/ │ │ │ │ ├── IconBrowsing.tsx │ │ │ │ ├── IconCloudDownload.tsx │ │ │ │ ├── IconCopy.tsx │ │ │ │ ├── IconDocument.tsx │ │ │ │ ├── IconDownload.tsx │ │ │ │ ├── IconDuration.tsx │ │ │ │ ├── IconGlobe.tsx │ │ │ │ ├── IconIdentity.tsx │ │ │ │ ├── IconMedia.tsx │ │ │ │ ├── IconMusic.tsx │ │ │ │ ├── IconMystToken.tsx │ │ │ │ ├── IconNoPreset.tsx │ │ │ │ ├── IconPaid.tsx │ │ │ │ ├── IconPerson.tsx │ │ │ │ ├── IconPlay.tsx │ │ │ │ ├── IconPriceTier.tsx │ │ │ │ ├── IconReceived.tsx │ │ │ │ ├── IconSent.tsx │ │ │ │ ├── IconSettings.tsx │ │ │ │ ├── IconWallet.tsx │ │ │ │ └── Props.tsx │ │ │ └── typography.ts │ │ └── views/ │ │ ├── common/ │ │ │ ├── AcceptTerms/ │ │ │ │ └── AcceptTermsView.tsx │ │ │ ├── Help/ │ │ │ │ ├── HelpContentReportIssue.tsx │ │ │ │ ├── HelpContentTermsAndConditions.tsx │ │ │ │ └── HelpView.tsx │ │ │ ├── Loading/ │ │ │ │ ├── LoadingView.tsx │ │ │ │ ├── animation_loading_loop.json │ │ │ │ └── animation_loading_start.json │ │ │ └── Settings/ │ │ │ ├── ExportIdentityPrompt.tsx │ │ │ ├── ImportIdentityPrompt.tsx │ │ │ ├── SettingsConnection.tsx │ │ │ ├── SettingsFilters.tsx │ │ │ ├── SettingsMysteriumId.tsx │ │ │ └── SettingsView.tsx │ │ └── consumer/ │ │ ├── Connected/ │ │ │ ├── ConnectedView.tsx │ │ │ ├── ConnectionProposal.tsx │ │ │ ├── ConnectionStatistics.tsx │ │ │ ├── animation_connected_loop.json │ │ │ ├── animation_connecting_loop.json │ │ │ └── animation_connecting_start.json │ │ ├── Proposals/ │ │ │ ├── ManualConnectView.tsx │ │ │ ├── ProposalSearch.tsx │ │ │ ├── QuickConnectView.tsx │ │ │ ├── SwitchConnectView.tsx │ │ │ └── animation_quick_connect.json │ │ ├── Referral/ │ │ │ └── ReferralView.tsx │ │ ├── Topup/ │ │ │ ├── TopupChooseMethod.tsx │ │ │ ├── TopupFailed.tsx │ │ │ ├── TopupRoutes.tsx │ │ │ ├── TopupSuccess.tsx │ │ │ ├── coingate/ │ │ │ │ ├── CoingateOrderSummary.tsx │ │ │ │ ├── CoingatePaymentOptions.tsx │ │ │ │ ├── CoingateSelectAmount.tsx │ │ │ │ ├── CoingateWaitingForPayment.tsx │ │ │ │ └── LogoCoingate.tsx │ │ │ ├── common/ │ │ │ │ ├── OptionLabel.tsx │ │ │ │ ├── OptionValue.tsx │ │ │ │ └── OrderBreakdown.tsx │ │ │ ├── myst/ │ │ │ │ ├── MystChooseChain.tsx │ │ │ │ ├── MystPolygonWaitingForPayment.tsx │ │ │ │ └── MystSelectAmount.tsx │ │ │ ├── paypal/ │ │ │ │ ├── LogoPaypal.tsx │ │ │ │ ├── PaypalOrderSummary.tsx │ │ │ │ ├── PaypalPaymentOptions.tsx │ │ │ │ ├── PaypalSelectAmount.tsx │ │ │ │ └── PaypalWaitingForPayment.tsx │ │ │ └── stripe/ │ │ │ ├── LogoStripe.tsx │ │ │ ├── StripeOrderSummary.tsx │ │ │ ├── StripePaymentOptions.tsx │ │ │ ├── StripeSelectAmount.tsx │ │ │ └── StripeWaitingForPayment.tsx │ │ └── Wallet/ │ │ └── WalletView.tsx │ ├── config.ts │ ├── main/ │ │ ├── .eslintrc │ │ ├── cliFlags.tsx │ │ ├── index.tsx │ │ ├── menu.ts │ │ ├── node/ │ │ │ ├── mysteriumNode.ts │ │ │ ├── supervisor.ts │ │ │ └── tequila.ts │ │ └── tray.ts │ ├── shared/ │ │ ├── errors/ │ │ │ ├── parseError.ts │ │ │ └── sentry.ts │ │ ├── ipc.ts │ │ ├── log/ │ │ │ └── log.ts │ │ ├── node/ │ │ │ ├── mysteriumNodeIPC.ts │ │ │ └── supervisorIPC.ts │ │ └── push/ │ │ └── topics.ts │ ├── typings/ │ │ ├── assets.d.ts │ │ ├── libraries.d.ts │ │ └── react-table-config.d.ts │ └── utils/ │ ├── env.ts │ ├── handleProcessExit.ts │ ├── paths.ts │ ├── spawn.ts │ ├── sudo.ts │ └── user.ts ├── static/ │ ├── logo.icns │ ├── sudo-askpass.osascript.js │ └── support.html ├── tsconfig.json ├── webpack.main.additions.js └── webpack.renderer.additions.js ================================================ FILE CONTENTS ================================================ ================================================ FILE: .eslintrc ================================================ { "parser": "@typescript-eslint/parser", "extends": [ "plugin:react/recommended", "plugin:@typescript-eslint/recommended", "prettier", "plugin:prettier/recommended" ], "parserOptions": { "ecmaVersion": 2018, "sourceType": "module", "ecmaFeatures": { "jsx": true } }, "plugins": [ "header", "import" ], "ignorePatterns": ["static/*.js"], "rules": { "react/prop-types": "off", "header/header": [2, "block", [ "*", {"pattern": " * Copyright \\(c\\) \\d{4} BlockDev AG", "template": " * Copyright (c) 2022 BlockDev AG"}, " *", " * This source code is licensed under the MIT license found in the", " * LICENSE file in the root directory of this source tree.", " " ]], "import/order": ["error", { "newlines-between": "always" }] }, "settings": { "react": { "version": "detect" } } } ================================================ FILE: .gitattributes ================================================ * text=auto eol=lf ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.md ================================================ --- name: Bug report about: Submit a bug report to help us improve title: "[bug]" labels: bug assignees: '' --- **Describe the bug** A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. See error **Expected behavior** A clear and concise description of what you expected to happen. **Logs** Attach logs (app, node, supervisor) to the issue. Where to find the logs: https://github.com/mysteriumnetwork/mysterium-vpn-desktop#logs **Screenshots** If applicable, add screenshots to help explain your problem. **Desktop (please complete the following information):** - OS: [e.g. Windows 10] - App Version [e.g. 4.1.0] **Additional context** Add any other context about the problem here. ================================================ FILE: .github/ISSUE_TEMPLATE/feature_request.md ================================================ --- name: Feature request about: Suggest an idea for this project title: "[feature request]" labels: enhancement assignees: '' --- **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. **Additional context** Add any other context or screenshots about the feature request here. ================================================ FILE: .github/stale.yml ================================================ # Number of days of inactivity before an issue becomes stale daysUntilStale: 90 # Number of days of inactivity before a stale issue is closed daysUntilClose: 7 # Issues with these labels will never be considered stale exemptLabels: - enhancement - security # Label to use when marking an issue as stale staleLabel: stale # Comment to post when marking an issue as stale. Set to `false` to disable markComment: > This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Is this issue still relevant? # Comment to post when closing a stale issue. Set to `false` to disable closeComment: false ================================================ FILE: .github/workflows/lint.yml ================================================ name: Lint on: [pull_request, push] jobs: lint: name: Lint runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 18 - run: yarn install --frozen-lockfile - run: yarn lint ================================================ FILE: .github/workflows/release.yml ================================================ name: Release on: push: # If the commit is tagged with a version (e.g. "1.0.0") release the app after building tags: ["*"] jobs: release: runs-on: ${{ matrix.os }} strategy: matrix: os: [macos-latest, windows-latest, ubuntu-latest] steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 18 - run: yarn install --frozen-lockfile - uses: battila7/get-version-action@v2 id: get_version - name: Replace version run: yarn version --no-git-tag-version --new-version ${{ steps.get_version.outputs.version }} - name: Install rpmbuild run: sudo apt install -y rpm # Only install rpmbuild on Ubuntu if: startsWith(matrix.os, 'ubuntu') - name: Bundle & release uses: samuelmeuli/action-electron-builder@v1 with: build_script_name: "build" release: true github_token: ${{ secrets.github_token }} # macOS code signing certificate mac_certs: ${{ secrets.mac_certs }} mac_certs_password: ${{ secrets.mac_certs_password }} # Windows code signing certificate # windows_certs: ${{ secrets.windows_certs }} # windows_certs_password: ${{ secrets.windows_certs_password }} env: APPLEID: ${{ secrets.APPLEID }} APPLEIDPASS: ${{ secrets.APPLEIDPASS }} APPLETEAMID: ${{ secrets.APPLETEAMID }} ================================================ FILE: .gitignore ================================================ node_modules dist/ static/bin/ *.log .idea .electron-symbols ================================================ FILE: .prettierrc ================================================ { "semi": false, "trailingComma": "all", "singleQuote": false, "printWidth": 120, "tabWidth": 4 } ================================================ FILE: .yarnclean ================================================ @types/react-native ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2020 BlockDev AG Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ # mysterium-vpn-desktop [![GitHub release (latest by date)](https://img.shields.io/github/v/release/mysteriumnetwork/mysterium-vpn-desktop)](https://github.com/mysteriumnetwork/mysterium-vpn-desktop/releases/latest) [![Downloads](https://img.shields.io/github/downloads/mysteriumnetwork/mysterium-vpn-desktop/total.svg)](https://github.com/mysteriumnetwork/mysterium-vpn-desktop/releases) [![Lint](https://github.com/mysteriumnetwork/mysterium-vpn-desktop/workflows/Lint/badge.svg?event=push)](https://github.com/mysteriumnetwork/mysterium-vpn-desktop/actions?query=workflow%3ALint) ## ⚠️ MysteriumVPN 2.0 for Desktop is available. https://www.mysteriumvpn.com Mysterium VPN is a Desktop VPN client for Windows, macOS and Linux. It is the first Mysterium Network use case in action. Our dVPN is our flagship product and showcases the potential of our residential IP network. [Learn more](https://docs.mysterium.network/) ## Usage Download and install the [latest version](https://github.com/mysteriumnetwork/mysterium-vpn-desktop/releases/latest) for your platform. After installation, run MysteriumVPN to get started. ### Linux #### Ubuntu/Debian - Download the `.deb` package from [releases](https://github.com/mysteriumnetwork/mysterium-vpn-desktop/releases/latest) - Install app with dependencies: ```sh sudo apt install ./package-name.deb ``` #### CentOS/Fedora/RHEL - Download the `.rpm` package from [releases](https://github.com/mysteriumnetwork/mysterium-vpn-desktop/releases/latest) - Install app with dependencies: ```sh sudo dnf install package-name.rpm ``` ### macOS #### Manual Install - Download the `.dmg` package from [releases](https://github.com/mysteriumnetwork/mysterium-vpn-desktop/releases/latest) - Open the package and drag `MysteriumVPN.app` onto the `Applications` shortcut #### Homebrew - Mysterium VPN can also be installed with [Homebrew](https://brew.sh/): ```sh brew install --cask mysteriumvpn ``` - Update ```sh brew upgrade --cask mysteriumvpn ``` ### Windows #### Manual Install - Download the `.exe` file from [releases](https://github.com/mysteriumnetwork/mysterium-vpn-desktop/releases/latest) - Run the executable to install #### Chocolatey - Mysterium VPN can also be installed with [chocolatey](https://chocolatey.org/): ```pwsh choco install -y mysteriumvpn ``` - Update ```pwsh choco update -y mysteriumvpn ``` ## Logs Logs help to debug issues when something goes wrong. Make sure to attach all of them when submitting a bug report. ### Windows - `%USERPROFILE%\AppData\Roaming\MysteriumVPN\logs` (app) - `%USERPROFILE%\.mysterium\logs\mysterium-node.log` (node) - `%PROGRAMDATA%\MystSupervisor\myst_supervisor.log` (supervisor) ### macOS - `~/Library/Logs/MysteriumVPN` (app) - `~/.mysterium/logs/mysterium-node.log` (node) - `/var/log/myst_supervisor.log` (supervisor) ### Linux - `~/.config/MysteriumVPN/logs` (app) - `~/.mysterium/logs/mysterium-node.log` (node) - `/var/log/myst_supervisor.log` (supervisor) ** Note: In development mode, application logs are printed to the console ## Development Pre-requisites: - Node >=16 LTS - yarn 1. Install and build the project ``` yarn && yarn build ``` 2. Start (webpack dev server with hot reload): ``` yarn dev ``` ## Packaging for distribution Required env variables (macOS): - APPLEID - APPLEIDPASS (generate an app-specific password for this) - APPLETEAMID ``` yarn bundle ``` ## Development guide [./docs/DEV_GUIDE.md](./docs/DEV_GUIDE.md) ### Upgrading electron version When upgrading, upload debug symbols to sentry: ``` node sentry-symbols.js ``` https://docs.sentry.io/platforms/javascript/electron/#uploading-debug-information ================================================ FILE: assets/README.md ================================================ A directory for original assets used throughout the application. Not to be used directly! ================================================ FILE: build/entitlements.mac.plist ================================================ com.apple.security.cs.allow-jit com.apple.security.cs.allow-unsigned-executable-memory com.apple.security.cs.allow-dyld-environment-variables ================================================ FILE: build/nsis/customize.nsi ================================================ RequestExecutionLevel admin !macro customInstall File "/oname=$INSTDIR\resources\app.asar.unpacked\node_modules\@mysteriumnetwork\node\bin\win\x64\wintun.dll" "${BUILD_RESOURCES_DIR}\nsis\wintun.dll" DetailPrint "Installing Supervisor service..." nsExec::ExecToStack '"$INSTDIR\resources\app.asar.unpacked\node_modules\@mysteriumnetwork\node\bin\win\x64\myst_supervisor.exe" --install --uid "0"' Pop $0 Pop $1 ${ifNot} $0 == 0 MessageBox MB_OK `Supervisor service install failed (error $0).$\r$\n$\r$\n$1` ${endif} !macroend !macro customRemoveFiles DetailPrint "Uninstalling supervisor service..." nsExec::Exec '"$INSTDIR\resources\app.asar.unpacked\node_modules\@mysteriumnetwork\node\bin\win\x64\myst_supervisor.exe" --uninstall' RMDir /r $INSTDIR !macroend ================================================ FILE: ci/afterPack.js ================================================ /** * Copyright (c) 2022 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ /* eslint-disable @typescript-eslint/no-var-requires */ const path = require("path") const chmodr = require("chmodr") const { Arch } = require("electron-builder") exports.default = async function afterPack(context) { const { electronPlatformName, appOutDir, packager, arch } = context if (electronPlatformName === "darwin" && arch === Arch.universal) { // Some files lose their attributes after app.asar merge (for macOS universal binary), // thus we need to set +x for the binaries const nodeBinDir = path.join( packager.getResourcesDir(appOutDir), "app.asar.unpacked", "node_modules", "@mysteriumnetwork", "node", "bin", ) chmodr.sync(nodeBinDir, 0o755) } } ================================================ FILE: ci/notarize.js ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ // eslint-disable-next-line @typescript-eslint/no-var-requires const { notarize } = require("@electron/notarize") // eslint-disable-next-line @typescript-eslint/no-var-requires const packageJson = require("../package.json") exports.default = async function notarizing(context) { const { electronPlatformName, appOutDir } = context if (electronPlatformName !== "darwin") { return } if (process.env.CSC_IDENTITY_AUTO_DISCOVERY === "false") { console.log("CSC_IDENTITY_AUTO_DISCOVERY is set to false, skipping notarization") return } const appName = context.packager.appInfo.productFilename return await notarize({ appBundleId: packageJson.build.appId, appPath: `${appOutDir}/${appName}.app`, appleId: process.env.APPLEID, appleIdPassword: process.env.APPLEIDPASS, teamId: process.env.APPLETEAMID, }) } ================================================ FILE: docs/DEV_GUIDE.md ================================================ # Developer's guide to Mysterium VPN desktop app This desktop app is built with: - [Typescript](https://www.typescriptlang.org/) - Typed superset of JavaScript that compiles to plain JavaScript - [Electron](https://www.electronjs.org/) - Build cross-platform desktop apps with JavaScript, HTML, and CSS - [node](https://github.com/mysteriumnetwork/node) - Mysterium Node, hereinafter referred to as Node - [node/supervisor](https://github.com/mysteriumnetwork/node/tree/master/supervisor) - Supervisor: Background service for installing/running Node - [mysterium-vpn-js](https://github.com/mysteriumnetwork/mysterium-vpn-js) - JS SDK for communicating with Node - [mobx-react-lite](https://github.com/mobxjs/mobx-react-lite) - Simple, scalable state management ## Supervisor Supervisor's job is to start Node when necessary and kill it when its job is done. Below is a typical communication sequence on a user system where neither Supervisor nor Node is initially running (clean install). ![Myst supervisor](./myst-supervisor.png) ## Node (Tequilapi) Desktop app communicates to Node's REST API, _aka_ Tequilapi. The easiest way to do that is to use [JS SDK](https://github.com/mysteriumnetwork/mysterium-vpn-js). Another possible way is to construct HTTP calls by yourself, consulting [documentation](https://tequilapi.mysterium.network/). Below is a typical communication sequence between the App and the Node when establishing a VPN connection. ![Node Tequilapi](./node-tequilapi.png) ## Further steps Fork the repository and start hacking! ================================================ FILE: docs/DOCS_CONTRIBUTING ================================================ PNGs generated by MermaidJS Live Editor: https://mermaid-js.github.io/mermaid-live-editor ================================================ FILE: docs/myst-supervisor.mmd ================================================ sequenceDiagram Note right of Desktop app: Application starts Desktop app->>Node: Healthcheck Node-->>Desktop app: Failed Desktop app->>Supervisor: Run node Supervisor-->>Desktop app: Failed Desktop app->>Desktop app: Ask for permissions Desktop app->>Supervisor: Install supervisor and node Supervisor-->>Desktop app: Success Desktop app->>Supervisor: Run node Supervisor-->>Desktop app: Success Desktop app->>Node: Healthcheck Node-->>Desktop app: Success Note right of Desktop app: Application logic Note right of Desktop app: Application closes Desktop app->>Supervisor: Kill node Supervisor-->>Desktop app: Success Note right of Desktop app: Application exits ================================================ FILE: docs/node-tequilapi.mmd ================================================ sequenceDiagram Note right of Desktop app: Application starts Desktop app->>Node: healthcheck() Node-->>Desktop app: ok Desktop app->>Node: identityCurrent() Node->>Node: Identity registration if necessary Node-->>Desktop app: ok { id: 0x.... } Desktop app->>Node: findProposals() Node-->>Desktop app: ok { proposals: [...] } Note right of Desktop app: User selects proposal Desktop app->>Node: connectionCreate() Node-->>Desktop app: ok Desktop app->>Node: connectionStatus() Node-->>Desktop app: ok Note right of Desktop app: VPN session is active Desktop app->>Node: connectionCancel() Node-->>Desktop app: ok ================================================ FILE: monkey-patch-crypto.js ================================================ /** * Copyright (c) 2022 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ // eslint-disable-next-line @typescript-eslint/no-var-requires const crypto = require("crypto") /** * @see {@link https://stackoverflow.com/a/72219174} */ let cryptoPatched = false const monkeyPatchCrypto = () => { if (cryptoPatched) return cryptoPatched = true /** * The MD4 algorithm is not available anymore in Node.js 17+ (because of library SSL 3). * In that case, silently replace MD4 by the MD5 algorithm. */ try { crypto.createHash("md4") } catch (e) { console.warn('Crypto "MD4" is not supported anymore by this Node.js version') const origCreateHash = crypto.createHash crypto.createHash = (alg, opts) => { return origCreateHash(alg === "md4" ? "md5" : alg, opts) } } } monkeyPatchCrypto() ================================================ FILE: package.json ================================================ { "name": "mysterium-vpn-desktop", "productName": "MysteriumDark", "description": "Desktop VPN client (legacy) for Mysterium Network", "version": "0.0.0-snapshot", "main": "index.js", "author": { "name": "Mysterium Network", "email": "mysterium-dev@mysterium.network", "url": "https://mysterium.network/" }, "license": "MIT", "scripts": { "dev": "electron-webpack dev", "lint": "eslint src", "clean": "shx rm -rf dist", "build": "electron-webpack", "bundle": "yarn build && electron-builder", "bundle-dev": "yarn build && CSC_IDENTITY_AUTO_DISCOVERY=false electron-builder" }, "engines": { "node": ">=16" }, "dependencies": { "@fortawesome/fontawesome-svg-core": "^1.2.35", "@fortawesome/free-brands-svg-icons": "^5.15.3", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/react-fontawesome": "^0.1.14", "@mysteriumnetwork/node": "1.29.2", "@mysteriumnetwork/terms": "0.0.50", "@sentry/electron": "^4.0.0", "@use-it/interval": "^1.0.0", "async-retry": "^1.3.3", "bignumber.js": "^9.0.2", "byte-size": "^8.0.0", "electron-log": "^4.4.8", "electron-updater": "^5.2.1", "history": "^5.3.0", "lodash": "^4.17.21", "mkdirp": "^1.0.4", "mobx": "^6.6.0", "mobx-logger": "^0.7.1", "mobx-react-lite": "^3.3.0", "mysterium-vpn-js": "^28.0.0", "node-machine-id": "^1.1.12", "open": "^7.0.0", "qrcode.react": "^2.0.0", "react": "^18.2.0", "react-autosuggest": "^10.1.0", "react-circle-flags": "^0.0.17", "react-countdown": "^2.3.2", "react-dom": "^18.2.0", "react-hook-form": "^7.31.1", "react-hot-toast": "^2.2.0", "react-is": "^18.2.0", "react-lottie-player": "^1.4.3", "react-markdown": "^6.0.2", "react-router-dom": "^6.3.0", "react-table": "^7.7.0", "react-tooltip": "^4.2.21", "react-virtualized-auto-sizer": "^1.0.6", "react-window": "^1.8.7", "semver": "^7.5.2", "source-map-support": "^0.5.21", "styled-components": "5.3.0", "sudo-prompt": "^9.2.1" }, "devDependencies": { "@electron/notarize": "^2.2.0", "@sentry/cli": "^2.5.2", "@types/async-retry": "^1.4.3", "@types/electron-devtools-installer": "^2.2.2", "@types/lodash": "^4.14.179", "@types/node": "^16.0.0", "@types/qrcode.react": "^1.0.2", "@types/react": "^18.0.14", "@types/react-autosuggest": "^10.1.5", "@types/react-dom": "^18.0.5", "@types/react-table": "^7.7.12", "@types/react-virtualized-auto-sizer": "^1.0.1", "@types/react-window": "^1.8.5", "@types/semver": "^7.3.9", "@types/styled-components": "^5.1.24", "@types/webpack-env": "^1.16.3", "@typescript-eslint/eslint-plugin": "^5.23.0", "@typescript-eslint/parser": "^5.23.0", "chmodr": "^1.2.0", "cross-env": "^7.0.3", "electron": "^20.1.2", "electron-builder": "^23.3.3", "electron-devtools-installer": "^3.2.0", "electron-download": "^4.1.1", "electron-webpack": "^2.8.2", "electron-webpack-ts": "^4.0.1", "eslint": "^8.23.1", "eslint-config-prettier": "^8.5.0", "eslint-plugin-header": "^3.1.1", "eslint-plugin-import": "^2.26.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-react": "^7.31.8", "glob": "^7.2.0", "prettier": "^2.7.1", "shx": "^0.3.3", "typescript": "^4.6.4", "url-loader": "^4.1.0", "webpack": "^4.46.0" }, "resolutions": { "@types/react": "^18.0.14" }, "analyticsUrl": "https://analytics.mysterium.network", "intercomAppId": "sjkeehf4", "sentryDsn": "https://5c3208e8d6124f2db303a2d12c7f48b8@o136129.ingest.sentry.io/5222592", "electronWebpack": { "renderer": { "sourceDirectory": "src/app", "template": "src/app/index.html", "webpackConfig": "webpack.renderer.additions.js" }, "main": { "webpackConfig": "webpack.main.additions.js" } }, "build": { "appId": "network.mysterium.mysterium-vpn-desktop", "directories": { "buildResources": "build", "output": "dist" }, "files": [ "!**/node_modules/@mysteriumnetwork/node/bin/**", "**/node_modules/@mysteriumnetwork/node/bin/${os}/${arch}/**" ], "mac": { "target": { "target": "default", "arch": "universal" }, "singleArchFiles": "**/node_modules/@mysteriumnetwork/node/bin/**", "icon": "static/logo.icns", "hardenedRuntime": true, "entitlements": "build/entitlements.mac.plist", "entitlementsInherit": "build/entitlements.mac.plist", "category": "public.app-category.productivity" }, "dmg": { "background": "build/background.tiff", "iconTextSize": 14 }, "win": { "target": [ "nsis" ], "icon": "static/logo.icns" }, "linux": { "target": [ "deb", "rpm" ], "icon": "static/logo.icns", "category": "Network" }, "deb": { "depends": [ "resolvconf", "libgtk-3-0", "libnotify4", "libnss3", "libxss1", "libxtst6", "xdg-utils", "libatspi2.0-0", "libuuid1", "libappindicator3-1", "libsecret-1-0" ] }, "rpm": { "depends": [ "resolvconf", "at-spi2-core", "gtk3", "libXScrnSaver", "libXtst", "libnotify", "libuuid", "nss", "xdg-utils" ] }, "nsis": { "oneClick": true, "perMachine": true, "allowElevation": true, "runAfterFinish": true, "include": "build/nsis/customize.nsi" }, "afterPack": "ci/afterPack.js", "afterSign": "ci/notarize.js", "publish": { "provider": "github", "releaseType": "prerelease", "vPrefixedTagName": false } } } ================================================ FILE: sentry-symbols.js ================================================ #!/usr/bin/env node /* eslint-disable */ let SentryCli; let download; try { SentryCli = require('@sentry/cli'); download = require('electron-download'); } catch (e) { console.error('ERROR: Missing required packages, please run:'); console.error('npm install --save-dev @sentry/cli electron-download'); process.exit(1); } const VERSION = /\bv?(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)(?:-[\da-z-]+(?:\.[\da-z-]+)*)?(?:\+[\da-z-]+(?:\.[\da-z-]+)*)?\b/i; const SYMBOL_CACHE_FOLDER = '.electron-symbols'; const package = require('./package.json'); const sentryCli = new SentryCli('./sentry.properties'); async function main() { let version = getElectronVersion(); if (!version) { console.error('Cannot detect electron version, check package.json'); return; } console.log('We are starting to download all possible electron symbols'); console.log('We need it in order to symbolicate native crashes'); console.log( 'This step is only needed once whenever you update your electron version', ); console.log('Just call this script again it should do everything for you.'); let zipPath = await downloadSymbols({ version, platform: 'darwin', arch: 'x64', dsym: true, }); await sentryCli.execute(['upload-dif', '-t', 'dsym', zipPath], true); zipPath = await downloadSymbols({ version, platform: 'win32', arch: 'ia32', symbols: true, }); await sentryCli.execute(['upload-dif', '-t', 'breakpad', zipPath], true); zipPath = await downloadSymbols({ version, platform: 'win32', arch: 'x64', symbols: true, }); await sentryCli.execute(['upload-dif', '-t', 'breakpad', zipPath], true); zipPath = await downloadSymbols({ version, platform: 'linux', arch: 'x64', symbols: true, }); await sentryCli.execute(['upload-dif', '-t', 'breakpad', zipPath], true); console.log('Finished downloading and uploading to Sentry'); console.log(`Feel free to delete the ${SYMBOL_CACHE_FOLDER}`); } function getElectronVersion() { if (!package) { return false; } let electronVersion = (package.dependencies && package.dependencies.electron) || (package.devDependencies && package.devDependencies.electron); if (!electronVersion) { return false; } const matches = VERSION.exec(electronVersion); return matches ? matches[0] : false; } async function downloadSymbols(options) { return new Promise((resolve, reject) => { download( { ...options, cache: SYMBOL_CACHE_FOLDER, }, (err, zipPath) => { if (err) { reject(err); } else { resolve(zipPath); } }, ); }); } main().catch(e => console.error(e)); ================================================ FILE: sentry.properties ================================================ defaults.url=https://sentry.io/ defaults.org=mysterium-network defaults.project=mysterium-vpn-desktop cli.executable=../../.config/yarn/global/node_modules/@sentry/cli/bin/sentry-cli ================================================ FILE: src/app/.eslintrc ================================================ { "extends": [ "../../.eslintrc" ], "rules": { "no-restricted-imports": ["error", { "patterns": [ "main" ] }] } } ================================================ FILE: src/app/analytics/analytics.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { autorun } from "mobx" import { ipcRenderer } from "electron" import retry from "async-retry" import * as packageJson from "../../../package.json" import { rootStore } from "../store" import { MainIpcListenChannels } from "../../shared/ipc" import { log } from "../../shared/log/log" import { isDevelopment } from "../../utils/env" import { Client, Event } from "./event" interface Request extends Event { client?: Client } export class Analytics { baseUrl: string disabled: boolean client: Client = {} constructor({ baseUrl, disabled }: { baseUrl: string; disabled: boolean }) { this.baseUrl = baseUrl this.disabled = disabled } initialize(): void { this.client.app_version = packageJson.version autorun(() => { this.client.os = rootStore.os }) autorun(() => { this.client.country = rootStore.connection.originalLocation?.country }) autorun(() => { this.client.consumer_id = rootStore.identity.identity?.id }) ipcRenderer.invoke(MainIpcListenChannels.GetMachineId).then((machineId) => { this.client.machine_id = machineId }) ipcRenderer.invoke(MainIpcListenChannels.GetOS).then((os) => { this.client.os = os }) ipcRenderer.invoke(MainIpcListenChannels.GetOSVersion).then((os_version) => { this.client.os_version = os_version }) } event = (name: Event["name"], fields?: Omit): void => { log.debug("UserEvent:", name, fields, "Client:", this.client) if (this.disabled) { return } const MAX_RETRIES = 10 const req: Request = { name, ...fields, client: this.client, } retry( async () => { return await fetch(`${this.baseUrl}/events`, { mode: "no-cors", method: "POST", body: JSON.stringify(req), }) }, { onRetry: (e, attempt) => log.warn(`Failed to report event (${attempt}/${MAX_RETRIES}): ${e.message}`), }, ) } } export const analytics = new Analytics({ baseUrl: "https://consumetrics.mysterium.network/api/v1", disabled: isDevelopment(), }) ================================================ FILE: src/app/analytics/event.ts ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ export enum EventName { startup = "startup", connect_attempt = "connect_attempt", connect_success = "connect_success", connect_cancel = "connect_cancel", connect_failure = "connect_failure", manual_connect = "manual_connect", quick_connect = "quick_connect", disconnect_attempt = "disconnect_attempt", disconnect_success = "disconnect_success", disconnect_failure = "disconnect_failure", page_view = "page_view", balance_update = "balance_update", } export interface Event { name: EventName duration?: number balance?: number country?: string provider_id?: string page_title?: string } export interface Client { machine_id?: string app_version?: string os?: string os_version?: string country?: string consumer_id?: string } ================================================ FILE: src/app/config/filters.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { action, computed, makeObservable, reaction } from "mobx" import { QualityLevel } from "mysterium-vpn-js" import { RootStore } from "../store" import { log } from "../../shared/log/log" import { ProposalFilters } from "./store" export class Filters { root: RootStore constructor(root: RootStore) { makeObservable(this, { config: computed, country: computed, presetID: computed, setPartial: action, initialized: computed, defaults: computed, reset: action, }) this.root = root } setupReactions(): void { reaction(() => this.root.config.config, this.onConfigChanged) } onConfigChanged = (): void => { const initialized = this.config.quality != null if (!initialized) { log.info("Config loaded. Filter configuration does not exist, initializing to defaults.") this.reset() } } get config(): ProposalFilters { return this.root.config.config.desktop?.filters || {} } setPartial = (filters: ProposalFilters): Promise => { return this.root.config.updateDesktopConfigPartial({ filters }) } get country(): string | undefined { return this.config.other?.country ?? undefined } get presetID(): number | undefined | null { return this.config.preset?.id } get initialized(): boolean { return this.config.quality?.level != null } get defaults(): ProposalFilters { return { quality: { level: QualityLevel.MEDIUM, "include-failed": false, }, } } reset = (): Promise => { return this.setPartial(this.defaults) } } ================================================ FILE: src/app/config/store.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { action, computed, makeObservable, observable, runInAction, toJS } from "mobx" import { DNSOption, QualityLevel } from "mysterium-vpn-js" import * as termsPackageJson from "@mysteriumnetwork/terms/package.json" import * as _ from "lodash" import { ipcRenderer } from "electron" import { RootStore } from "../store" import { log } from "../../shared/log/log" import { tequilapi } from "../tequilapi" import { MainIpcListenChannels } from "../../shared/ipc" export interface Config { desktop: DesktopConfig payments?: { consumer?: { "price-gib-max"?: number "price-hour-max"?: number } } "keep-connected-on-fail"?: boolean } export interface DesktopConfig { "terms-agreed"?: { at?: string version?: string } onboarded?: boolean dns?: DNSOption "nat-compatibility"?: "auto" | "off" "quick-connect"?: boolean filters?: ProposalFilters "vpn2-offered"?: boolean } export interface ProposalFilters { preset?: { id?: number | null } quality?: { "include-failed"?: boolean level?: QualityLevel } other?: { country?: string | null } } export interface PriceCeiling { perGibMax: number } export class ConfigStore { config: Config = { desktop: {} } loaded = false root: RootStore constructor(root: RootStore) { this.root = root makeObservable(this, { config: observable, loaded: observable, loadConfig: action, updateDesktopConfigPartial: action, updateNodeConfigPartial: action, persistConfig: action, currentTermsAgreed: computed, agreeToTerms: action, dnsOption: computed, setDnsOption: action, autoNATCompatibility: computed, setAutoNATCompatibility: action, onboarded: computed, setOnboarded: action, quickConnect: computed, setQuickConnect: action, killSwitch: computed, setKillSwitch: action, }) } loadConfig = async (): Promise => { const config = await tequilapi.userConfig() runInAction(() => { this.config = { desktop: {}, ...config.data, } log.info("Using config:", JSON.stringify(this.config)) }) runInAction(() => { this.loaded = true }) } updateDesktopConfigPartial = async (desktopConfig: DesktopConfig): Promise => { this.config.desktop = _.merge({}, this.config.desktop, desktopConfig) return this.persistConfig() } updateNodeConfigPartial = async (config: Partial): Promise => { this.config = _.merge({}, this.config, config) return this.persistConfig() } // Offload to main persistConfig = async (): Promise => { ipcRenderer.send(MainIpcListenChannels.SaveUserConfig, toJS(this.config)) } get currentTermsAgreed(): boolean { const version = this.config.desktop?.["terms-agreed"]?.version const at = this.config.desktop?.["terms-agreed"]?.at return !!version && !!at && version == termsPackageJson.version } agreeToTerms = async (): Promise => { await this.updateDesktopConfigPartial({ "terms-agreed": { version: termsPackageJson.version, at: new Date().toISOString(), }, }) } get onboarded(): boolean { return this.config.desktop?.onboarded ?? false } setOnboarded = async (): Promise => { return this.updateDesktopConfigPartial({ onboarded: true }) } get dnsOption(): DNSOption { return this.config.desktop?.dns ?? "provider" } setDnsOption = async (dns: string): Promise => { return this.updateDesktopConfigPartial({ dns }) } get autoNATCompatibility(): boolean { return this.config.desktop?.["nat-compatibility"] !== "off" } setAutoNATCompatibility = async (enabled: boolean): Promise => { return this.updateDesktopConfigPartial({ "nat-compatibility": enabled ? "auto" : "off" }) } get quickConnect(): boolean { return this.config.desktop?.["quick-connect"] !== false } setQuickConnect = async (enabled: boolean): Promise => { return this.updateDesktopConfigPartial({ "quick-connect": enabled }) } get killSwitch(): boolean { return this.config["keep-connected-on-fail"] === true } setKillSwitch = async (enabled: boolean): Promise => { return this.updateNodeConfigPartial({ "keep-connected-on-fail": enabled, }) } get vpn2Offered(): boolean { return this.config.desktop?.["vpn2-offered"] === true } setVpn2Offered = async (): Promise => { return this.updateDesktopConfigPartial({ "vpn2-offered": true }) } } ================================================ FILE: src/app/connection/components/ConnectButton/ConnectButton.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { ConnectionStatus } from "mysterium-vpn-js" import React from "react" import { observer } from "mobx-react-lite" import toast from "react-hot-toast" import { useStores } from "../../../store" import { BrandButton, BrandButtonProps } from "../../../ui-kit/components/Button/BrandButton" import { CancelButton } from "../../../ui-kit/components/Button/CancelButton" import { dismissibleToast } from "../../../ui-kit/components/dismissibleToast" export type ConnectButtonProps = { width?: number height?: number } export const ConnectButton: React.FC = observer(function ConnectButton() { const { connection } = useStores() const text = ((): string => { switch (connection.status) { case ConnectionStatus.NOT_CONNECTED: return "Connect" case ConnectionStatus.CONNECTING: return "Cancel" case ConnectionStatus.CONNECTED: return "Disconnect" case ConnectionStatus.DISCONNECTING: return "Disconnecting" } return "" })() const onClick = async (): Promise => { if (connection.status === ConnectionStatus.NOT_CONNECTED) { try { return await connection.connect() } catch (reason) { toast.error( dismissibleToast( <> Oops! Could not connect 😶
{reason}
, ), ) return } } return await connection.disconnect() } const isCancel = connection.status !== ConnectionStatus.NOT_CONNECTED const buttonProps: BrandButtonProps = { disabled: connection.gracePeriod, onClick, } return isCancel ? ( {text} ) : ( {text} ) }) ================================================ FILE: src/app/connection/components/DisconnectButton/DisconnectButton.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { ConnectionStatus } from "mysterium-vpn-js" import React, { ButtonHTMLAttributes } from "react" import { observer } from "mobx-react-lite" import { useStores } from "../../../store" import { SecondaryButton } from "../../../ui-kit/components/Button/SecondaryButton" export const DisconnectButton = observer(function DisconnectButton() { const { connection } = useStores() const text = ((): string => { switch (connection.status) { case ConnectionStatus.NOT_CONNECTED: return "Connect" case ConnectionStatus.CONNECTING: return "Cancel" case ConnectionStatus.CONNECTED: case ConnectionStatus.ON_HOLD: return "Disconnect" case ConnectionStatus.DISCONNECTING: return "Disconnecting" } return "" })() const onClick = async (): Promise => { return await connection.disconnect() } const buttonProps: ButtonHTMLAttributes = { disabled: connection.gracePeriod, onClick, } return {text} }) ================================================ FILE: src/app/connection/status.ts ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { ConnectionStatus } from "mysterium-vpn-js" export const connectionInProgress = (status: ConnectionStatus): boolean => { return [ ConnectionStatus.CONNECTING, ConnectionStatus.CONNECTED, ConnectionStatus.ON_HOLD, ConnectionStatus.DISCONNECTING, ].includes(status) } export const connectionActive = (status: ConnectionStatus): boolean => { return [ConnectionStatus.CONNECTED, ConnectionStatus.ON_HOLD].includes(status) } ================================================ FILE: src/app/connection/store.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { action, computed, makeObservable, observable, reaction, runInAction } from "mobx" import { AppState, ConnectionStatistics, ConnectionStatus, Location, SSEEventType } from "mysterium-vpn-js" import { ipcRenderer } from "electron" import retry from "async-retry" import _ from "lodash" import { RootStore } from "../store" import { DaemonStatusType } from "../daemon/store" import { newUIProposal, UIProposal } from "../proposals/uiProposal" import { MainIpcListenChannels } from "../../shared/ipc" import { log, logErrorMessage } from "../../shared/log/log" import { eventBus, tequilapi } from "../tequilapi" import { parseError } from "../../shared/errors/parseError" import { analytics } from "../analytics/analytics" import { EventName } from "../analytics/event" export class ConnectionStore { connectInProgress = false gracePeriod = false status = ConnectionStatus.NOT_CONNECTED userCancelled = false statistics?: ConnectionStatistics proposal?: UIProposal location?: Location originalLocation?: Location natType?: string root: RootStore constructor(root: RootStore) { makeObservable(this, { connectInProgress: observable, gracePeriod: observable, status: observable, userCancelled: observable, statistics: observable, proposal: observable, location: observable, originalLocation: observable, natType: observable, connect: action, statusCheck: action, disconnect: action, resolveOriginalLocation: action, resetLocation: action, resolveLocation: action, currentIp: computed, setConnectInProgress: action, markUserCancelled: action, setGracePeriod: action, setStatus: action, setProposal: action, setLocation: action, setOriginalLocation: action, setStatistics: action, }) this.root = root } setupReactions(): void { eventBus.on(SSEEventType.AppStateChange, (state: AppState) => { if (state.consumer?.connection) { this.setStatus(state.consumer.connection.status) this.setStatistics(state.consumer.connection.statistics) } if (state.consumer?.connection?.proposal) { this.setProposal(newUIProposal(state.consumer.connection.proposal)) } else { this.setProposal(undefined) } }) reaction( () => this.root.daemon.status, async (status) => { if (status == DaemonStatusType.Up) { await this.resolveOriginalLocation() } }, ) reaction( () => this.status, async (status) => { if ([ConnectionStatus.CONNECTING, ConnectionStatus.DISCONNECTING].includes(status)) { this.resetLocation() } if ([ConnectionStatus.NOT_CONNECTED, ConnectionStatus.CONNECTED].includes(status)) { await this.resolveLocation() } }, ) reaction( () => this.status, (status) => { ipcRenderer.send(MainIpcListenChannels.ConnectionStatus, status) }, { name: "Notify tray with new connection status" }, ) reaction( () => this.root.connection.status, (status) => this.root.navigation.navigateOnConnectionStatus(status), ) reaction( () => this.root.daemon.status, async (status) => { if (status === DaemonStatusType.Up) { await this.resolveNATType() } }, ) reaction( () => this.root.config.autoNATCompatibility, async () => { await this.resolveNATType() }, ) window.addEventListener("online", async () => { log.info("Network connection restored") await this.resolveNATType() }) window.addEventListener("offline", async () => { log.info("Network connection lost") await this.resolveNATType() }) } async connect(): Promise { analytics.event(EventName.manual_connect, { country: this.root.proposals.active?.country }) return this._doConnect() } async quickConnect(): Promise { const proposal = _.sample(this.root.proposals.filteredProposals) this.root.proposals.setActiveProposal(proposal) analytics.event(EventName.quick_connect, { country: proposal?.country }) return this._doConnect() } private async _doConnect(): Promise { analytics.event(EventName.balance_update, { balance: Number(this.root.identity.identity?.balanceTokens?.human), }) const proposal = this.root.proposals.active if (!this.root.identity.identity || !proposal) { return } this.setConnectInProgress(true) this.setGracePeriod() const before = new Date() try { analytics.event(EventName.connect_attempt, { country: proposal.country, provider_id: proposal.providerId }) await tequilapi.connectionCreate( { consumerId: this.root.identity.identity.id, providerId: proposal.providerId, serviceType: proposal.serviceType, connectOptions: { dns: this.root.config.dnsOption, }, }, 60_000, ) analytics.event(EventName.connect_success, { country: proposal.country, provider_id: proposal.providerId, duration: new Date().getTime() - before.getTime(), }) } catch (err) { if (this.userCancelled) { analytics.event(EventName.connect_cancel, { country: proposal.country, provider_id: proposal.providerId, duration: new Date().getTime() - before.getTime(), }) return Promise.resolve() } analytics.event(EventName.connect_failure, { country: proposal.country, provider_id: proposal.providerId, duration: new Date().getTime() - before.getTime(), }) const msg = parseError(err) logErrorMessage("Could not connect", msg) return Promise.reject(msg.humanReadable) } finally { this.setConnectInProgress(false) } } async statusCheck(): Promise { try { if (this.connectInProgress) { return } const conn = await tequilapi.connectionStatus() if (this.connectInProgress) { return } this.setStatus(conn.status) } catch (err) { const msg = parseError(err) logErrorMessage("Could not check connection status", msg) this.setStatus(ConnectionStatus.NOT_CONNECTED) } } async disconnect(): Promise { this.markUserCancelled() analytics.event(EventName.balance_update, { balance: Number(this.root.identity.identity?.balanceTokens?.human), }) const from = this.root.connection.location?.country this.setGracePeriod() const before = new Date() try { analytics.event(EventName.disconnect_attempt, { country: from }) await tequilapi.connectionCancel() const duration = new Date().getTime() - before.getTime() analytics.event(EventName.disconnect_success, { country: from, duration }) } catch (err) { const duration = new Date().getTime() - before.getTime() analytics.event(EventName.disconnect_failure, { country: from, duration }) const msg = parseError(err) logErrorMessage("Failed to disconnect", msg) } } async resolveOriginalLocation(): Promise { try { const location = await tequilapi.location() this.setOriginalLocation(location) } catch (err) { const msg = parseError(err) logErrorMessage("Failed to lookup original location", msg) } } resetLocation(): void { this.setLocation({ country: "unknown", ip: "Updating...", asn: 0, city: "", continent: "", isp: "", ipType: "", }) } async resolveLocation(): Promise { let location: Location = { country: "unknown", ip: "Updating...", asn: 0, city: "", continent: "", isp: "", ipType: "", } const MAX_RETRIES = 5 await retry( async () => { location = await tequilapi.connectionLocation() }, { retries: MAX_RETRIES, onRetry: (e, attempt) => log.warn(`Failed to update location (${attempt}/${MAX_RETRIES}): ${e.message}`), }, ) this.setLocation(location) } async resolveNATType(): Promise { if (this.root.config.autoNATCompatibility && this.status !== ConnectionStatus.CONNECTED) { log.info("Resolving NAT type...") try { const natType = await tequilapi.natType() runInAction(() => { this.natType = natType.type }) log.info("Resolved NAT type:", natType.type || natType) } catch (err) { log.error("Could not resolve NAT type:", err) } } } get currentIp(): string { if (this.status === ConnectionStatus.CONNECTED) { return this.location?.ip ?? "" } return this.originalLocation?.ip ?? "" } setConnectInProgress = (b: boolean): void => { this.connectInProgress = b } setGracePeriod = (): void => { this.gracePeriod = true setTimeout(() => { runInAction(() => { this.gracePeriod = false }) }, 5000) } markUserCancelled = (): void => { runInAction(() => { this.userCancelled = true }) setTimeout(() => { runInAction(() => { this.userCancelled = false }) }, 5000) } setStatus = (s: ConnectionStatus): void => { this.status = s } setProposal = (p?: UIProposal): void => { this.proposal = p } setLocation = (l: Location): void => { this.location = l } setOriginalLocation = (l: Location): void => { this.originalLocation = l } setStatistics = (s?: ConnectionStatistics): void => { this.statistics = s } } ================================================ FILE: src/app/daemon/components/AppVersion.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import styled from "styled-components" import { nodeVersion } from "@mysteriumnetwork/node" import * as packageJson from "../../../../package.json" import { Small } from "../../ui-kit/typography" const Container = styled(Small)` opacity: 0.5; text-align: center; ` export const AppVersion: React.FC<{ className?: string }> = ({ className }) => { return ( Version: {packageJson.version}
Mysterium Node: {nodeVersion()}
) } ================================================ FILE: src/app/daemon/components/StartupLoadingView/StartupLoadingView.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { observer } from "mobx-react-lite" import React from "react" import { LoadingView } from "../../../views/common/Loading/LoadingView" import { useStores } from "../../../store" export const StartupLoadingView: React.FC = observer(function StartupLoadingView() { const { daemon } = useStores() return }) ================================================ FILE: src/app/daemon/store.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { action, makeObservable, observable, reaction, when } from "mobx" import { ipcRenderer } from "electron" import { RootStore } from "../store" import { log, logErrorMessage } from "../../shared/log/log" import { sseConnect, tequilapi } from "../tequilapi" import { MainIpcListenChannels, WebIpcListenChannels } from "../../shared/ipc" import { mysteriumNodeIPC } from "../../shared/node/mysteriumNodeIPC" import { supervisorIPC } from "../../shared/node/supervisorIPC" import { parseError } from "../../shared/errors/parseError" export enum DaemonStatusType { Up = "UP", Down = "DOWN", } export enum StartupStatus { CheckingForUpdates = "Checking for updates", UpdateAvailable = "Update available", UpdateNotAvailable = "No update available", Downloading = "Downloading update", DownloadingComplete = "Download complete. Restart the app to upgrade!", KillingGhosts = "Killing ghosts", StartingDaemon = "Starting daemon", } export class DaemonStore { statusLoading = false status = DaemonStatusType.Down startupStatus = StartupStatus.CheckingForUpdates starting = false eventSource?: EventSource root: RootStore constructor(root: RootStore) { makeObservable(this, { statusLoading: observable, status: observable, startupStatus: observable, starting: observable, setStartupStatus: action, healthcheck: action, update: action, start: action, supervisorInstall: action, setStatus: action, setStarting: action, setStatusLoading: action, }) this.root = root setInterval(async () => { await this.healthcheck() }, 5_000) } setupReactions(): void { when( () => this.startupStatus == StartupStatus.UpdateNotAvailable, async () => { await this.start() }, ) reaction( () => this.status, async (status) => { if (status == DaemonStatusType.Up) { this.eventSource = sseConnect() } }, ) this.root.navigation.showLoading() this.update() } setStartupStatus(status: StartupStatus): void { this.startupStatus = status } async healthcheck(): Promise { if (this.starting) { log.info("Daemon is starting, skipping healthcheck") return } if (this.statusLoading) { log.info("Another healthcheck is in progress, skipping") return } this.setStatusLoading(true) try { await tequilapi.healthCheck(10_000) this.setStatus(DaemonStatusType.Up) } catch (err) { const msg = parseError(err) logErrorMessage("Healthcheck failed", msg) this.setStatus(DaemonStatusType.Down) } this.setStatusLoading(false) } async update(): Promise { ipcRenderer.send(MainIpcListenChannels.Update) ipcRenderer.on(WebIpcListenChannels.UpdateAvailable, () => { log.info("Update available", this.startupStatus) if (this.startupStatus == StartupStatus.CheckingForUpdates) { this.setStartupStatus(StartupStatus.UpdateAvailable) } }) ipcRenderer.on(WebIpcListenChannels.UpdateNotAvailable, () => { log.info("Update not available", this.startupStatus) if (this.startupStatus == StartupStatus.CheckingForUpdates) { this.setStartupStatus(StartupStatus.UpdateNotAvailable) } }) ipcRenderer.on(WebIpcListenChannels.UpdateDownloading, () => { this.setStartupStatus(StartupStatus.Downloading) }) ipcRenderer.on(WebIpcListenChannels.UpdateDownloadComplete, () => { this.setStartupStatus(StartupStatus.DownloadingComplete) }) setTimeout(() => { if (this.startupStatus == StartupStatus.CheckingForUpdates) { log.info("Update timeout", this.startupStatus) this.setStartupStatus(StartupStatus.UpdateNotAvailable) } }, 5_000) } async start(): Promise { if (this.status == DaemonStatusType.Up) { log.info("Mysterium Node is already running") return } log.info("Starting Mysterium Node") if (this.starting) { log.info("Already starting") return } this.setStarting(true) try { await supervisorIPC.connect() } catch (err) { const msg = parseError(err) logErrorMessage("Failed to connect to the supervisor, installing", msg) await this.supervisorInstall() } await supervisorIPC.upgrade() this.setStartupStatus(StartupStatus.KillingGhosts) await mysteriumNodeIPC.killGhosts() this.setStartupStatus(StartupStatus.StartingDaemon) await mysteriumNodeIPC.start() this.setStarting(false) } async supervisorInstall(): Promise { try { return await supervisorIPC.install() } catch (err) { log.error("Failed to install supervisor", err) } } setStatus = (s: DaemonStatusType): void => { this.status = s } setStarting = (s: boolean): void => { this.starting = s } setStatusLoading = (s: boolean): void => { this.statusLoading = s } } ================================================ FILE: src/app/feedback/store.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { action, makeObservable, observable } from "mobx" import { Issue } from "mysterium-vpn-js" import { RootStore } from "../store" import { tequilapi } from "../tequilapi" import { logErrorMessage } from "../../shared/log/log" import { parseError } from "../../shared/errors/parseError" export class FeedbackStore { root: RootStore loading = false constructor(root: RootStore) { makeObservable(this, { loading: observable, setLoading: action, reportIssue: action, }) this.root = root } async reportIssue(issue: Issue): Promise { this.setLoading(true) try { const issueId = await tequilapi.reportIssueGithub(issue) return issueId.issueId } catch (err) { const msg = parseError(err) logErrorMessage("Could not submit the report", msg) return Promise.reject(msg.humanReadable) } finally { this.setLoading(false) } } setLoading = (b: boolean): void => { this.loading = b } } ================================================ FILE: src/app/identity/components/IdentityRegistrationView/IdentityRegistrationView.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { observer } from "mobx-react-lite" import { IdentityRegistrationStatus } from "mysterium-vpn-js" import React from "react" import { comparer, reaction, when } from "mobx" import { LoadingView } from "../../../views/common/Loading/LoadingView" import { Step, useStores } from "../../../store" import { log } from "../../../../shared/log/log" const displayRegistrationStatus = (s?: IdentityRegistrationStatus): string => { switch (s) { case IdentityRegistrationStatus.Unknown: return "Unable to check" case IdentityRegistrationStatus.Unregistered: return "Waiting for tokens to arrive" case IdentityRegistrationStatus.InProgress: return "Registering MysteriumID" case IdentityRegistrationStatus.Registered: return "Registered" case IdentityRegistrationStatus.RegistrationError: return "Registration Failed" } return "" } export const IdentityRegistrationView: React.FC = observer(function IdentityRegistrationView() { const root = useStores() const { identity } = root const statusDisplay = displayRegistrationStatus(identity.identity?.registrationStatus) reaction( () => identity.identity?.balanceTokens, async (balance, prev) => { log.debug(`[event] Balance changed: ${prev?.ether} -> ${balance?.ether}`) switch (identity.identity?.registrationStatus) { case IdentityRegistrationStatus.Unregistered: case IdentityRegistrationStatus.RegistrationError: if (await identity.balanceSufficientToRegister()) { root.startupSequence(Step.IDENTITY_REGISTER) } } }, { equals: comparer.structural }, ) when( () => identity.identity?.registrationStatus === IdentityRegistrationStatus.Registered, () => { root.startupSequence(Step.IDENTITY_REGISTER_DONE) }, ) return }) ================================================ FILE: src/app/identity/components/IdentityUpgradeView/IdentityUpgradeView.tsx ================================================ /** * Copyright (c) 2022 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { observer } from "mobx-react-lite" import React, { useEffect } from "react" import { toast } from "react-hot-toast" import { LoadingView } from "../../../views/common/Loading/LoadingView" import { Step, useStores } from "../../../store" export const IdentityUpgradeView: React.FC = observer(function IdentityUpgradeView() { const root = useStores() const { identity } = root useEffect(() => { identity .upgrade() .then(() => { toast.success("ID upgraded! Balance will refresh within 1-3 minutes.") return root.startupSequence(Step.IDENTITY_UPGRADE_DONE) }) .catch(() => { toast.error("Failed to upgrade ID (restart and try again)") }) }, []) return }) ================================================ FILE: src/app/identity/identity.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { Identity, IdentityRegistrationStatus } from "mysterium-vpn-js" export const registered = (id: Identity): boolean => [IdentityRegistrationStatus.Registered].includes(id.registrationStatus) ================================================ FILE: src/app/identity/store.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { AppState, Identity, SSEEventType } from "mysterium-vpn-js" import { action, computed, makeObservable, observable, reaction, runInAction, toJS } from "mobx" import retry from "async-retry" import _ from "lodash" import BigNumber from "bignumber.js" import { RootStore, Step } from "../store" import { eventBus, tequilapi } from "../tequilapi" import { log } from "../../shared/log/log" import { ExportIdentityOpts, ImportIdentityOpts, mysteriumNodeIPC } from "../../shared/node/mysteriumNodeIPC" import { analytics } from "../analytics/analytics" import { EventName } from "../analytics/event" export class IdentityStore { loading = false identity?: Identity unlocked = false identities: Identity[] = [] root: RootStore constructor(root: RootStore) { makeObservable(this, { loading: observable, identity: observable, unlocked: observable, identities: observable, refreshIdentity: action, create: action, loadIdentity: action, identityExists: computed, fetchIdentity: action, hasIdentities: action, unlock: action, balanceSufficientToRegister: action, register: action, registerWithReferralToken: action, upgradeRequired: action, upgrade: action, setLoading: action, setIdentity: action, setIdentities: action, exportIdentity: action, importIdentityChooseFile: action, importIdentity: action, }) this.root = root } setupReactions(): void { eventBus.on(SSEEventType.AppStateChange, (state: AppState) => { this.setIdentities(state.identities ?? []) }) reaction( () => this.identities, async (identities) => { this.refreshIdentity(identities) }, { name: "Refresh identity from node state" }, ) const reportBalanceUpdate = _.debounce((amount: number) => { analytics.event(EventName.balance_update, { balance: amount, }) }, 60_000) reaction( () => Number(this.identity?.balanceTokens.human ?? 0), (balance) => { reportBalanceUpdate(balance) }, ) } async hasIdentities(): Promise { const ids = await tequilapi.identityList() return ids.length > 0 } async loadIdentity(): Promise { log.info("Loading identity") const identity = await this.fetchIdentity() this.setIdentity(identity) await this.unlock() log.info("Identity loaded:", identity) } get identityExists(): boolean { return this.identity?.id != null } async fetchIdentity(): Promise { const ids = await tequilapi.identityList() if (ids.length < 1) { return undefined } const current = await tequilapi.identityCurrent({ passphrase: "" }).catch((reason) => { throw Error("Could not get current identity ref: " + reason) }) const MAX_RETRIES = 10 return await retry( async () => { return tequilapi.identity(current.id) }, { retries: MAX_RETRIES, onRetry: (e, attempt) => log.warn(`Failed to get identity (${attempt}/${MAX_RETRIES}): ${e.message}`), }, ).catch((reason) => { throw Error("Could not get identity: " + reason) }) } refreshIdentity = (identities: Identity[]): void => { if (!this.identity) { return } const matchingId = identities.find((id) => id.id == this.identity?.id) this.setIdentity(matchingId) } async create(): Promise { try { await tequilapi.identityCreate("") } catch (err) { log.error("Failed to create ID", err) } } async unlock(): Promise { if (this.unlocked) { return } if (!this.identity) { return } const i = this.identity.id try { await tequilapi.identityUnlock(i, "", 10_000) runInAction(() => { this.unlocked = true }) } catch (err) { log.error("Failed to unlock identity", err) } } async balanceSufficientToRegister(): Promise { const { id, balanceTokens: balance } = this.requireId() // Check whether the user is eligible for free registration const eligibleForFreeRegistration = await tequilapi.freeRegistrationEligibility(id).then((res) => res.eligible) if (eligibleForFreeRegistration) { log.info("User is eligible for free registration") return true } // Fetch registration fees and compare with user's balance await this.root.payment.fetchTransactorFees() const registrationFee = this.root.payment.fees?.registration if (new BigNumber(balance.wei).isGreaterThan(new BigNumber(registrationFee?.wei ?? 0))) { log.info(`Balance is sufficient to register: ${balance.ether} >= ${registrationFee?.ether} (reg. fee)`) return true } log.info(`Balance is NOT sufficient to register: ${balance.ether} < ${registrationFee?.ether} (reg. fee)`) return false } async register(id: Identity, referralToken?: string): Promise { log.info("Registering MysteriumID: ", toJS(id), referralToken ? `token: ${referralToken}` : "") await this.root.payment.fetchTransactorFees() try { await tequilapi.identityRegister(id.id, { stake: 0, referralToken }) } catch (err) { log.error("Failed to register identity", err) } } requireId(): Identity { const id = this.identity if (!id) { throw Error("No Identity") } return id } async upgradeRequired(): Promise { const id = this.requireId().id const res = await tequilapi.http.get(`identities/${id}/migrate-hermes/status`) const status = res?.status if (!status) { log.error("Cannot check for migration status") return false } if (status !== "required") { log.info("Migration is not required") return false } return true } async upgrade(): Promise { const id = this.requireId().id await retry( async () => { const res = await tequilapi.http.post(`identities/${id}/migrate-hermes`, {}, 60_000) log.info("Migrate ID response:", JSON.stringify(res)) }, { retries: 10, factor: 1, onRetry: (e, attempt) => log.warn(`Retrying ID upgrade (${attempt}): ${e.message}`), }, ) } async registerWithReferralToken(token: string): Promise { if (!this.identity) { return } this.setLoading(true) try { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore await tequilapi.identityRegister(this.identity?.id, { token }) } finally { this.setLoading(false) } } async refreshBalance(): Promise { if (!this.identity) { return } await tequilapi.identityBalanceRefresh(this.identity.id) } setLoading = (b: boolean): void => { this.loading = b } setIdentity = (identity?: Identity): void => { this.identity = identity } setIdentities = (identities: Identity[]): void => { this.identities = identities } async exportIdentity(opts: ExportIdentityOpts): Promise { const res = await mysteriumNodeIPC.exportIdentity(opts) if (res.error) { return Promise.reject(res.error) } return String(res.result) } importIdentityChooseFile(): Promise { return mysteriumNodeIPC.importIdentityChooseFile() } async importIdentity(opts: ImportIdentityOpts): Promise { const res = await mysteriumNodeIPC.importIdentity(opts) if (res.error) { return Promise.reject(res.error) } await this.loadIdentity() this.root.startupSequence(Step.IDENTITY_CREATE_DONE) return String(res.result) } } ================================================ FILE: src/app/index.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { platform } from "os" import React from "react" import { unstable_HistoryRouter as HistoryRouter } from "react-router-dom" import { createGlobalStyle, keyframes } from "styled-components" import { Toaster } from "react-hot-toast" import { createHashHistory } from "history" import { observe } from "mobx" import { createRoot } from "react-dom/client" import { initialize as initializeSentry } from "../shared/errors/sentry" import { Routes } from "./navigation/components/Routes/Routes" import { createRootStore, StoreContext } from "./store" import { brand, brandLight, greyBlue1 } from "./ui-kit/colors" import { analytics } from "./analytics/analytics" initializeSentry() let globalFontStyle switch (platform()) { case "win32": globalFontStyle = ` font-family: "Segoe UI", sans-serif; font-weight: normal; ` break case "darwin": globalFontStyle = ` font-family: -apple-system, BlinkMacSystemFont, sans-serif; font-weight: 400; ` break default: globalFontStyle = ` font-family: Ubuntu, sans-serif; font-weight: normal; ` } const fadeIn = keyframes` from { opacity: 0; } to { opacity: 1; } ` const GlobalStyle = createGlobalStyle` html, body, #app { margin: 0; padding: 0; width: 100%; height: 100%; font-size: 12px; ${globalFontStyle} } input, button { ${globalFontStyle} } #app { display: flex; flex-direction: column; animation: ${fadeIn} .5s; user-select: none; -webkit-app-region: no-drag; } ::-webkit-scrollbar { width: 8px; } ::-webkit-scrollbar-track { background: rgba(0, 0, 0, 0.05); } ::-webkit-scrollbar-thumb { background: ${greyBlue1}; &:active { background: ${brandLight}; } } input[type=range] { -webkit-appearance: none; } input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; height: 20px; width: 20px; border-radius: 50px; background: ${brandLight}; top: -6px; position: relative; &:active { background: ${brand}; } } input[type=range]::-webkit-slider-runnable-track { -webkit-appearance: none; height: 10px; background: #5a2058; } :focus-visible { outline: 2px solid ${brandLight}; outline-offset: 2px; } ` const history = createHashHistory() const rootStore = createRootStore(history) analytics.initialize() const App: React.FC = () => ( ) // Render components const container = document.getElementById("app") if (!container) { throw new Error("Could not find DOM container '#app'") } const root = createRoot(container) root.render() observe(rootStore, (change) => { if (change.name === "os" && container) { container.className = change.object[change.name] } }) ================================================ FILE: src/app/location/components/CurrentIP/CurrentIP.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { observer } from "mobx-react-lite" import React from "react" import styled from "styled-components" import { useStores } from "../../../store" const IP = styled.div` width: 100px; height: 20px; line-height: 20px; text-align: center; user-select: text; ` export const CurrentIP: React.FC<{ className?: string }> = observer(function CurrentIP({ className }) { const { connection } = useStores() return {connection.currentIp} }) ================================================ FILE: src/app/location/components/Flag/Flag.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { CircleFlag } from "react-circle-flags" export interface FlagProps { className?: string countryCode?: string size?: number } export const Flag: React.FC = ({ className, countryCode = "unknown", size = 15 }) => { return ( ) } ================================================ FILE: src/app/location/components/ProtectionStatus/ProtectionStatus.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { observer } from "mobx-react-lite" import React from "react" import styled from "styled-components" import { useStores } from "../../../store" import { brand } from "../../../ui-kit/colors" import { connectionActive } from "../../../connection/status" const Status = styled.div<{ isProtected: boolean }>` box-sizing: border-box; width: 80px; height: 20px; line-height: 20px; text-align: center; border-radius: 18px; padding: 0 7px; color: ${(props) => (props.isProtected ? "#fff" : brand)}; background: ${(props) => (props.isProtected ? "#58c800" : "inherit")}; ` export const ProtectionStatus = observer(function ProtectionStatus() { const { connection } = useStores() const isProtected = connectionActive(connection.status) return {isProtected ? "Protected" : "Unprotected"} }) ================================================ FILE: src/app/location/countries.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ export const countryNames: { [key: string]: string } = { af: "Afghanistan", al: "Albania", dz: "Algeria", as: "American Samoa", ad: "Andorra", ao: "Angola", ai: "Anguilla", aq: "Antarctica", ag: "Antigua and Barbuda", ar: "Argentina", am: "Armenia", aw: "Aruba", au: "Australia", at: "Austria", az: "Azerbaijan", bs: "Bahamas", bh: "Bahrain", bd: "Bangladesh", bb: "Barbados", by: "Belarus", be: "Belgium", bz: "Belize", bj: "Benin", bm: "Bermuda", bt: "Bhutan", bo: "Bolivia", ba: "Bosnia and Herzegovina", bw: "Botswana", br: "Brazil", vg: "British Virgin Islands", bn: "Brunei", bg: "Bulgaria", bf: "Burkina Faso", bi: "Burundi", kh: "Cambodia", cm: "Cameroon", ca: "Canada", cv: "Cape Verde", ky: "Cayman Islands", cf: "Central African Republic", td: "Chad", cl: "Chile", cn: "China", cx: "Christmas Island", cc: "Cocos (Keeling) Islands", co: "Colombia", km: "Comoros", ck: "Cook Islands", cr: "Costa Rica", hr: "Croatia", cu: "Cuba", cw: "Curaçao", cy: "Cyprus", cz: "Czech Republic", cd: "DR Congo", dk: "Denmark", dj: "Djibouti", dm: "Dominica", do: "Dominican Republic", ec: "Ecuador", eg: "Egypt", sv: "El Salvador", gq: "Equatorial Guinea", er: "Eritrea", ee: "Estonia", et: "Ethiopia", fk: "Falkland Islands", fo: "Faroe Islands", fj: "Fiji", fi: "Finland", fr: "France", pf: "French Polynesia", tf: "French Southern and Antarctic Lands", ga: "Gabon", gm: "Gambia", ge: "Georgia", de: "Germany", gh: "Ghana", gi: "Gibraltar", gr: "Greece", gl: "Greenland", gd: "Grenada", gu: "Guam", gt: "Guatemala", gg: "Guernsey", gn: "Guinea", gw: "Guinea-Bissau", gy: "Guyana", ht: "Haiti", hn: "Honduras", hk: "Hong Kong", hu: "Hungary", is: "Iceland", in: "India", id: "Indonesia", ir: "Iran", iq: "Iraq", ie: "Ireland", im: "Isle of Man", il: "Israel", it: "Italy", jm: "Jamaica", jp: "Japan", je: "Jersey", jo: "Jordan", kz: "Kazakhstan", ke: "Kenya", ki: "Kiribati", xk: "Kosovo", kw: "Kuwait", kg: "Kyrgyzstan", la: "Laos", lv: "Latvia", lb: "Lebanon", ls: "Lesotho", lr: "Liberia", ly: "Libya", li: "Liechtenstein", lt: "Lithuania", lu: "Luxembourg", mo: "Macau", mk: "Macedonia", mg: "Madagascar", mw: "Malawi", my: "Malaysia", mv: "Maldives", ml: "Mali", mt: "Malta", mh: "Marshall Islands", mq: "Martinique", mr: "Mauritania", mu: "Mauritius", yt: "Mayotte", mx: "Mexico", fm: "Micronesia", md: "Moldova", mc: "Monaco", mn: "Mongolia", me: "Montenegro", ms: "Montserrat", ma: "Morocco", mz: "Mozambique", mm: "Myanmar", na: "Namibia", nr: "Nauru", np: "Nepal", nl: "Netherlands", nc: "New Caledonia", nz: "New Zealand", ni: "Nicaragua", ne: "Niger", ng: "Nigeria", nu: "Niue", nf: "Norfolk Island", kp: "North Korea", mp: "Northern Mariana Islands", no: "Norway", om: "Oman", pk: "Pakistan", pw: "Palau", ps: "Palestine", pa: "Panama", pg: "Papua New Guinea", py: "Paraguay", pe: "Peru", ph: "Philippines", pn: "Pitcairn Islands", pl: "Poland", pt: "Portugal", pr: "Puerto Rico", qa: "Qatar", cg: "Republic of the Congo", ro: "Romania", ru: "Russia", rw: "Rwanda", re: "Réunion", bl: "Saint Barthélemy", kn: "Saint Kitts and Nevis", lc: "Saint Lucia", mf: "Saint Martin", vc: "Saint Vincent and the Grenadines", ws: "Samoa", sm: "San Marino", sa: "Saudi Arabia", sn: "Senegal", rs: "Serbia", sc: "Seychelles", sl: "Sierra Leone", sg: "Singapore", sx: "Sint Maarten", sk: "Slovakia", si: "Slovenia", sb: "Solomon Islands", so: "Somalia", za: "South Africa", gs: "South Georgia", kr: "South Korea", ss: "South Sudan", es: "Spain", lk: "Sri Lanka", sd: "Sudan", sr: "Suriname", sz: "Swaziland", se: "Sweden", ch: "Switzerland", sy: "Syria", tw: "Taiwan", tj: "Tajikistan", tz: "Tanzania", th: "Thailand", tg: "Togo", tk: "Tokelau", to: "Tonga", tt: "Trinidad and Tobago", tn: "Tunisia", tr: "Turkey", tm: "Turkmenistan", tc: "Turks and Caicos Islands", tv: "Tuvalu", ug: "Uganda", ua: "Ukraine", ae: "United Arab Emirates", gb: "United Kingdom", us: "United States", vi: "United States Virgin Islands", uy: "Uruguay", uz: "Uzbekistan", vu: "Vanuatu", va: "Vatican City", ve: "Venezuela", vn: "Vietnam", wf: "Wallis and Futuna", eh: "Western Sahara", ye: "Yemen", zm: "Zambia", zw: "Zimbabwe", ax: "Åland Islands", } as const export const countryName = (countryCode?: string): string => { countryCode = countryCode?.toLowerCase() ?? "unknown" const match = countryNames[countryCode] return match ?? "Unknown" } export const isUnknownCountry = (countryCode?: string): boolean => countryName(countryCode) === "Unknown" ================================================ FILE: src/app/location/states.ts ================================================ /** * Copyright (c) 2022 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ type CountryCode = string type StateCode = string type StateName = string export const STATES: { [countryCode: CountryCode]: { [stateCode: StateCode]: StateName } } = { US: { AL: "Alabama", AK: "Alaska", AZ: "Arizona", AR: "Arkansas", CA: "California", CO: "Colorado", CT: "Connecticut", DE: "Delaware", FL: "Florida", GA: "Georgia", HI: "Hawaii", ID: "Idaho", IL: "Illinois", IN: "Indiana", IA: "Iowa", KS: "Kansas", KY: "Kentucky", LA: "Louisiana", ME: "Maine", MD: "Maryland", MA: "Massachusetts", MI: "Michigan", MN: "Minnesota", MS: "Mississippi", MO: "Missouri", MT: "Montana", NE: "Nebraska", NV: "Nevada", NH: "New Hampshire", NJ: "New Jersey", NM: "New Mexico", NY: "New York", NC: "North Carolina", ND: "North Dakota", OH: "Ohio", OK: "Oklahoma", OR: "Oregon", PA: "Pennsylvania", RI: "Rhode Island", SC: "South Carolina", SD: "South Dakota", TN: "Tennessee", TX: "Texas", UT: "Utah", VT: "Vermont", VA: "Virginia", WA: "Washington", WV: "West Virginia", WI: "Wisconsin", WY: "Wyoming", }, } as const ================================================ FILE: src/app/navigation/components/Routes/Routes.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { Route, Routes as ReactRoutes, Navigate, useLocation } from "react-router-dom" import { ConnectionStatus } from "mysterium-vpn-js" import { observer } from "mobx-react-lite" import styled from "styled-components" import { AcceptTermsView } from "../../../views/common/AcceptTerms/AcceptTermsView" import { ConnectedView } from "../../../views/consumer/Connected/ConnectedView" import { WalletView } from "../../../views/consumer/Wallet/WalletView" import { useStores } from "../../../store" import { TitleBar } from "../TitleBar/TitleBar" import { locations } from "../../locations" import { winSize } from "../../../../config" import { NakedTitleBar } from "../TitleBar/NakedTitleBar" import { HelpView } from "../../../views/common/Help/HelpView" import { SettingsView } from "../../../views/common/Settings/SettingsView" import { TopupRoutes } from "../../../views/consumer/Topup/TopupRoutes" import { StartupLoadingView } from "../../../daemon/components/StartupLoadingView/StartupLoadingView" import { IdentityRegistrationView } from "../../../identity/components/IdentityRegistrationView/IdentityRegistrationView" import { QuickConnectView } from "../../../views/consumer/Proposals/QuickConnectView" import { ManualConnectView } from "../../../views/consumer/Proposals/ManualConnectView" import { Welcome } from "../../../onboarding/components/Welcome/Welcome" import { IdentitySetup } from "../../../onboarding/components/IdentitySetup/IdentitySetup" import { IdentityBackup } from "../../../onboarding/components/IdentityBackup/IdentityBackup" import { InitialTopup } from "../../../onboarding/components/InitialTopup/InitialTopup" import { HelpContentReportIssue } from "../../../views/common/Help/HelpContentReportIssue" import { HelpContentTermsAndConditions } from "../../../views/common/Help/HelpContentTermsAndConditions" import { SettingsFilters } from "../../../views/common/Settings/SettingsFilters" import { SettingsConnection } from "../../../views/common/Settings/SettingsConnection" import { SettingsMysteriumId } from "../../../views/common/Settings/SettingsMysteriumId" import { Step1 } from "../../../onboarding/components/IntroductionSteps/Step1" import { Step2 } from "../../../onboarding/components/IntroductionSteps/Step2" import { Step3 } from "../../../onboarding/components/IntroductionSteps/Step3" import { Step4 } from "../../../onboarding/components/IntroductionSteps/Step4" import { IdentityUpgradeView } from "../../../identity/components/IdentityUpgradeView/IdentityUpgradeView" const WinContents = styled.div` min-height: 0; flex: 1; display: flex; flex-direction: row; ` const Main = styled.div` width: ${winSize.width}px; display: flex; flex-direction: column; color: #404040; background: #fff; ` export const Routes: React.FC = observer(function Routes() { const { connection, config } = useStores() const location = useLocation() const nakedTitleBar = [ locations.onboarding, locations.terms, locations.idRegistering, locations.idUpgrading, locations.loading, ].find((p) => location.pathname.startsWith(p)) return (
{nakedTitleBar ? : } } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> }> } /> } /> } /> } /> } /> } /> }> } /> } /> } /> } />
) }) ================================================ FILE: src/app/navigation/components/TitleBar/NakedTitleBar.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import styled from "styled-components" import { observer } from "mobx-react-lite" import { useStores } from "../../../store" import { WindowButtonsWindows } from "./WindowButtonsWindows" import { WindowButtonsLinux } from "./WindowButtonsLinux" import { Container as TitlebarContainer } from "./TitleBar" const Container = styled(TitlebarContainer)` justify-content: flex-end; ` export const NakedTitleBar: React.FC = observer(function NakedTitleBar() { const root = useStores() return ( {root.isWindows && } {root.isLinux && } ) }) ================================================ FILE: src/app/navigation/components/TitleBar/TitleBar.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import styled from "styled-components" import { Currency } from "mysterium-vpn-js" import { observer } from "mobx-react-lite" import { faHome } from "@fortawesome/free-solid-svg-icons" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { useLocation, useNavigate } from "react-router-dom" import { useStores } from "../../../store" import { IconMystToken } from "../../../ui-kit/icons/IconMystToken" import { locations } from "../../locations" import { titleBarSize } from "../../../../config" import { ProtectionStatus } from "../../../location/components/ProtectionStatus/ProtectionStatus" import { CurrentIP } from "../../../location/components/CurrentIP/CurrentIP" import { greyBlue1, greyBlue2, lightBlue } from "../../../ui-kit/colors" import { displayTokens2 } from "../../../payment/display" import { WindowButtonsWindows } from "./WindowButtonsWindows" import { WindowButtonsLinux } from "./WindowButtonsLinux" export const Container = styled.div` box-sizing: border-box; height: ${titleBarSize.height}px; flex-shrink: 0; padding: 0 15px; .win32 & { padding: 0; } .darwin & { padding-left: 80px; } color: ${lightBlue}; background: #0c0c0c; display: flex; align-items: center; user-select: none; -webkit-app-region: drag; ` const NavigationButton = styled.div<{ active: boolean }>` -webkit-app-region: no-drag; height: 28px; border-radius: 4px; margin-right: 8px; .win32 & { height: 100%; border-radius: 0; margin-right: 0; } .darwin & { height: 20px; border-radius: 18px; } line-height: 12px; padding: 0 16px; &:hover { background: ${(props) => (props.active ? greyBlue1 : "#aeaedb33")}; color: ${(props) => (props.active ? "#fff" : "inherit")}; } background: ${(props) => (props.active ? greyBlue2 : "inherit")}; color: ${(props) => (props.active ? "#fff" : "inherit")}; display: flex; justify-content: center; align-items: center; ` const WalletButton = styled(NavigationButton)` box-sizing: border-box; min-width: 114px; margin: 0 16px 0 auto; .darwin & { margin-right: 0; } overflow: hidden; white-space: nowrap; ` const Location = styled.div` margin: 0 auto; display: flex; flex: 0; ` const IP = styled(CurrentIP)` opacity: 0.5; ` const Money = styled.div` display: flex; justify-content: space-between; align-items: center; span { padding-left: 6px; } ` export const TitleBar: React.FC = observer(function TitleBar() { const { navigation, identity, isWindows, isLinux } = useStores() const navigate = useNavigate() const location = useLocation() const isHomeActive = location.pathname.startsWith(locations.consumer) const isSettingsActive = location.pathname.startsWith(locations.settings) const isHelpActive = location.pathname.startsWith(locations.help) const isWalletActive = location.pathname.startsWith(locations.wallet) return ( !isHomeActive && navigation.goHome()}> !isSettingsActive && navigate(locations.settings)} > Settings !isHelpActive && navigate(locations.help)}> Help !isWalletActive && navigate(locations.wallet)}> {displayTokens2(identity.identity?.balanceTokens)} {Currency.MYST} {isWindows && } {isLinux && } ) }) ================================================ FILE: src/app/navigation/components/TitleBar/WindowButtonsLinux.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import styled from "styled-components" import { ipcRenderer } from "electron" import { MainIpcListenChannels } from "../../../../shared/ipc" const Container = styled.div` display: flex; align-items: center; height: 100%; ` const Button = styled.div` width: 24px; height: 24px; border-radius: 24px; display: flex; justify-content: center; align-items: center; user-select: none; -webkit-app-region: no-drag; fill: #fff; &:hover { background: #aeaedb33; } &:active { background: rgba(0, 0, 0, 0.3); } ` export const WindowButtonsLinux: React.FC = () => { return ( ) } ================================================ FILE: src/app/navigation/components/TitleBar/WindowButtonsWindows.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import styled from "styled-components" import { ipcRenderer } from "electron" import { MainIpcListenChannels } from "../../../../shared/ipc" const Container = styled.div` display: flex; align-items: center; height: 100%; ` const Button = styled.div` width: 46px; height: 100%; display: flex; justify-content: center; align-items: center; user-select: none; -webkit-app-region: no-drag; fill: #fff; &:hover { background: #aeaedb33; } &:active { background: rgba(0, 0, 0, 0.3); } ` export const WindowButtonsWindows: React.FC = () => { return ( ) } ================================================ FILE: src/app/navigation/components/ViewContainer/ViewContainer.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import styled from "styled-components" import { bg1 } from "../../../ui-kit/colors" export const ViewContainer = styled.div` flex: 1; overflow: hidden; background: ${bg1}; color: #fff; ` ================================================ FILE: src/app/navigation/components/ViewContent/ViewContent.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import styled from "styled-components" export const ViewContent = styled.div` width: 378px; box-sizing: border-box; border-radius: 10px; overflow: hidden; display: flex; flex-direction: column; align-items: center; background: #ffffff12; ` ================================================ FILE: src/app/navigation/components/ViewNavBar/ViewNavBar.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { PropsWithChildren } from "react" import styled from "styled-components" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { faArrowCircleLeft } from "@fortawesome/free-solid-svg-icons" import { LogoTitle } from "../../../ui-kit/components/LogoTitle/LogoTitle" import { Heading2 } from "../../../ui-kit/typography" const Container = styled.div` box-sizing: border-box; height: 58px; min-height: 58px; max-height: 58px; padding: 0 15px; display: grid; grid-template-columns: 222px 378px; column-gap: 10px; align-items: center; ` const BackContainer = styled.div` display: flex; flex-direction: row; align-items: center; color: #ffffffcc; &:hover { color: #fff; } ` const BackIcon = styled(FontAwesomeIcon)` margin-right: 10px; ` export interface ViewNavBarProps { onBack?: () => void } export const ViewNavBar: React.FC> = ({ onBack, children }) => ( {onBack && ( Back )} {!onBack && } {children} ) ================================================ FILE: src/app/navigation/components/ViewSidebar/ViewSidebar.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import styled from "styled-components" import { darkBlue } from "../../../ui-kit/colors" export const ViewSidebar = styled.div` height: 100%; width: 222px; min-width: 222px; margin-right: 10px; border-radius: 10px; overflow: hidden; display: flex; flex-direction: column; background: #f8f8fd; color: ${darkBlue}; ` ================================================ FILE: src/app/navigation/components/ViewSplit/ViewSplit.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import styled from "styled-components" export const ViewSplit = styled.div` height: 486px; margin: 0 15px; display: flex; ` ================================================ FILE: src/app/navigation/locations.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ export const locations = { loading: "/loading", onboarding: "/onboarding", onboardingWelcome: "/onboarding/welcome", onboardingIntroIndex: "/onboarding/intro", onboardingIntro2: "/onboarding/intro/2", onboardingIntro3: "/onboarding/intro/3", onboardingIntro4: "/onboarding/intro/4", onboardingIdentitySetup: "/onboarding/identity/setup", onboardingIdentityBackup: "/onboarding/identity/backup", onboardingTopupPrompt: "/onboarding/topup-prompt", onboardingWalletTopup: "/onboarding/wallet/topup", terms: "/terms", idRegistering: "/registration", idUpgrading: "/id-upgrade", wallet: "/wallet", walletTopup: "/wallet/topup", consumer: "/consumer", proposals: "/consumer/proposals", proposalsManualConnect: "/consumer/proposals/manual-connect", proposalsQuickConnect: "/consumer/proposals/quick-connect", connection: "/consumer/connection", help: "/help", helpBugReport: "/help/bug-report", helpTermsAndConditions: "/help/terms-and-conditions", settings: "/settings", settingsFilters: "/settings/filters", settingsConnection: "/settings/connection", settingsMysteriumId: "/settings/mysterium-id", } export const topupSteps = { chooseMethod: "choose-method", coingate: "coingate", // entry point coingatePaymentOptions: "coingate-payment-options", coingateOrderSummary: "coingate-order-summary", coingateWaitingForPayment: "coingate-waiting-for-payment", stripe: "stripe", // entry point stripePaymentOptions: "stripe-payment-options", stripeOrderSummary: "stripe-order-summary", stripeWaitingForPayment: "stripe-waiting-for-payment", paypal: "paypal", // entry point paypalPaymentOptions: "paypal-payment-options", paypalOrderSummary: "paypal-order-summary", paypalWaitingForPayment: "paypal-waiting-for-payment", myst: "myst", // entry point mystSelectAmount: "myst-select-amount", mystPolygonWaitingForPayment: "myst-polygon-waiting-for-payment", success: "success", failed: "failed", } ================================================ FILE: src/app/navigation/store.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { action, computed, makeObservable } from "mobx" import { ConnectionStatus, IdentityRegistrationStatus } from "mysterium-vpn-js" import { ipcRenderer } from "electron" import { History, Location } from "history" import { RootStore } from "../store" import { MainIpcListenChannels } from "../../shared/ipc" import { connectionInProgress } from "../connection/status" import { log } from "../../shared/log/log" import { locations } from "./locations" export class NavigationStore { root: RootStore history: History constructor(root: RootStore, history: History) { makeObservable(this, { location: computed, showLoading: action, goHome: action, navigateToInitialRoute: action, navigateOnConnectionStatus: action, openChat: action, }) this.root = root this.history = history } push = (path: string): void => { log.debug("Navigating ->", path) this.history?.push(path) } get location(): Location { return this.history.location } showLoading = (): void => { this.push(locations.loading) } goHome = (): void => { if (connectionInProgress(this.root.connection.status)) { this.push(locations.connection) return } if (!this.root.config.quickConnect) { this.push(locations.proposalsManualConnect) } else { this.push(locations.proposalsQuickConnect) } } navigateToInitialRoute = (): void => { const newLocation = this.determineInitialLocation() if (newLocation) { this.push(newLocation) } } determineInitialLocation = (): string | undefined => { const { config, identity, connection } = this.root if (connectionInProgress(connection.status)) { return locations.connection } if (this.location.pathname == locations.wallet) { return undefined } if (!config.onboarded) { return locations.onboardingWelcome } if (!config.currentTermsAgreed) { return locations.terms } if (!identity.identity) { return locations.onboardingIdentitySetup } switch (identity.identity.registrationStatus) { case IdentityRegistrationStatus.Unknown: return undefined // Do nothing (leave loading) case IdentityRegistrationStatus.InProgress: return locations.idRegistering case IdentityRegistrationStatus.Unregistered: case IdentityRegistrationStatus.RegistrationError: return locations.onboardingTopupPrompt } // Proposals view if (!this.root.config.quickConnect) { return locations.proposalsManualConnect } return locations.proposalsQuickConnect } navigateOnConnectionStatus = (status: ConnectionStatus): void => { const isHomeActive = this.location.pathname.includes(locations.consumer) if (!isHomeActive) { // Do not change location if user is not in the home (consumer) view: // he might be viewing settings or wallet return } if (connectionInProgress(status)) { this.push(locations.connection) } else { this.push(locations.proposals) } } openChat = (): void => { ipcRenderer.send(MainIpcListenChannels.OpenSupportChat, this.root.identity.identity?.id) } } ================================================ FILE: src/app/onboarding/components/IdentityBackup/IdentityBackup.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { observer } from "mobx-react-lite" import React, { useState } from "react" import { faFileExport, faArrowAltCircleLeft } from "@fortawesome/free-solid-svg-icons" import styled from "styled-components" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import Lottie from "react-lottie-player" import toast from "react-hot-toast" import { useNavigate } from "react-router-dom" import { ViewContainer } from "../../../navigation/components/ViewContainer/ViewContainer" import { ViewSplit } from "../../../navigation/components/ViewSplit/ViewSplit" import { ViewSidebar } from "../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewContent } from "../../../navigation/components/ViewContent/ViewContent" import { ViewNavBar } from "../../../navigation/components/ViewNavBar/ViewNavBar" import { Heading2, Small } from "../../../ui-kit/typography" import { ButtonContent, ButtonIcon, PrimarySidebarActionButton, SecondarySidebarActionButton, } from "../../../ui-kit/components/Button/SidebarButtons" import { useStores } from "../../../store" import { ExportIdentityFormFields, ExportIdentityPrompt } from "../../../views/common/Settings/ExportIdentityPrompt" import { brandLight } from "../../../ui-kit/colors" import { dismissibleToast } from "../../../ui-kit/components/dismissibleToast" import animationIdentityKeys from "./animation_identity_keys.json" const SideTop = styled.div` box-sizing: border-box; height: 136px; padding: 20px; overflow: hidden; text-align: center; ` const SectionIcon = styled(FontAwesomeIcon)` margin-bottom: 15px; font-size: 20px; color: ${brandLight}; ` const Title = styled(Heading2)` margin-bottom: 15px; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 20px; flex: 1 0 auto; display: flex; flex-direction: column; ` const Content = styled(ViewContent)` background: none; justify-content: center; ` export const IdentityBackup: React.FC = observer(function IdentityBackup() { const { onboarding, identity } = useStores() const navigate = useNavigate() const nextStep = () => { onboarding.finishIDSetup() } const [exportPrompt, setExportPrompt] = useState(false) const handleBackupNow = () => { setExportPrompt(true) } const handleExportSubmit = async ({ passphrase }: ExportIdentityFormFields) => { setExportPrompt(false) try { await identity.exportIdentity({ id: identity.identity?.id ?? "", passphrase }) nextStep() } catch (reason) { toast.error( dismissibleToast( <> Identity backup failed 😶
Error: {reason}
, ), ) } } const handleExportCancel = () => { setExportPrompt(false) } return ( Create backup We don't store any account data. Back up to keep your tokens safe. Backup Private Key navigate(-1)}> Go Back ) }) ================================================ FILE: src/app/onboarding/components/IdentityBackup/animation_identity_keys.json ================================================ {"v":"5.7.4","fr":29.9700012207031,"ip":117.000004765508,"op":197.000008023974,"w":1110,"h":1080,"nm":"Композиция 1","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":5,"nm":"MYST","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":226,"s":[558.714,785.871,0],"to":[0,-14,0],"ti":[0,14,0]},{"t":263.00001071221,"s":[558.714,701.871,0]}],"ix":2,"l":2},"a":{"a":0,"k":[68.892,-18.129,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.16,0.16,0.16],"y":[1,1,1]},"o":{"x":[0.84,0.84,0.84],"y":[0,0,0]},"t":226,"s":[0,0,100]},{"t":259.000010549286,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"t":{"d":{"k":[{"s":{"s":51,"f":"Roboto-Regular","t":"MYST","j":0,"tr":0,"lh":61.2,"ls":0,"fc":[0.929,0.357,0.675]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":5,"nm":"0000","sr":1,"ks":{"o":{"a":0,"k":20,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":221,"s":[558.714,737.789,0],"to":[0,-21.667,0],"ti":[0,21.667,0]},{"t":261.000010630748,"s":[558.714,607.789,0]}],"ix":2,"l":2},"a":{"a":0,"k":[150.535,-46.211,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.16,0.16,0.16],"y":[1,1,1]},"o":{"x":[0.84,0.84,0.84],"y":[0,0,0]},"t":221,"s":[0,0,100]},{"t":257.000010467825,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"t":{"d":{"k":[{"s":{"s":130,"f":"Roboto-Black","t":"0000","j":0,"tr":0,"lh":156,"ls":0,"fc":[1,1,1]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Кривые Key","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[334,452,0],"ix":2,"l":2},"a":{"a":0,"k":[34,34.5,0],"ix":1,"l":2},"s":{"a":0,"k":[345.1,345.1,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[3.53,-3.53],[2.419,0],[1.71,1.709],[0,2.418],[-1.711,1.71],[-2.419,0],[-1.71,-1.71]],"o":[[-1.71,1.709],[-2.419,0],[-1.711,-1.711],[0,-2.419],[1.709,-1.71],[2.418,0],[3.53,3.531]],"v":[[18.413,-5.602],[12.011,-2.951],[5.608,-5.602],[2.956,-12.005],[5.608,-18.408],[12.011,-21.06],[18.413,-18.408]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[8.575,8.575],[5.873,0],[4.153,-4.153],[0,-5.874],[-1.152,-2.695],[0,0],[0.055,-0.619],[0,0],[-0.555,-0.554],[-0.782,0.069],[0,0],[-0.44,0.439],[0,0],[0.005,0.077],[0,0],[-0.262,0.262],[-0.372,-0.023],[0,0],[-0.073,-0.018],[0,0],[0.005,0.076],[0,0],[-0.263,0.262],[-0.371,-0.024],[0,0],[-0.073,-0.018],[0,0],[-3.02,0],[-4.153,4.152]],"o":[[-4.153,-4.153],[-5.874,0],[-4.153,4.154],[0,3.02],[0,0],[-0.441,0.439],[0,0],[-0.07,0.783],[0.555,0.556],[0,0],[0.619,-0.055],[0,0],[-0.017,-0.072],[0,0],[-0.025,-0.369],[0.262,-0.261],[0,0],[0.077,0.006],[0,0],[-0.018,-0.072],[0,0],[-0.025,-0.37],[0.261,-0.263],[0,0],[0.076,0.005],[0,0],[2.695,1.153],[5.874,0],[8.574,-8.574]],"v":[[27.559,-27.555],[12.011,-33.996],[-3.539,-27.555],[-9.98,-12.005],[-8.219,-3.365],[-32.447,20.864],[-33.214,22.502],[-33.981,31.109],[-33.215,33.219],[-31.105,33.986],[-22.498,33.219],[-20.858,32.453],[-18.249,29.842],[-18.284,29.619],[-18.712,23.381],[-18.34,22.387],[-17.346,22.015],[-11.108,22.442],[-10.884,22.478],[-8.836,20.43],[-8.872,20.207],[-9.3,13.969],[-8.927,12.975],[-7.933,12.602],[-1.695,13.03],[-1.472,13.066],[3.371,8.222],[12.012,9.983],[27.56,3.544]],"c":true},"ix":2},"nm":"Контур 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Объединить контуры 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"mm","mm":4,"nm":"Объединить контуры 2","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":10,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":120,"s":[34.991,36.015],"to":[10,-1.833],"ti":[-10,1.833]},{"i":{"x":0.53,"y":0.53},"o":{"x":1.019,"y":1.019},"t":150,"s":[94.991,25.015],"to":[0,0],"ti":[0,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":210,"s":[94.991,25.015],"to":[0,0],"ti":[0,0]},{"t":239.00000973467,"s":[15.991,25.015]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.16,0.16],"y":[1,1]},"o":{"x":[0.84,0.84],"y":[0,0]},"t":120,"s":[0,0]},{"i":{"x":[0.833,0.833],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0,0]},"t":158,"s":[119,119]},{"i":{"x":[0.833,0.833],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0,0]},"t":180,"s":[98,98]},{"i":{"x":[0.833,0.833],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0,0]},"t":210,"s":[98,98]},{"t":239.00000973467,"s":[0,0]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":120,"s":[-90]},{"t":158.000006435472,"s":[0]}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Слой-фигура 10","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[578.259,338.919,0],"ix":2,"l":2},"a":{"a":0,"k":[41.759,-208.081,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":17,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-74.227,-10.162],[-74.227,5],[-91.227,22],[-87.241,22],[-104.241,5],[-104.241,-10.162],[-87.241,-27.162],[-91.227,-27.162]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":47,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[215.773,-10.162],[215.773,5],[198.773,22],[-87.241,22],[-104.241,5],[-104.241,-10.162],[-87.241,-27.162],[198.773,-27.162]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[159.773,-10.162],[159.773,5],[142.773,22],[-87.241,22],[-104.241,5],[-104.241,-10.162],[-87.241,-27.162],[142.773,-27.162]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":120,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[215.773,-10.162],[215.773,5],[198.773,22],[-87.241,22],[-104.241,5],[-104.241,-10.162],[-87.241,-27.162],[198.773,-27.162]],"c":true}]},{"t":135.000005498663,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-74.227,-10.162],[-74.227,5],[-91.227,22],[-87.241,22],[-104.241,5],[-104.241,-10.162],[-87.241,-27.162],[-91.227,-27.162]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":10,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":10,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[22,-204.5],"ix":2},"a":{"a":0,"k":[-124,1],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":17,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[100]},{"t":135.000005498663,"s":[0]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Слой-фигура 9","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[578.259,415.955,0],"ix":2,"l":2},"a":{"a":0,"k":[53.613,-208.045,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":22,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-66.664,-8.127],[-66.664,7.036],[-83.664,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[-83.664,-25.127]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":52,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[158.336,-8.127],[158.336,7.036],[141.336,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[141.336,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[236.336,-8.127],[236.336,7.036],[219.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[219.337,-25.127]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":120,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[158.336,-8.127],[158.336,7.036],[141.336,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[141.336,-25.127]],"c":true}]},{"t":135.000005498663,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-66.664,-8.127],[-66.664,7.036],[-83.664,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[-83.664,-25.127]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":10,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":5,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54,-207.5],"ix":2},"a":{"a":0,"k":[-101,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":28,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[100]},{"t":135.000005498663,"s":[0]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Слой-фигура 11","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[578.259,489.955,0],"ix":2,"l":2},"a":{"a":0,"k":[53.613,-208.045,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":39,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-66.664,-8.127],[-66.664,7.036],[-83.664,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[-83.664,-25.127]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":69,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[186.336,-8.127],[186.336,7.036],[169.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[169.337,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[140.336,-8.127],[140.336,7.036],[123.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[123.337,-25.127]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":120,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[186.336,-8.127],[186.336,7.036],[169.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[169.337,-25.127]],"c":true}]},{"t":135.000005498663,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-66.664,-8.127],[-66.664,7.036],[-83.664,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[-83.664,-25.127]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":10,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":10,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54,-207.5],"ix":2},"a":{"a":0,"k":[-101,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":39,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[100]},{"t":135.000005498663,"s":[0]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Слой-фигура 12","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[578.259,567.15,0],"ix":2,"l":2},"a":{"a":0,"k":[53.613,-208.045,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":43,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-66.664,-8.127],[-66.664,7.036],[-83.664,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[-83.664,-25.127]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":73,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[121.337,-8.127],[121.337,7.036],[104.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[104.337,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[209.336,-8.127],[209.336,7.036],[192.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[192.337,-25.127]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":120,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[121.337,-8.127],[121.337,7.036],[104.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[104.337,-25.127]],"c":true}]},{"t":135.000005498663,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-66.664,-8.127],[-66.664,7.036],[-83.664,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[-83.664,-25.127]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":10,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":5,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54,-207.5],"ix":2},"a":{"a":0,"k":[-101,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":43,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[100]},{"t":135.000005498663,"s":[0]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Слой-фигура 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[326,452,0],"ix":2,"l":2},"a":{"a":0,"k":[-214,-88,0],"ix":1,"l":2},"s":{"a":0,"k":[96.367,96.367,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[151.722,-115],[151.722,115],[121.722,145],[-113.942,145],[-143.942,115],[-143.942,-115],[-113.942,-145],[121.722,-145]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":10,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[10]},{"t":150.000006109625,"s":[5]}],"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":13,"s":[-208,60],"to":[0,-24.667],"ti":[0,24.667]},{"i":{"x":0.16,"y":0.16},"o":{"x":0.167,"y":0.167},"t":30,"s":[-208,-88],"to":[0,0],"ti":[0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":120,"s":[-208,-88],"to":[37.703,-6.572],"ti":[-37.703,6.572]},{"i":{"x":0.231,"y":0.231},"o":{"x":0.208,"y":0.208},"t":150,"s":[18.219,-127.433],"to":[0,0],"ti":[0,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":211,"s":[18.219,-127.433],"to":[0,0],"ti":[0,0]},{"t":239.00000973467,"s":[-297.781,-151.433]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.16,0.16],"y":[1,1]},"o":{"x":[0.84,0.84],"y":[0,0]},"t":13,"s":[0,0]},{"i":{"x":[0.833,0.833],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0,0]},"t":30,"s":[100,100]},{"i":{"x":[0.9,0.9],"y":[1.388,1.388]},"o":{"x":[0.688,0.688],"y":[0,0]},"t":120,"s":[100,100]},{"i":{"x":[0.027,0.027],"y":[1,1]},"o":{"x":[0.142,0.142],"y":[0.199,0.199]},"t":134,"s":[80,80]},{"i":{"x":[0.626,0.626],"y":[1,1]},"o":{"x":[0.158,0.158],"y":[0,0]},"t":150,"s":[143,143]},{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":211,"s":[143,143]},{"t":239.00000973467,"s":[45,45]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":120,"s":[0]},{"i":{"x":[0.811],"y":[1]},"o":{"x":[0.514],"y":[0]},"t":150,"s":[90]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":211,"s":[90]},{"t":239.00000973467,"s":[90]}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Слой-фигура 13","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[187.259,687.15,0],"ix":2,"l":2},"a":{"a":0,"k":[53.613,-208.045,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":18,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-66.664,-8.127],[-66.664,7.036],[-83.664,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[-83.664,-25.127]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":70,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[175.336,-8.127],[175.336,7.036],[158.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[158.337,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0.167},"t":101,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[55.337,-8.127],[55.337,7.036],[38.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[38.337,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":120,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[175.336,-8.127],[175.336,7.036],[158.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[158.337,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":150,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[275.337,31.873],[275.337,75.036],[258.337,92.036],[72.614,92.036],[55.614,75.036],[55.614,31.873],[72.614,14.873],[258.337,14.873]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":180,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[459.337,31.873],[459.337,75.036],[442.337,92.036],[72.614,92.036],[55.614,75.036],[55.614,31.873],[72.614,14.873],[442.337,14.873]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":211,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[459.337,31.873],[459.337,75.036],[442.337,92.036],[72.614,92.036],[55.614,75.036],[55.614,31.873],[72.614,14.873],[442.337,14.873]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":241,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[643.337,-336.127],[643.337,-332.714],[626.337,-315.714],[488.614,-315.714],[471.614,-332.714],[471.614,-336.127],[488.613,-353.127],[626.337,-353.127]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":256,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[643.337,-336.127],[643.337,-332.714],[626.337,-315.714],[574.614,-315.714],[557.614,-332.714],[557.614,-336.127],[574.613,-353.127],[626.337,-353.127]],"c":true}]},{"t":270.000010997325,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[643.337,-336.127],[643.337,-332.714],[626.337,-315.714],[488.614,-315.714],[471.614,-332.714],[471.614,-336.127],[488.613,-353.127],[626.337,-353.127]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":10,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":10,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54,-207.5],"ix":2},"a":{"a":0,"k":[-101,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[0]},{"t":34.0000013848484,"s":[100]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Слой-фигура 14","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[187.259,765.15,0],"ix":2,"l":2},"a":{"a":0,"k":[53.613,-208.045,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":30,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-66.664,-8.127],[-66.664,7.036],[-83.664,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[-83.664,-25.127]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":80,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[145.336,-8.127],[145.336,7.036],[128.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[128.337,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0.167},"t":101,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[185.336,-8.127],[185.336,7.036],[168.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[168.337,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":120,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[145.336,-8.127],[145.336,7.036],[128.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[128.337,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":150,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[467.336,61.873],[467.336,104.036],[450.337,121.036],[73.614,121.036],[56.614,104.036],[56.614,61.873],[73.614,44.873],[450.337,44.873]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":180,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[295.336,61.873],[295.336,104.036],[278.337,121.036],[73.614,121.036],[56.614,104.036],[56.614,61.873],[73.614,44.873],[278.337,44.873]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":211,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[295.336,61.873],[295.336,104.036],[278.337,121.036],[73.614,121.036],[56.614,104.036],[56.614,61.873],[73.614,44.873],[278.337,44.873]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":241,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[642.336,-330.127],[642.336,-327.964],[625.337,-310.964],[540.616,-310.964],[523.616,-327.964],[523.616,-330.127],[540.616,-347.127],[625.337,-347.127]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":256,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[642.336,-330.127],[642.336,-327.964],[625.337,-310.964],[482.616,-310.964],[465.616,-327.964],[465.616,-330.127],[482.616,-347.127],[625.337,-347.127]],"c":true}]},{"t":270.000010997325,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[642.336,-330.127],[642.336,-327.964],[625.337,-310.964],[540.616,-310.964],[523.616,-327.964],[523.616,-330.127],[540.616,-347.127],[625.337,-347.127]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":10,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":5,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54,-207.5],"ix":2},"a":{"a":0,"k":[-101,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[0]},{"t":43.0000017514259,"s":[100]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":20,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":0,"nm":"Back","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":20,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[555,540,0],"ix":2,"l":2},"a":{"a":0,"k":[555,540,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1110,"h":1080,"ip":0,"op":3896.00015868733,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Слой-фигура 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":0,"s":[540,823,0],"to":[0,-44.5,0],"ti":[0,44.5,0]},{"i":{"x":0.16,"y":0.16},"o":{"x":0.84,"y":0.84},"t":30,"s":[540,556,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":120,"s":[540,556,0],"to":[0,1.5,0],"ti":[0,-1.5,0]},{"i":{"x":0.16,"y":0.16},"o":{"x":0.84,"y":0.84},"t":150,"s":[540,565,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":210,"s":[540,565,0],"to":[0,-1.5,0],"ti":[0,1.5,0]},{"t":239.00000973467,"s":[540,556,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.16,0.16,0.16],"y":[1,1,1]},"o":{"x":[0.84,0.84,0.84],"y":[0,0,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.16,0.16,0.16],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":24,"s":[100,100,100]},{"i":{"x":[0.16,0.16,0.16],"y":[1,1,1]},"o":{"x":[0.84,0.84,0.84],"y":[0,0,0]},"t":120,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":150,"s":[137,137,100]},{"i":{"x":[0.16,0.16,0.16],"y":[1,1,1]},"o":{"x":[0.84,0.84,0.84],"y":[0,0,0]},"t":210,"s":[137,137,100]},{"t":239.00000973467,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":126,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[454.368,-278.924],[454.368,278.924],[424.368,308.924],[-424.368,308.924],[-454.368,278.924],[-454.368,-278.924],[-424.368,-308.924],[424.368,-308.924]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.84,"y":0},"t":150,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[214.368,-278.924],[214.368,278.924],[184.368,308.924],[-200.368,308.924],[-230.368,278.924],[-230.368,-278.924],[-200.368,-308.924],[184.368,-308.924]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":210,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[214.368,-278.924],[214.368,278.924],[184.368,308.924],[-200.368,308.924],[-230.368,278.924],[-230.368,-278.924],[-200.368,-308.924],[184.368,-308.924]],"c":true}]},{"t":239.00000973467,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[454.368,-278.924],[454.368,278.924],[424.368,308.924],[-424.368,308.924],[-454.368,278.924],[-454.368,-278.924],[-424.368,-308.924],[424.368,-308.924]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[14,-7],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Слой-фигура 18","sr":1,"ks":{"o":{"a":0,"k":50,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":229,"s":[0]},{"t":270.000010997325,"s":[5]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":0,"s":[540,823,0],"to":[0,-44.5,0],"ti":[0,44.5,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.973,"y":0},"t":30,"s":[540,556,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":0.16},"o":{"x":0.973,"y":0.973},"t":58,"s":[540,476,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.973,"y":0},"t":120,"s":[540,476,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0},"t":135,"s":[540,559,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":0.16},"o":{"x":0.167,"y":0.167},"t":166,"s":[342,565,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0},"t":200,"s":[342,565,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":229,"s":[539,612.5,0],"to":[0,0,0],"ti":[0,0,0]},{"t":270.000010997325,"s":[539,443,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.16,0.16,0.16],"y":[1,1,1]},"o":{"x":[0.84,0.84,0.84],"y":[0,0,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.232,0.232,0.232],"y":[0,0,0]},"t":24,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":58,"s":[91,91,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":119,"s":[91,91,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":166,"s":[124,124,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":200,"s":[124,124,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":229,"s":[50,50,100]},{"t":270.000010997325,"s":[89,89,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":122,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[454.368,-278.924],[454.368,278.924],[424.368,308.924],[-424.368,308.924],[-454.368,278.924],[-454.368,-278.924],[-424.368,-308.924],[424.368,-308.924]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.84,"y":0},"t":146,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[214.368,-278.924],[214.368,278.924],[184.368,308.924],[-200.368,308.924],[-230.368,278.924],[-230.368,-278.924],[-200.368,-308.924],[184.368,-308.924]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":206,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[214.368,-278.924],[214.368,278.924],[184.368,308.924],[-200.368,308.924],[-230.368,278.924],[-230.368,-278.924],[-200.368,-308.924],[184.368,-308.924]],"c":true}]},{"t":235.000009571746,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[454.368,-278.924],[454.368,278.924],[424.368,308.924],[-424.368,308.924],[-454.368,278.924],[-454.368,-278.924],[-424.368,-308.924],[424.368,-308.924]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":20,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[14,-7],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Слой-фигура 16","sr":1,"ks":{"o":{"a":0,"k":49,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":229,"s":[0]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":240,"s":[0]},{"t":281.000011445365,"s":[11]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":0,"s":[540,823,0],"to":[0,-44.5,0],"ti":[0,44.5,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.973,"y":0},"t":30,"s":[540,556,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":0.16},"o":{"x":0.973,"y":0.973},"t":69,"s":[540,396,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.973,"y":0},"t":120,"s":[540,396,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0},"t":135,"s":[540,587,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":0.16},"o":{"x":0.167,"y":0.167},"t":165,"s":[739,565,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0},"t":200,"s":[739,565,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":0.16},"o":{"x":0.66,"y":0.66},"t":229,"s":[538,612.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":240,"s":[538,612.5,0],"to":[0,0,0],"ti":[0,0,0]},{"t":281.000011445365,"s":[562,328,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.16,0.16,0.16],"y":[1,1,1]},"o":{"x":[0.84,0.84,0.84],"y":[0,0,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.232,0.232,0.232],"y":[0,0,0]},"t":24,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":69,"s":[82,82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":120,"s":[82,82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":165,"s":[124,124,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":200,"s":[124,124,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":229,"s":[50,50,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":240,"s":[50,50,100]},{"t":281.000011445365,"s":[73,73,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":120,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[454.368,-278.924],[454.368,278.924],[424.368,308.924],[-424.368,308.924],[-454.368,278.924],[-454.368,-278.924],[-424.368,-308.924],[424.368,-308.924]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.84,"y":0},"t":144,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[214.368,-278.924],[214.368,278.924],[184.368,308.924],[-200.368,308.924],[-230.368,278.924],[-230.368,-278.924],[-200.368,-308.924],[184.368,-308.924]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":204,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[214.368,-278.924],[214.368,278.924],[184.368,308.924],[-200.368,308.924],[-230.368,278.924],[-230.368,-278.924],[-200.368,-308.924],[184.368,-308.924]],"c":true}]},{"t":233.000009490285,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[454.368,-278.924],[454.368,278.924],[424.368,308.924],[-424.368,308.924],[-454.368,278.924],[-454.368,-278.924],[-424.368,-308.924],[424.368,-308.924]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":20,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[14,-7],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0}]}],"fonts":{"list":[{"fName":"Roboto-Black","fFamily":"Roboto","fStyle":"Black","ascent":75},{"fName":"Roboto-Regular","fFamily":"Roboto","fStyle":"Regular","ascent":75}]},"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Total","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.34,"y":0.34},"o":{"x":0.66,"y":0.66},"t":0,"s":[555,540,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":41,"s":[555,540,0],"to":[0,6.667,0],"ti":[0,-6.667,0]},{"i":{"x":0.34,"y":0.34},"o":{"x":0.167,"y":0.167},"t":73,"s":[555,580,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0},"t":117,"s":[555,580,0],"to":[0,-6,0],"ti":[0,6,0]},{"i":{"x":0.34,"y":0.34},"o":{"x":0.167,"y":0.167},"t":168,"s":[555,544,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.34,"y":0.34},"o":{"x":0.167,"y":0.167},"t":197,"s":[555,544,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0},"t":251,"s":[555,544,0],"to":[0,8.667,0],"ti":[0,-8.667,0]},{"t":274.000011160249,"s":[555,596,0]}],"ix":2,"l":2},"a":{"a":0,"k":[555,540,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":41,"s":[89,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":73,"s":[105,105,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":117,"s":[105,105,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":143,"s":[91,91,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":166,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":197,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":251,"s":[89,89,100]},{"t":272.000011078787,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"w":1110,"h":1080,"ip":0,"op":3896.00015868733,"st":0,"bm":0}],"markers":[],"chars":[{"ch":"0","size":130,"style":"Black","w":57.91,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[4.329,5.241],[7.877,0],[4.313,-5.208],[0,-9.602],[0,0],[-4.33,-5.241],[-7.91,0],[-4.314,5.209],[0,9.603]],"o":[[0,-9.57],[-4.33,-5.241],[-7.878,0],[-4.314,5.209],[0,0],[0,9.538],[4.329,5.241],[7.845,0],[4.313,-5.208],[0,0]],"v":[[53.711,-41.992],[47.217,-64.209],[28.906,-72.07],[10.62,-64.258],[4.15,-42.041],[4.15,-29.053],[10.645,-6.885],[29.004,0.977],[47.241,-6.836],[53.711,-29.053]],"c":true},"ix":2},"nm":"0","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[1.334,-2.393],[2.799,0],[1.334,2.458],[0,5.306],[0,0],[-1.286,2.344],[-2.832,0],[-1.335,-2.522],[0,-5.11]],"o":[[-0.033,5.111],[-1.335,2.393],[-2.898,0],[-1.335,-2.457],[0,0],[0.098,-4.752],[1.286,-2.344],[2.897,0],[1.334,2.523],[0,0]],"v":[[37.256,-26.563],[35.205,-15.308],[29.004,-11.719],[22.656,-15.405],[20.654,-27.051],[20.654,-45.215],[22.729,-55.859],[28.906,-59.375],[35.254,-55.591],[37.256,-44.141]],"c":true},"ix":2},"nm":"0","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"0","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"M","size":51,"style":"Regular","w":87.3,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[8.252,-71.094],[8.252,0],[17.627,0],[17.627,-27.686],[16.699,-57.422],[39.99,0],[47.168,0],[70.508,-57.568],[69.629,-27.686],[69.629,0],[79.004,0],[79.004,-71.094],[66.846,-71.094],[43.604,-13.086],[20.361,-71.094]],"c":true},"ix":2},"nm":"M","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"M","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"Y","size":51,"style":"Regular","w":60.94,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[11.475,-71.094],[0.732,-71.094],[25.244,-26.514],[25.244,0],[34.619,0],[34.619,-26.514],[59.131,-71.094],[48.486,-71.094],[29.932,-35.4]],"c":true},"ix":2},"nm":"Y","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"Y","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"S","size":51,"style":"Regular","w":59.33,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.441,-1.904],[0,-3.483],[2.637,-2.018],[4.948,0],[3.174,2.49],[0,4.297],[0,0],[-2.295,-3.255],[-4.232,-1.871],[-4.883,0],[-4.492,3.467],[0,5.762],[1.611,2.67],[3.336,2.002],[5.908,1.663],[2.457,2.006],[0,2.903],[-2.588,2.039],[-4.623,0],[-2.734,-2.466],[0,-4.312],[0,0],[2.1,3.32],[3.825,1.888],[4.883,0],[4.475,-3.662],[0,-5.598],[-3.662,-3.369],[-8.041,-2.311]],"o":[[2.441,1.904],[0,3.484],[-2.637,2.019],[-5.306,0],[-3.174,-2.49],[0,0],[0,4.134],[2.295,3.255],[4.231,1.871],[7.52,0],[4.492,-3.467],[0,-3.613],[-1.611,-2.669],[-3.337,-2.002],[-5.908,-1.663],[-2.458,-2.005],[0,-3.619],[2.588,-2.039],[4.98,0],[2.734,2.467],[0,0],[0,-3.938],[-2.1,-3.32],[-3.825,-1.888],[-7.162,0],[-4.476,3.662],[0,4.948],[3.662,3.369],[6.413,1.855]],"v":[[42.48,-26.05],[46.143,-17.969],[42.188,-9.717],[30.811,-6.689],[18.091,-10.425],[13.33,-20.605],[3.906,-20.605],[7.349,-9.521],[17.139,-1.831],[30.811,0.977],[48.828,-4.224],[55.566,-18.066],[53.149,-27.49],[45.728,-34.497],[31.86,-39.995],[19.312,-45.498],[15.625,-52.86],[19.507,-61.346],[30.322,-64.404],[41.895,-60.705],[45.996,-50.537],[55.42,-50.537],[52.271,-61.426],[43.384,-69.238],[30.322,-72.07],[12.866,-66.577],[6.152,-52.686],[11.646,-40.21],[29.199,-31.689]],"c":true},"ix":2},"nm":"S","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"S","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"T","size":51,"style":"Regular","w":60.45,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[57.373,-71.094],[2.393,-71.094],[2.393,-63.428],[25.195,-63.428],[25.195,0],[34.521,0],[34.521,-63.428],[57.373,-63.428]],"c":true},"ix":2},"nm":"T","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"T","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"}]} ================================================ FILE: src/app/onboarding/components/IdentitySetup/IdentitySetup.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { observer } from "mobx-react-lite" import React, { useState } from "react" import { faFileImport, faIdCardAlt, faUserPlus } from "@fortawesome/free-solid-svg-icons" import styled from "styled-components" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import Lottie from "react-lottie-player" import toast from "react-hot-toast" import { ViewContainer } from "../../../navigation/components/ViewContainer/ViewContainer" import { ViewSplit } from "../../../navigation/components/ViewSplit/ViewSplit" import { ViewSidebar } from "../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewContent } from "../../../navigation/components/ViewContent/ViewContent" import { ViewNavBar } from "../../../navigation/components/ViewNavBar/ViewNavBar" import { Heading2, Small } from "../../../ui-kit/typography" import { ButtonContent, ButtonIcon, PrimarySidebarActionButton, SecondarySidebarActionButton, } from "../../../ui-kit/components/Button/SidebarButtons" import { useStores } from "../../../store" import { ImportIdentityFormFields, ImportIdentityPrompt } from "../../../views/common/Settings/ImportIdentityPrompt" import { brandLight } from "../../../ui-kit/colors" import animationIdentity from "./animation_identity.json" const SideTop = styled.div` box-sizing: border-box; height: 136px; padding: 20px; overflow: hidden; text-align: center; ` const SectionIcon = styled(FontAwesomeIcon)` margin-bottom: 15px; font-size: 20px; color: ${brandLight}; ` const Title = styled(Heading2)` margin-bottom: 15px; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 20px; flex: 1 0 auto; display: flex; flex-direction: column; ` const Content = styled(ViewContent)` background: none; ` export const IdentitySetup: React.FC = observer(function IdentitySetup() { const { onboarding, identity } = useStores() const handleCreateNew = async () => { await onboarding.createNewID() } const [importPrompt, setImportPrompt] = useState(false) const [importFilename, setImportFilename] = useState("") const handleImportExisting = async () => { const filename = await identity.importIdentityChooseFile() if (!filename) { return } setImportFilename(filename) setImportPrompt(true) } const handleImportSubmit = async ({ passphrase }: ImportIdentityFormFields) => { setImportPrompt(false) const res = identity.importIdentity({ filename: importFilename, passphrase }) toast .promise(res, { loading: "Importing identity...", success: function successToast() { return ( Mysterium ID imported! ) }, error: function errorToast(reason) { return ( Mysterium ID import failed 😶
Error: {reason}
) }, }) .then(() => onboarding.finishIDSetup()) } const handleImportCancel = () => { setImportPrompt(false) } return ( Mysterium ID Your anonymous keys to access Mysterium Network. Create New Import existing ) }) ================================================ FILE: src/app/onboarding/components/IdentitySetup/animation_identity.json ================================================ {"v":"5.7.4","fr":29.9700012207031,"ip":0,"op":117.000004765508,"w":1110,"h":1080,"nm":"Композиция 1","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":5,"nm":"MYST","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":226,"s":[558.714,785.871,0],"to":[0,-14,0],"ti":[0,14,0]},{"t":263.00001071221,"s":[558.714,701.871,0]}],"ix":2,"l":2},"a":{"a":0,"k":[68.892,-18.129,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.16,0.16,0.16],"y":[1,1,1]},"o":{"x":[0.84,0.84,0.84],"y":[0,0,0]},"t":226,"s":[0,0,100]},{"t":259.000010549286,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"t":{"d":{"k":[{"s":{"s":51,"f":"Roboto-Regular","t":"MYST","j":0,"tr":0,"lh":61.2,"ls":0,"fc":[0.929,0.357,0.675]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":5,"nm":"0000","sr":1,"ks":{"o":{"a":0,"k":20,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":221,"s":[558.714,737.789,0],"to":[0,-21.667,0],"ti":[0,21.667,0]},{"t":261.000010630748,"s":[558.714,607.789,0]}],"ix":2,"l":2},"a":{"a":0,"k":[150.535,-46.211,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.16,0.16,0.16],"y":[1,1,1]},"o":{"x":[0.84,0.84,0.84],"y":[0,0,0]},"t":221,"s":[0,0,100]},{"t":257.000010467825,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"t":{"d":{"k":[{"s":{"s":130,"f":"Roboto-Black","t":"0000","j":0,"tr":0,"lh":156,"ls":0,"fc":[1,1,1]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Кривые Key","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[334,452,0],"ix":2,"l":2},"a":{"a":0,"k":[34,34.5,0],"ix":1,"l":2},"s":{"a":0,"k":[345.1,345.1,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[3.53,-3.53],[2.419,0],[1.71,1.709],[0,2.418],[-1.711,1.71],[-2.419,0],[-1.71,-1.71]],"o":[[-1.71,1.709],[-2.419,0],[-1.711,-1.711],[0,-2.419],[1.709,-1.71],[2.418,0],[3.53,3.531]],"v":[[18.413,-5.602],[12.011,-2.951],[5.608,-5.602],[2.956,-12.005],[5.608,-18.408],[12.011,-21.06],[18.413,-18.408]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[8.575,8.575],[5.873,0],[4.153,-4.153],[0,-5.874],[-1.152,-2.695],[0,0],[0.055,-0.619],[0,0],[-0.555,-0.554],[-0.782,0.069],[0,0],[-0.44,0.439],[0,0],[0.005,0.077],[0,0],[-0.262,0.262],[-0.372,-0.023],[0,0],[-0.073,-0.018],[0,0],[0.005,0.076],[0,0],[-0.263,0.262],[-0.371,-0.024],[0,0],[-0.073,-0.018],[0,0],[-3.02,0],[-4.153,4.152]],"o":[[-4.153,-4.153],[-5.874,0],[-4.153,4.154],[0,3.02],[0,0],[-0.441,0.439],[0,0],[-0.07,0.783],[0.555,0.556],[0,0],[0.619,-0.055],[0,0],[-0.017,-0.072],[0,0],[-0.025,-0.369],[0.262,-0.261],[0,0],[0.077,0.006],[0,0],[-0.018,-0.072],[0,0],[-0.025,-0.37],[0.261,-0.263],[0,0],[0.076,0.005],[0,0],[2.695,1.153],[5.874,0],[8.574,-8.574]],"v":[[27.559,-27.555],[12.011,-33.996],[-3.539,-27.555],[-9.98,-12.005],[-8.219,-3.365],[-32.447,20.864],[-33.214,22.502],[-33.981,31.109],[-33.215,33.219],[-31.105,33.986],[-22.498,33.219],[-20.858,32.453],[-18.249,29.842],[-18.284,29.619],[-18.712,23.381],[-18.34,22.387],[-17.346,22.015],[-11.108,22.442],[-10.884,22.478],[-8.836,20.43],[-8.872,20.207],[-9.3,13.969],[-8.927,12.975],[-7.933,12.602],[-1.695,13.03],[-1.472,13.066],[3.371,8.222],[12.012,9.983],[27.56,3.544]],"c":true},"ix":2},"nm":"Контур 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Объединить контуры 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"mm","mm":4,"nm":"Объединить контуры 2","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":10,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":120,"s":[34.991,36.015],"to":[10,-1.833],"ti":[-10,1.833]},{"i":{"x":0.53,"y":0.53},"o":{"x":1.019,"y":1.019},"t":150,"s":[94.991,25.015],"to":[0,0],"ti":[0,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":210,"s":[94.991,25.015],"to":[0,0],"ti":[0,0]},{"t":239.00000973467,"s":[15.991,25.015]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.16,0.16],"y":[1,1]},"o":{"x":[0.84,0.84],"y":[0,0]},"t":120,"s":[0,0]},{"i":{"x":[0.833,0.833],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0,0]},"t":158,"s":[119,119]},{"i":{"x":[0.833,0.833],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0,0]},"t":180,"s":[98,98]},{"i":{"x":[0.833,0.833],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0,0]},"t":210,"s":[98,98]},{"t":239.00000973467,"s":[0,0]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":120,"s":[-90]},{"t":158.000006435472,"s":[0]}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Слой-фигура 10","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[578.259,338.919,0],"ix":2,"l":2},"a":{"a":0,"k":[41.759,-208.081,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":17,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-74.227,-10.162],[-74.227,5],[-91.227,22],[-87.241,22],[-104.241,5],[-104.241,-10.162],[-87.241,-27.162],[-91.227,-27.162]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":47,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[215.773,-10.162],[215.773,5],[198.773,22],[-87.241,22],[-104.241,5],[-104.241,-10.162],[-87.241,-27.162],[198.773,-27.162]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[159.773,-10.162],[159.773,5],[142.773,22],[-87.241,22],[-104.241,5],[-104.241,-10.162],[-87.241,-27.162],[142.773,-27.162]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":120,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[215.773,-10.162],[215.773,5],[198.773,22],[-87.241,22],[-104.241,5],[-104.241,-10.162],[-87.241,-27.162],[198.773,-27.162]],"c":true}]},{"t":135.000005498663,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-74.227,-10.162],[-74.227,5],[-91.227,22],[-87.241,22],[-104.241,5],[-104.241,-10.162],[-87.241,-27.162],[-91.227,-27.162]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":10,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":10,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[22,-204.5],"ix":2},"a":{"a":0,"k":[-124,1],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":17,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[100]},{"t":135.000005498663,"s":[0]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Слой-фигура 9","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[578.259,415.955,0],"ix":2,"l":2},"a":{"a":0,"k":[53.613,-208.045,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":22,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-66.664,-8.127],[-66.664,7.036],[-83.664,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[-83.664,-25.127]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":52,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[158.336,-8.127],[158.336,7.036],[141.336,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[141.336,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[236.336,-8.127],[236.336,7.036],[219.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[219.337,-25.127]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":120,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[158.336,-8.127],[158.336,7.036],[141.336,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[141.336,-25.127]],"c":true}]},{"t":135.000005498663,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-66.664,-8.127],[-66.664,7.036],[-83.664,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[-83.664,-25.127]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":10,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":5,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54,-207.5],"ix":2},"a":{"a":0,"k":[-101,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":28,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[100]},{"t":135.000005498663,"s":[0]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Слой-фигура 11","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[578.259,489.955,0],"ix":2,"l":2},"a":{"a":0,"k":[53.613,-208.045,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":39,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-66.664,-8.127],[-66.664,7.036],[-83.664,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[-83.664,-25.127]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":69,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[186.336,-8.127],[186.336,7.036],[169.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[169.337,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[140.336,-8.127],[140.336,7.036],[123.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[123.337,-25.127]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":120,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[186.336,-8.127],[186.336,7.036],[169.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[169.337,-25.127]],"c":true}]},{"t":135.000005498663,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-66.664,-8.127],[-66.664,7.036],[-83.664,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[-83.664,-25.127]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":10,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":10,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54,-207.5],"ix":2},"a":{"a":0,"k":[-101,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":39,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[100]},{"t":135.000005498663,"s":[0]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Слой-фигура 12","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[578.259,567.15,0],"ix":2,"l":2},"a":{"a":0,"k":[53.613,-208.045,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":43,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-66.664,-8.127],[-66.664,7.036],[-83.664,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[-83.664,-25.127]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":73,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[121.337,-8.127],[121.337,7.036],[104.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[104.337,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[209.336,-8.127],[209.336,7.036],[192.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[192.337,-25.127]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":120,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[121.337,-8.127],[121.337,7.036],[104.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[104.337,-25.127]],"c":true}]},{"t":135.000005498663,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-66.664,-8.127],[-66.664,7.036],[-83.664,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[-83.664,-25.127]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":10,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":5,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54,-207.5],"ix":2},"a":{"a":0,"k":[-101,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":43,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[100]},{"t":135.000005498663,"s":[0]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Слой-фигура 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[326,452,0],"ix":2,"l":2},"a":{"a":0,"k":[-214,-88,0],"ix":1,"l":2},"s":{"a":0,"k":[96.367,96.367,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[151.722,-115],[151.722,115],[121.722,145],[-113.942,145],[-143.942,115],[-143.942,-115],[-113.942,-145],[121.722,-145]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":10,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[10]},{"t":150.000006109625,"s":[5]}],"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":13,"s":[-208,60],"to":[0,-24.667],"ti":[0,24.667]},{"i":{"x":0.16,"y":0.16},"o":{"x":0.167,"y":0.167},"t":30,"s":[-208,-88],"to":[0,0],"ti":[0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":120,"s":[-208,-88],"to":[37.703,-6.572],"ti":[-37.703,6.572]},{"i":{"x":0.231,"y":0.231},"o":{"x":0.208,"y":0.208},"t":150,"s":[18.219,-127.433],"to":[0,0],"ti":[0,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":211,"s":[18.219,-127.433],"to":[0,0],"ti":[0,0]},{"t":239.00000973467,"s":[-297.781,-151.433]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.16,0.16],"y":[1,1]},"o":{"x":[0.84,0.84],"y":[0,0]},"t":13,"s":[0,0]},{"i":{"x":[0.833,0.833],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0,0]},"t":30,"s":[100,100]},{"i":{"x":[0.9,0.9],"y":[1.388,1.388]},"o":{"x":[0.688,0.688],"y":[0,0]},"t":120,"s":[100,100]},{"i":{"x":[0.027,0.027],"y":[1,1]},"o":{"x":[0.142,0.142],"y":[0.199,0.199]},"t":134,"s":[80,80]},{"i":{"x":[0.626,0.626],"y":[1,1]},"o":{"x":[0.158,0.158],"y":[0,0]},"t":150,"s":[143,143]},{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":211,"s":[143,143]},{"t":239.00000973467,"s":[45,45]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":120,"s":[0]},{"i":{"x":[0.811],"y":[1]},"o":{"x":[0.514],"y":[0]},"t":150,"s":[90]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":211,"s":[90]},{"t":239.00000973467,"s":[90]}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Слой-фигура 13","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[187.259,687.15,0],"ix":2,"l":2},"a":{"a":0,"k":[53.613,-208.045,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":18,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-66.664,-8.127],[-66.664,7.036],[-83.664,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[-83.664,-25.127]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":70,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[175.336,-8.127],[175.336,7.036],[158.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[158.337,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0.167},"t":101,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[55.337,-8.127],[55.337,7.036],[38.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[38.337,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":120,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[175.336,-8.127],[175.336,7.036],[158.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[158.337,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":150,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[275.337,31.873],[275.337,75.036],[258.337,92.036],[72.614,92.036],[55.614,75.036],[55.614,31.873],[72.614,14.873],[258.337,14.873]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":180,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[459.337,31.873],[459.337,75.036],[442.337,92.036],[72.614,92.036],[55.614,75.036],[55.614,31.873],[72.614,14.873],[442.337,14.873]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":211,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[459.337,31.873],[459.337,75.036],[442.337,92.036],[72.614,92.036],[55.614,75.036],[55.614,31.873],[72.614,14.873],[442.337,14.873]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":241,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[643.337,-336.127],[643.337,-332.714],[626.337,-315.714],[488.614,-315.714],[471.614,-332.714],[471.614,-336.127],[488.613,-353.127],[626.337,-353.127]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":256,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[643.337,-336.127],[643.337,-332.714],[626.337,-315.714],[574.614,-315.714],[557.614,-332.714],[557.614,-336.127],[574.613,-353.127],[626.337,-353.127]],"c":true}]},{"t":270.000010997325,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[643.337,-336.127],[643.337,-332.714],[626.337,-315.714],[488.614,-315.714],[471.614,-332.714],[471.614,-336.127],[488.613,-353.127],[626.337,-353.127]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":10,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":10,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54,-207.5],"ix":2},"a":{"a":0,"k":[-101,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[0]},{"t":34.0000013848484,"s":[100]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Слой-фигура 14","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[187.259,765.15,0],"ix":2,"l":2},"a":{"a":0,"k":[53.613,-208.045,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":30,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-66.664,-8.127],[-66.664,7.036],[-83.664,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[-83.664,-25.127]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":80,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[145.336,-8.127],[145.336,7.036],[128.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[128.337,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0.167},"t":101,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[185.336,-8.127],[185.336,7.036],[168.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[168.337,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":120,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[145.336,-8.127],[145.336,7.036],[128.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[128.337,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":150,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[467.336,61.873],[467.336,104.036],[450.337,121.036],[73.614,121.036],[56.614,104.036],[56.614,61.873],[73.614,44.873],[450.337,44.873]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":180,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[295.336,61.873],[295.336,104.036],[278.337,121.036],[73.614,121.036],[56.614,104.036],[56.614,61.873],[73.614,44.873],[278.337,44.873]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":211,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[295.336,61.873],[295.336,104.036],[278.337,121.036],[73.614,121.036],[56.614,104.036],[56.614,61.873],[73.614,44.873],[278.337,44.873]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":241,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[642.336,-330.127],[642.336,-327.964],[625.337,-310.964],[540.616,-310.964],[523.616,-327.964],[523.616,-330.127],[540.616,-347.127],[625.337,-347.127]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":256,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[642.336,-330.127],[642.336,-327.964],[625.337,-310.964],[482.616,-310.964],[465.616,-327.964],[465.616,-330.127],[482.616,-347.127],[625.337,-347.127]],"c":true}]},{"t":270.000010997325,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[642.336,-330.127],[642.336,-327.964],[625.337,-310.964],[540.616,-310.964],[523.616,-327.964],[523.616,-330.127],[540.616,-347.127],[625.337,-347.127]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":10,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":5,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54,-207.5],"ix":2},"a":{"a":0,"k":[-101,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[0]},{"t":43.0000017514259,"s":[100]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":20,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":0,"nm":"Back","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":20,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[555,540,0],"ix":2,"l":2},"a":{"a":0,"k":[555,540,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1110,"h":1080,"ip":0,"op":3896.00015868733,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Слой-фигура 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":0,"s":[540,823,0],"to":[0,-44.5,0],"ti":[0,44.5,0]},{"i":{"x":0.16,"y":0.16},"o":{"x":0.84,"y":0.84},"t":30,"s":[540,556,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":120,"s":[540,556,0],"to":[0,1.5,0],"ti":[0,-1.5,0]},{"i":{"x":0.16,"y":0.16},"o":{"x":0.84,"y":0.84},"t":150,"s":[540,565,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":210,"s":[540,565,0],"to":[0,-1.5,0],"ti":[0,1.5,0]},{"t":239.00000973467,"s":[540,556,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.16,0.16,0.16],"y":[1,1,1]},"o":{"x":[0.84,0.84,0.84],"y":[0,0,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.16,0.16,0.16],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":24,"s":[100,100,100]},{"i":{"x":[0.16,0.16,0.16],"y":[1,1,1]},"o":{"x":[0.84,0.84,0.84],"y":[0,0,0]},"t":120,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":150,"s":[137,137,100]},{"i":{"x":[0.16,0.16,0.16],"y":[1,1,1]},"o":{"x":[0.84,0.84,0.84],"y":[0,0,0]},"t":210,"s":[137,137,100]},{"t":239.00000973467,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":126,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[454.368,-278.924],[454.368,278.924],[424.368,308.924],[-424.368,308.924],[-454.368,278.924],[-454.368,-278.924],[-424.368,-308.924],[424.368,-308.924]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.84,"y":0},"t":150,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[214.368,-278.924],[214.368,278.924],[184.368,308.924],[-200.368,308.924],[-230.368,278.924],[-230.368,-278.924],[-200.368,-308.924],[184.368,-308.924]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":210,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[214.368,-278.924],[214.368,278.924],[184.368,308.924],[-200.368,308.924],[-230.368,278.924],[-230.368,-278.924],[-200.368,-308.924],[184.368,-308.924]],"c":true}]},{"t":239.00000973467,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[454.368,-278.924],[454.368,278.924],[424.368,308.924],[-424.368,308.924],[-454.368,278.924],[-454.368,-278.924],[-424.368,-308.924],[424.368,-308.924]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[14,-7],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Слой-фигура 18","sr":1,"ks":{"o":{"a":0,"k":50,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":229,"s":[0]},{"t":270.000010997325,"s":[5]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":0,"s":[540,823,0],"to":[0,-44.5,0],"ti":[0,44.5,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.973,"y":0},"t":30,"s":[540,556,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":0.16},"o":{"x":0.973,"y":0.973},"t":58,"s":[540,476,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.973,"y":0},"t":120,"s":[540,476,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0},"t":135,"s":[540,559,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":0.16},"o":{"x":0.167,"y":0.167},"t":166,"s":[342,565,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0},"t":200,"s":[342,565,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":229,"s":[539,612.5,0],"to":[0,0,0],"ti":[0,0,0]},{"t":270.000010997325,"s":[539,443,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.16,0.16,0.16],"y":[1,1,1]},"o":{"x":[0.84,0.84,0.84],"y":[0,0,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.232,0.232,0.232],"y":[0,0,0]},"t":24,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":58,"s":[91,91,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":119,"s":[91,91,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":166,"s":[124,124,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":200,"s":[124,124,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":229,"s":[50,50,100]},{"t":270.000010997325,"s":[89,89,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":122,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[454.368,-278.924],[454.368,278.924],[424.368,308.924],[-424.368,308.924],[-454.368,278.924],[-454.368,-278.924],[-424.368,-308.924],[424.368,-308.924]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.84,"y":0},"t":146,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[214.368,-278.924],[214.368,278.924],[184.368,308.924],[-200.368,308.924],[-230.368,278.924],[-230.368,-278.924],[-200.368,-308.924],[184.368,-308.924]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":206,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[214.368,-278.924],[214.368,278.924],[184.368,308.924],[-200.368,308.924],[-230.368,278.924],[-230.368,-278.924],[-200.368,-308.924],[184.368,-308.924]],"c":true}]},{"t":235.000009571746,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[454.368,-278.924],[454.368,278.924],[424.368,308.924],[-424.368,308.924],[-454.368,278.924],[-454.368,-278.924],[-424.368,-308.924],[424.368,-308.924]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":20,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[14,-7],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Слой-фигура 16","sr":1,"ks":{"o":{"a":0,"k":49,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":229,"s":[0]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":240,"s":[0]},{"t":281.000011445365,"s":[11]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":0,"s":[540,823,0],"to":[0,-44.5,0],"ti":[0,44.5,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.973,"y":0},"t":30,"s":[540,556,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":0.16},"o":{"x":0.973,"y":0.973},"t":69,"s":[540,396,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.973,"y":0},"t":120,"s":[540,396,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0},"t":135,"s":[540,587,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":0.16},"o":{"x":0.167,"y":0.167},"t":165,"s":[739,565,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0},"t":200,"s":[739,565,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":0.16},"o":{"x":0.66,"y":0.66},"t":229,"s":[538,612.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":240,"s":[538,612.5,0],"to":[0,0,0],"ti":[0,0,0]},{"t":281.000011445365,"s":[562,328,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.16,0.16,0.16],"y":[1,1,1]},"o":{"x":[0.84,0.84,0.84],"y":[0,0,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.232,0.232,0.232],"y":[0,0,0]},"t":24,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":69,"s":[82,82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":120,"s":[82,82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":165,"s":[124,124,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":200,"s":[124,124,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":229,"s":[50,50,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":240,"s":[50,50,100]},{"t":281.000011445365,"s":[73,73,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":120,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[454.368,-278.924],[454.368,278.924],[424.368,308.924],[-424.368,308.924],[-454.368,278.924],[-454.368,-278.924],[-424.368,-308.924],[424.368,-308.924]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.84,"y":0},"t":144,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[214.368,-278.924],[214.368,278.924],[184.368,308.924],[-200.368,308.924],[-230.368,278.924],[-230.368,-278.924],[-200.368,-308.924],[184.368,-308.924]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":204,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[214.368,-278.924],[214.368,278.924],[184.368,308.924],[-200.368,308.924],[-230.368,278.924],[-230.368,-278.924],[-200.368,-308.924],[184.368,-308.924]],"c":true}]},{"t":233.000009490285,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[454.368,-278.924],[454.368,278.924],[424.368,308.924],[-424.368,308.924],[-454.368,278.924],[-454.368,-278.924],[-424.368,-308.924],[424.368,-308.924]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":20,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[14,-7],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0}]}],"fonts":{"list":[{"fName":"Roboto-Black","fFamily":"Roboto","fStyle":"Black","ascent":75},{"fName":"Roboto-Regular","fFamily":"Roboto","fStyle":"Regular","ascent":75}]},"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Total","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.34,"y":0.34},"o":{"x":0.66,"y":0.66},"t":0,"s":[555,540,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":41,"s":[555,540,0],"to":[0,6.667,0],"ti":[0,-6.667,0]},{"i":{"x":0.34,"y":0.34},"o":{"x":0.167,"y":0.167},"t":73,"s":[555,580,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0},"t":117,"s":[555,580,0],"to":[0,-6,0],"ti":[0,6,0]},{"i":{"x":0.34,"y":0.34},"o":{"x":0.167,"y":0.167},"t":168,"s":[555,544,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.34,"y":0.34},"o":{"x":0.167,"y":0.167},"t":197,"s":[555,544,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0},"t":251,"s":[555,544,0],"to":[0,8.667,0],"ti":[0,-8.667,0]},{"t":274.000011160249,"s":[555,596,0]}],"ix":2,"l":2},"a":{"a":0,"k":[555,540,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":41,"s":[89,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":73,"s":[105,105,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":117,"s":[105,105,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":143,"s":[91,91,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":166,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":197,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":251,"s":[89,89,100]},{"t":272.000011078787,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"w":1110,"h":1080,"ip":0,"op":3896.00015868733,"st":0,"bm":0}],"markers":[],"chars":[{"ch":"0","size":130,"style":"Black","w":57.91,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[4.329,5.241],[7.877,0],[4.313,-5.208],[0,-9.602],[0,0],[-4.33,-5.241],[-7.91,0],[-4.314,5.209],[0,9.603]],"o":[[0,-9.57],[-4.33,-5.241],[-7.878,0],[-4.314,5.209],[0,0],[0,9.538],[4.329,5.241],[7.845,0],[4.313,-5.208],[0,0]],"v":[[53.711,-41.992],[47.217,-64.209],[28.906,-72.07],[10.62,-64.258],[4.15,-42.041],[4.15,-29.053],[10.645,-6.885],[29.004,0.977],[47.241,-6.836],[53.711,-29.053]],"c":true},"ix":2},"nm":"0","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[1.334,-2.393],[2.799,0],[1.334,2.458],[0,5.306],[0,0],[-1.286,2.344],[-2.832,0],[-1.335,-2.522],[0,-5.11]],"o":[[-0.033,5.111],[-1.335,2.393],[-2.898,0],[-1.335,-2.457],[0,0],[0.098,-4.752],[1.286,-2.344],[2.897,0],[1.334,2.523],[0,0]],"v":[[37.256,-26.563],[35.205,-15.308],[29.004,-11.719],[22.656,-15.405],[20.654,-27.051],[20.654,-45.215],[22.729,-55.859],[28.906,-59.375],[35.254,-55.591],[37.256,-44.141]],"c":true},"ix":2},"nm":"0","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"0","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"M","size":51,"style":"Regular","w":87.3,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[8.252,-71.094],[8.252,0],[17.627,0],[17.627,-27.686],[16.699,-57.422],[39.99,0],[47.168,0],[70.508,-57.568],[69.629,-27.686],[69.629,0],[79.004,0],[79.004,-71.094],[66.846,-71.094],[43.604,-13.086],[20.361,-71.094]],"c":true},"ix":2},"nm":"M","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"M","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"Y","size":51,"style":"Regular","w":60.94,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[11.475,-71.094],[0.732,-71.094],[25.244,-26.514],[25.244,0],[34.619,0],[34.619,-26.514],[59.131,-71.094],[48.486,-71.094],[29.932,-35.4]],"c":true},"ix":2},"nm":"Y","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"Y","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"S","size":51,"style":"Regular","w":59.33,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.441,-1.904],[0,-3.483],[2.637,-2.018],[4.948,0],[3.174,2.49],[0,4.297],[0,0],[-2.295,-3.255],[-4.232,-1.871],[-4.883,0],[-4.492,3.467],[0,5.762],[1.611,2.67],[3.336,2.002],[5.908,1.663],[2.457,2.006],[0,2.903],[-2.588,2.039],[-4.623,0],[-2.734,-2.466],[0,-4.312],[0,0],[2.1,3.32],[3.825,1.888],[4.883,0],[4.475,-3.662],[0,-5.598],[-3.662,-3.369],[-8.041,-2.311]],"o":[[2.441,1.904],[0,3.484],[-2.637,2.019],[-5.306,0],[-3.174,-2.49],[0,0],[0,4.134],[2.295,3.255],[4.231,1.871],[7.52,0],[4.492,-3.467],[0,-3.613],[-1.611,-2.669],[-3.337,-2.002],[-5.908,-1.663],[-2.458,-2.005],[0,-3.619],[2.588,-2.039],[4.98,0],[2.734,2.467],[0,0],[0,-3.938],[-2.1,-3.32],[-3.825,-1.888],[-7.162,0],[-4.476,3.662],[0,4.948],[3.662,3.369],[6.413,1.855]],"v":[[42.48,-26.05],[46.143,-17.969],[42.188,-9.717],[30.811,-6.689],[18.091,-10.425],[13.33,-20.605],[3.906,-20.605],[7.349,-9.521],[17.139,-1.831],[30.811,0.977],[48.828,-4.224],[55.566,-18.066],[53.149,-27.49],[45.728,-34.497],[31.86,-39.995],[19.312,-45.498],[15.625,-52.86],[19.507,-61.346],[30.322,-64.404],[41.895,-60.705],[45.996,-50.537],[55.42,-50.537],[52.271,-61.426],[43.384,-69.238],[30.322,-72.07],[12.866,-66.577],[6.152,-52.686],[11.646,-40.21],[29.199,-31.689]],"c":true},"ix":2},"nm":"S","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"S","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"T","size":51,"style":"Regular","w":60.45,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[57.373,-71.094],[2.393,-71.094],[2.393,-63.428],[25.195,-63.428],[25.195,0],[34.521,0],[34.521,-63.428],[57.373,-63.428]],"c":true},"ix":2},"nm":"T","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"T","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"}]} ================================================ FILE: src/app/onboarding/components/InitialTopup/InitialTopup.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { observer } from "mobx-react-lite" import React, { useState } from "react" import { faWallet, faArrowAltCircleLeft } from "@fortawesome/free-solid-svg-icons" import styled from "styled-components" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import Lottie from "react-lottie-player" import { comparer, reaction } from "mobx" import { IdentityRegistrationStatus } from "mysterium-vpn-js" import { useNavigate } from "react-router-dom" import { ViewContainer } from "../../../navigation/components/ViewContainer/ViewContainer" import { ViewSplit } from "../../../navigation/components/ViewSplit/ViewSplit" import { ViewSidebar } from "../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewContent } from "../../../navigation/components/ViewContent/ViewContent" import { ViewNavBar } from "../../../navigation/components/ViewNavBar/ViewNavBar" import { Heading2, Small } from "../../../ui-kit/typography" import { ButtonContent, ButtonIcon, PrimarySidebarActionButton, SecondarySidebarActionButton, } from "../../../ui-kit/components/Button/SidebarButtons" import { Step, useStores } from "../../../store" import { brandLight } from "../../../ui-kit/colors" import { locations } from "../../../navigation/locations" import { log } from "../../../../shared/log/log" import { ReferralCodeFormFields, UseReferralCodePrompt } from "./UseReferralCodePrompt" import animationOnboardingTopup from "./animation_onboarding_topup.json" const SideTop = styled.div` box-sizing: border-box; height: 136px; padding: 20px; overflow: hidden; text-align: center; ` const SectionIcon = styled(FontAwesomeIcon)` margin-bottom: 10px; font-size: 20px; color: ${brandLight}; ` const Title = styled(Heading2)` margin-bottom: 15px; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 20px; flex: 1 0 auto; display: flex; flex-direction: column; ` const Content = styled(ViewContent)` background: none; justify-content: center; ` export const InitialTopup: React.FC = observer(function InitialTopup() { const root = useStores() const navigate = useNavigate() const { payment, onboarding, identity } = root const handleTopupNow = async () => { return payment.startTopupFlow(locations.onboardingWalletTopup) } const [referralPrompt, setReferralPrompt] = useState(false) // const handleUseReferralCode = () => { // setReferralPrompt(true) // } const handleReferralSubmit = async ({ code }: ReferralCodeFormFields) => { setReferralPrompt(false) await onboarding.registerWithReferralCode(code) } const handleReferralCancel = () => { setReferralPrompt(false) } reaction( () => identity.identity?.balanceTokens, async (balance, prev) => { log.debug(`[event] Balance changed: ${prev?.ether} -> ${balance?.ether}`) switch (identity.identity?.registrationStatus) { case IdentityRegistrationStatus.Unregistered: case IdentityRegistrationStatus.RegistrationError: if (await identity.balanceSufficientToRegister()) { root.startupSequence(Step.IDENTITY_REGISTER) } } }, { equals: comparer.structural, }, ) return ( Your Wallet Top up your wallet now to complete the registration Top up now navigate(-1)}> Go Back ) }) ================================================ FILE: src/app/onboarding/components/InitialTopup/UseReferralCodePrompt.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useEffect } from "react" import { SubmitHandler, useForm } from "react-hook-form" import styled from "styled-components" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { faCheckCircle } from "@fortawesome/free-solid-svg-icons" import { toast } from "react-hot-toast" import _ from "lodash" import { Prompt } from "../../../ui-kit/components/Prompt/Prompt" import { Paragraph, Small } from "../../../ui-kit/typography" import { TextInput } from "../../../ui-kit/form-components/TextInput" import { brand, darkBlue, greyBlue1 } from "../../../ui-kit/colors" import { useStores } from "../../../store" const PromptExplanation = styled(Small)` opacity: 0.7; margin-bottom: 15px; ` const PromptInput = styled(TextInput)` border: 1px solid ${greyBlue1}; color: ${darkBlue}; ::placeholder { opacity: 0.7; color: ${darkBlue}; } margin-bottom: 0; ` const PromptValidation = styled(Small)` margin: 5px 0 10px; color: red; height: 15px; ` const RewardPreview = styled.div` text-align: center; margin-bottom: 20px; ` const RewardIcon = styled(FontAwesomeIcon)` margin-bottom: 10px; ` const RewardAmount = styled(Paragraph)`` export interface UseReferralCodePromptProps { visible: boolean onSubmit: SubmitHandler onCancel: () => void } export interface ReferralCodeFormFields { code: string } export const UseReferralCodePrompt: React.FC = ({ visible, onSubmit, onCancel }) => { const { register, handleSubmit, reset, trigger, formState: { errors }, } = useForm({ reValidateMode: "onSubmit" }) const { referral, payment } = useStores() useEffect(() => { if (!visible) { reset() referral.resetToken() } }, [visible]) const handleValidate = async () => { await trigger() } return ( { if (referral.token && code === referral.token) { // Do not revalidate and toast on 'Apply' return true } const loadingToastID = toast.loading("Validating token...") const valid = await referral.validateToken(code) const dismissWait = valid ? 500 : 850 _.debounce(() => toast.dismiss(loadingToastID), dismissWait, { trailing: true })() return valid || "This token is not valid" }, }, })} /> {errors.code?.message} {!!referral.rewardAmount && ( You will be awarded {referral.rewardAmount} {payment.appCurrency}(s) )} ) } ================================================ FILE: src/app/onboarding/components/InitialTopup/animation_onboarding_topup.json ================================================ {"v":"5.7.4","fr":29.9700012207031,"ip":197.000008023974,"op":282.000011486096,"w":1110,"h":1080,"nm":"Композиция 1","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":5,"nm":"MYST","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":226,"s":[558.714,785.871,0],"to":[0,-14,0],"ti":[0,14,0]},{"t":263.00001071221,"s":[558.714,701.871,0]}],"ix":2,"l":2},"a":{"a":0,"k":[68.892,-18.129,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.16,0.16,0.16],"y":[1,1,1]},"o":{"x":[0.84,0.84,0.84],"y":[0,0,0]},"t":226,"s":[0,0,100]},{"t":259.000010549286,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"t":{"d":{"k":[{"s":{"s":51,"f":"Roboto-Regular","t":"MYST","j":0,"tr":0,"lh":61.2,"ls":0,"fc":[0.929,0.357,0.675]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":5,"nm":"0000","sr":1,"ks":{"o":{"a":0,"k":20,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":221,"s":[558.714,737.789,0],"to":[0,-21.667,0],"ti":[0,21.667,0]},{"t":261.000010630748,"s":[558.714,607.789,0]}],"ix":2,"l":2},"a":{"a":0,"k":[150.535,-46.211,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.16,0.16,0.16],"y":[1,1,1]},"o":{"x":[0.84,0.84,0.84],"y":[0,0,0]},"t":221,"s":[0,0,100]},{"t":257.000010467825,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"t":{"d":{"k":[{"s":{"s":130,"f":"Roboto-Black","t":"0000","j":0,"tr":0,"lh":156,"ls":0,"fc":[1,1,1]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Кривые Key","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[334,452,0],"ix":2,"l":2},"a":{"a":0,"k":[34,34.5,0],"ix":1,"l":2},"s":{"a":0,"k":[345.1,345.1,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[3.53,-3.53],[2.419,0],[1.71,1.709],[0,2.418],[-1.711,1.71],[-2.419,0],[-1.71,-1.71]],"o":[[-1.71,1.709],[-2.419,0],[-1.711,-1.711],[0,-2.419],[1.709,-1.71],[2.418,0],[3.53,3.531]],"v":[[18.413,-5.602],[12.011,-2.951],[5.608,-5.602],[2.956,-12.005],[5.608,-18.408],[12.011,-21.06],[18.413,-18.408]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[8.575,8.575],[5.873,0],[4.153,-4.153],[0,-5.874],[-1.152,-2.695],[0,0],[0.055,-0.619],[0,0],[-0.555,-0.554],[-0.782,0.069],[0,0],[-0.44,0.439],[0,0],[0.005,0.077],[0,0],[-0.262,0.262],[-0.372,-0.023],[0,0],[-0.073,-0.018],[0,0],[0.005,0.076],[0,0],[-0.263,0.262],[-0.371,-0.024],[0,0],[-0.073,-0.018],[0,0],[-3.02,0],[-4.153,4.152]],"o":[[-4.153,-4.153],[-5.874,0],[-4.153,4.154],[0,3.02],[0,0],[-0.441,0.439],[0,0],[-0.07,0.783],[0.555,0.556],[0,0],[0.619,-0.055],[0,0],[-0.017,-0.072],[0,0],[-0.025,-0.369],[0.262,-0.261],[0,0],[0.077,0.006],[0,0],[-0.018,-0.072],[0,0],[-0.025,-0.37],[0.261,-0.263],[0,0],[0.076,0.005],[0,0],[2.695,1.153],[5.874,0],[8.574,-8.574]],"v":[[27.559,-27.555],[12.011,-33.996],[-3.539,-27.555],[-9.98,-12.005],[-8.219,-3.365],[-32.447,20.864],[-33.214,22.502],[-33.981,31.109],[-33.215,33.219],[-31.105,33.986],[-22.498,33.219],[-20.858,32.453],[-18.249,29.842],[-18.284,29.619],[-18.712,23.381],[-18.34,22.387],[-17.346,22.015],[-11.108,22.442],[-10.884,22.478],[-8.836,20.43],[-8.872,20.207],[-9.3,13.969],[-8.927,12.975],[-7.933,12.602],[-1.695,13.03],[-1.472,13.066],[3.371,8.222],[12.012,9.983],[27.56,3.544]],"c":true},"ix":2},"nm":"Контур 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Объединить контуры 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"mm","mm":4,"nm":"Объединить контуры 2","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":10,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":120,"s":[34.991,36.015],"to":[10,-1.833],"ti":[-10,1.833]},{"i":{"x":0.53,"y":0.53},"o":{"x":1.019,"y":1.019},"t":150,"s":[94.991,25.015],"to":[0,0],"ti":[0,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":210,"s":[94.991,25.015],"to":[0,0],"ti":[0,0]},{"t":239.00000973467,"s":[15.991,25.015]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.16,0.16],"y":[1,1]},"o":{"x":[0.84,0.84],"y":[0,0]},"t":120,"s":[0,0]},{"i":{"x":[0.833,0.833],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0,0]},"t":158,"s":[119,119]},{"i":{"x":[0.833,0.833],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0,0]},"t":180,"s":[98,98]},{"i":{"x":[0.833,0.833],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0,0]},"t":210,"s":[98,98]},{"t":239.00000973467,"s":[0,0]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":120,"s":[-90]},{"t":158.000006435472,"s":[0]}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Слой-фигура 10","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[578.259,338.919,0],"ix":2,"l":2},"a":{"a":0,"k":[41.759,-208.081,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":17,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-74.227,-10.162],[-74.227,5],[-91.227,22],[-87.241,22],[-104.241,5],[-104.241,-10.162],[-87.241,-27.162],[-91.227,-27.162]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":47,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[215.773,-10.162],[215.773,5],[198.773,22],[-87.241,22],[-104.241,5],[-104.241,-10.162],[-87.241,-27.162],[198.773,-27.162]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[159.773,-10.162],[159.773,5],[142.773,22],[-87.241,22],[-104.241,5],[-104.241,-10.162],[-87.241,-27.162],[142.773,-27.162]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":120,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[215.773,-10.162],[215.773,5],[198.773,22],[-87.241,22],[-104.241,5],[-104.241,-10.162],[-87.241,-27.162],[198.773,-27.162]],"c":true}]},{"t":135.000005498663,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-74.227,-10.162],[-74.227,5],[-91.227,22],[-87.241,22],[-104.241,5],[-104.241,-10.162],[-87.241,-27.162],[-91.227,-27.162]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":10,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":10,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[22,-204.5],"ix":2},"a":{"a":0,"k":[-124,1],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":17,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[100]},{"t":135.000005498663,"s":[0]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Слой-фигура 9","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[578.259,415.955,0],"ix":2,"l":2},"a":{"a":0,"k":[53.613,-208.045,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":22,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-66.664,-8.127],[-66.664,7.036],[-83.664,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[-83.664,-25.127]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":52,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[158.336,-8.127],[158.336,7.036],[141.336,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[141.336,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[236.336,-8.127],[236.336,7.036],[219.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[219.337,-25.127]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":120,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[158.336,-8.127],[158.336,7.036],[141.336,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[141.336,-25.127]],"c":true}]},{"t":135.000005498663,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-66.664,-8.127],[-66.664,7.036],[-83.664,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[-83.664,-25.127]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":10,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":5,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54,-207.5],"ix":2},"a":{"a":0,"k":[-101,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":28,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[100]},{"t":135.000005498663,"s":[0]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Слой-фигура 11","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[578.259,489.955,0],"ix":2,"l":2},"a":{"a":0,"k":[53.613,-208.045,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":39,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-66.664,-8.127],[-66.664,7.036],[-83.664,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[-83.664,-25.127]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":69,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[186.336,-8.127],[186.336,7.036],[169.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[169.337,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[140.336,-8.127],[140.336,7.036],[123.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[123.337,-25.127]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":120,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[186.336,-8.127],[186.336,7.036],[169.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[169.337,-25.127]],"c":true}]},{"t":135.000005498663,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-66.664,-8.127],[-66.664,7.036],[-83.664,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[-83.664,-25.127]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":10,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":10,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54,-207.5],"ix":2},"a":{"a":0,"k":[-101,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":39,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[100]},{"t":135.000005498663,"s":[0]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Слой-фигура 12","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[578.259,567.15,0],"ix":2,"l":2},"a":{"a":0,"k":[53.613,-208.045,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":43,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-66.664,-8.127],[-66.664,7.036],[-83.664,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[-83.664,-25.127]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":73,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[121.337,-8.127],[121.337,7.036],[104.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[104.337,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[209.336,-8.127],[209.336,7.036],[192.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[192.337,-25.127]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":120,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[121.337,-8.127],[121.337,7.036],[104.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[104.337,-25.127]],"c":true}]},{"t":135.000005498663,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-66.664,-8.127],[-66.664,7.036],[-83.664,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[-83.664,-25.127]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":10,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":5,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54,-207.5],"ix":2},"a":{"a":0,"k":[-101,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":43,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[100]},{"t":135.000005498663,"s":[0]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Слой-фигура 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[326,452,0],"ix":2,"l":2},"a":{"a":0,"k":[-214,-88,0],"ix":1,"l":2},"s":{"a":0,"k":[96.367,96.367,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[151.722,-115],[151.722,115],[121.722,145],[-113.942,145],[-143.942,115],[-143.942,-115],[-113.942,-145],[121.722,-145]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":10,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[10]},{"t":150.000006109625,"s":[5]}],"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":13,"s":[-208,60],"to":[0,-24.667],"ti":[0,24.667]},{"i":{"x":0.16,"y":0.16},"o":{"x":0.167,"y":0.167},"t":30,"s":[-208,-88],"to":[0,0],"ti":[0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":120,"s":[-208,-88],"to":[37.703,-6.572],"ti":[-37.703,6.572]},{"i":{"x":0.231,"y":0.231},"o":{"x":0.208,"y":0.208},"t":150,"s":[18.219,-127.433],"to":[0,0],"ti":[0,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":211,"s":[18.219,-127.433],"to":[0,0],"ti":[0,0]},{"t":239.00000973467,"s":[-297.781,-151.433]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.16,0.16],"y":[1,1]},"o":{"x":[0.84,0.84],"y":[0,0]},"t":13,"s":[0,0]},{"i":{"x":[0.833,0.833],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0,0]},"t":30,"s":[100,100]},{"i":{"x":[0.9,0.9],"y":[1.388,1.388]},"o":{"x":[0.688,0.688],"y":[0,0]},"t":120,"s":[100,100]},{"i":{"x":[0.027,0.027],"y":[1,1]},"o":{"x":[0.142,0.142],"y":[0.199,0.199]},"t":134,"s":[80,80]},{"i":{"x":[0.626,0.626],"y":[1,1]},"o":{"x":[0.158,0.158],"y":[0,0]},"t":150,"s":[143,143]},{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":211,"s":[143,143]},{"t":239.00000973467,"s":[45,45]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":120,"s":[0]},{"i":{"x":[0.811],"y":[1]},"o":{"x":[0.514],"y":[0]},"t":150,"s":[90]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":211,"s":[90]},{"t":239.00000973467,"s":[90]}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Слой-фигура 13","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[187.259,687.15,0],"ix":2,"l":2},"a":{"a":0,"k":[53.613,-208.045,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":18,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-66.664,-8.127],[-66.664,7.036],[-83.664,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[-83.664,-25.127]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":70,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[175.336,-8.127],[175.336,7.036],[158.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[158.337,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0.167},"t":101,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[55.337,-8.127],[55.337,7.036],[38.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[38.337,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":120,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[175.336,-8.127],[175.336,7.036],[158.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[158.337,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":150,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[275.337,31.873],[275.337,75.036],[258.337,92.036],[72.614,92.036],[55.614,75.036],[55.614,31.873],[72.614,14.873],[258.337,14.873]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":180,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[459.337,31.873],[459.337,75.036],[442.337,92.036],[72.614,92.036],[55.614,75.036],[55.614,31.873],[72.614,14.873],[442.337,14.873]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":211,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[459.337,31.873],[459.337,75.036],[442.337,92.036],[72.614,92.036],[55.614,75.036],[55.614,31.873],[72.614,14.873],[442.337,14.873]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":241,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[643.337,-336.127],[643.337,-332.714],[626.337,-315.714],[488.614,-315.714],[471.614,-332.714],[471.614,-336.127],[488.613,-353.127],[626.337,-353.127]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":256,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[643.337,-336.127],[643.337,-332.714],[626.337,-315.714],[574.614,-315.714],[557.614,-332.714],[557.614,-336.127],[574.613,-353.127],[626.337,-353.127]],"c":true}]},{"t":270.000010997325,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[643.337,-336.127],[643.337,-332.714],[626.337,-315.714],[488.614,-315.714],[471.614,-332.714],[471.614,-336.127],[488.613,-353.127],[626.337,-353.127]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":10,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":10,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54,-207.5],"ix":2},"a":{"a":0,"k":[-101,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[0]},{"t":34.0000013848484,"s":[100]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Слой-фигура 14","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[187.259,765.15,0],"ix":2,"l":2},"a":{"a":0,"k":[53.613,-208.045,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":30,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[-66.664,-8.127],[-66.664,7.036],[-83.664,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[-83.664,-25.127]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":80,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[145.336,-8.127],[145.336,7.036],[128.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[128.337,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0.167},"t":101,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[185.336,-8.127],[185.336,7.036],[168.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[168.337,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":120,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[145.336,-8.127],[145.336,7.036],[128.337,24.036],[-84.387,24.036],[-101.387,7.036],[-101.387,-8.127],[-84.387,-25.127],[128.337,-25.127]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":150,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[467.336,61.873],[467.336,104.036],[450.337,121.036],[73.614,121.036],[56.614,104.036],[56.614,61.873],[73.614,44.873],[450.337,44.873]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":180,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[295.336,61.873],[295.336,104.036],[278.337,121.036],[73.614,121.036],[56.614,104.036],[56.614,61.873],[73.614,44.873],[278.337,44.873]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":211,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[295.336,61.873],[295.336,104.036],[278.337,121.036],[73.614,121.036],[56.614,104.036],[56.614,61.873],[73.614,44.873],[278.337,44.873]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":241,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[642.336,-330.127],[642.336,-327.964],[625.337,-310.964],[540.616,-310.964],[523.616,-327.964],[523.616,-330.127],[540.616,-347.127],[625.337,-347.127]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":256,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[642.336,-330.127],[642.336,-327.964],[625.337,-310.964],[482.616,-310.964],[465.616,-327.964],[465.616,-330.127],[482.616,-347.127],[625.337,-347.127]],"c":true}]},{"t":270.000010997325,"s":[{"i":[[0,-9.389],[0,0],[9.389,0],[0,0],[0,9.389],[0,0],[-9.389,0],[0,0]],"o":[[0,0],[0,9.389],[0,0],[-9.389,0],[0,0],[0,-9.389],[0,0],[9.389,0]],"v":[[642.336,-330.127],[642.336,-327.964],[625.337,-310.964],[540.616,-310.964],[523.616,-327.964],[523.616,-330.127],[540.616,-347.127],[625.337,-347.127]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":10,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":5,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54,-207.5],"ix":2},"a":{"a":0,"k":[-101,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[0]},{"t":43.0000017514259,"s":[100]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":20,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":0,"nm":"Back","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":20,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[555,540,0],"ix":2,"l":2},"a":{"a":0,"k":[555,540,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1110,"h":1080,"ip":0,"op":3896.00015868733,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Слой-фигура 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":0,"s":[540,823,0],"to":[0,-44.5,0],"ti":[0,44.5,0]},{"i":{"x":0.16,"y":0.16},"o":{"x":0.84,"y":0.84},"t":30,"s":[540,556,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":120,"s":[540,556,0],"to":[0,1.5,0],"ti":[0,-1.5,0]},{"i":{"x":0.16,"y":0.16},"o":{"x":0.84,"y":0.84},"t":150,"s":[540,565,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":210,"s":[540,565,0],"to":[0,-1.5,0],"ti":[0,1.5,0]},{"t":239.00000973467,"s":[540,556,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.16,0.16,0.16],"y":[1,1,1]},"o":{"x":[0.84,0.84,0.84],"y":[0,0,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.16,0.16,0.16],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":24,"s":[100,100,100]},{"i":{"x":[0.16,0.16,0.16],"y":[1,1,1]},"o":{"x":[0.84,0.84,0.84],"y":[0,0,0]},"t":120,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":150,"s":[137,137,100]},{"i":{"x":[0.16,0.16,0.16],"y":[1,1,1]},"o":{"x":[0.84,0.84,0.84],"y":[0,0,0]},"t":210,"s":[137,137,100]},{"t":239.00000973467,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":126,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[454.368,-278.924],[454.368,278.924],[424.368,308.924],[-424.368,308.924],[-454.368,278.924],[-454.368,-278.924],[-424.368,-308.924],[424.368,-308.924]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.84,"y":0},"t":150,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[214.368,-278.924],[214.368,278.924],[184.368,308.924],[-200.368,308.924],[-230.368,278.924],[-230.368,-278.924],[-200.368,-308.924],[184.368,-308.924]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":210,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[214.368,-278.924],[214.368,278.924],[184.368,308.924],[-200.368,308.924],[-230.368,278.924],[-230.368,-278.924],[-200.368,-308.924],[184.368,-308.924]],"c":true}]},{"t":239.00000973467,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[454.368,-278.924],[454.368,278.924],[424.368,308.924],[-424.368,308.924],[-454.368,278.924],[-454.368,-278.924],[-424.368,-308.924],[424.368,-308.924]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[14,-7],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Слой-фигура 18","sr":1,"ks":{"o":{"a":0,"k":50,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":229,"s":[0]},{"t":270.000010997325,"s":[5]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":0,"s":[540,823,0],"to":[0,-44.5,0],"ti":[0,44.5,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.973,"y":0},"t":30,"s":[540,556,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":0.16},"o":{"x":0.973,"y":0.973},"t":58,"s":[540,476,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.973,"y":0},"t":120,"s":[540,476,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0},"t":135,"s":[540,559,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":0.16},"o":{"x":0.167,"y":0.167},"t":166,"s":[342,565,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0},"t":200,"s":[342,565,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":229,"s":[539,612.5,0],"to":[0,0,0],"ti":[0,0,0]},{"t":270.000010997325,"s":[539,443,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.16,0.16,0.16],"y":[1,1,1]},"o":{"x":[0.84,0.84,0.84],"y":[0,0,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.232,0.232,0.232],"y":[0,0,0]},"t":24,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":58,"s":[91,91,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":119,"s":[91,91,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":166,"s":[124,124,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":200,"s":[124,124,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":229,"s":[50,50,100]},{"t":270.000010997325,"s":[89,89,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":122,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[454.368,-278.924],[454.368,278.924],[424.368,308.924],[-424.368,308.924],[-454.368,278.924],[-454.368,-278.924],[-424.368,-308.924],[424.368,-308.924]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.84,"y":0},"t":146,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[214.368,-278.924],[214.368,278.924],[184.368,308.924],[-200.368,308.924],[-230.368,278.924],[-230.368,-278.924],[-200.368,-308.924],[184.368,-308.924]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":206,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[214.368,-278.924],[214.368,278.924],[184.368,308.924],[-200.368,308.924],[-230.368,278.924],[-230.368,-278.924],[-200.368,-308.924],[184.368,-308.924]],"c":true}]},{"t":235.000009571746,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[454.368,-278.924],[454.368,278.924],[424.368,308.924],[-424.368,308.924],[-454.368,278.924],[-454.368,-278.924],[-424.368,-308.924],[424.368,-308.924]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":20,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[14,-7],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Слой-фигура 16","sr":1,"ks":{"o":{"a":0,"k":49,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":229,"s":[0]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":240,"s":[0]},{"t":281.000011445365,"s":[11]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":0,"s":[540,823,0],"to":[0,-44.5,0],"ti":[0,44.5,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.973,"y":0},"t":30,"s":[540,556,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":0.16},"o":{"x":0.973,"y":0.973},"t":69,"s":[540,396,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.973,"y":0},"t":120,"s":[540,396,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0},"t":135,"s":[540,587,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":0.16},"o":{"x":0.167,"y":0.167},"t":165,"s":[739,565,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0},"t":200,"s":[739,565,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":0.16},"o":{"x":0.66,"y":0.66},"t":229,"s":[538,612.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":240,"s":[538,612.5,0],"to":[0,0,0],"ti":[0,0,0]},{"t":281.000011445365,"s":[562,328,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.16,0.16,0.16],"y":[1,1,1]},"o":{"x":[0.84,0.84,0.84],"y":[0,0,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.232,0.232,0.232],"y":[0,0,0]},"t":24,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":69,"s":[82,82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":120,"s":[82,82,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":165,"s":[124,124,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":200,"s":[124,124,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":229,"s":[50,50,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":240,"s":[50,50,100]},{"t":281.000011445365,"s":[73,73,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":120,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[454.368,-278.924],[454.368,278.924],[424.368,308.924],[-424.368,308.924],[-454.368,278.924],[-454.368,-278.924],[-424.368,-308.924],[424.368,-308.924]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.84,"y":0},"t":144,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[214.368,-278.924],[214.368,278.924],[184.368,308.924],[-200.368,308.924],[-230.368,278.924],[-230.368,-278.924],[-200.368,-308.924],[184.368,-308.924]],"c":true}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":204,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[214.368,-278.924],[214.368,278.924],[184.368,308.924],[-200.368,308.924],[-230.368,278.924],[-230.368,-278.924],[-200.368,-308.924],[184.368,-308.924]],"c":true}]},{"t":233.000009490285,"s":[{"i":[[0,-16.569],[0,0],[16.569,0],[0,0],[0,16.569],[0,0],[-16.569,0],[0,0]],"o":[[0,0],[0,16.569],[0,0],[-16.569,0],[0,0],[0,-16.569],[0,0],[16.569,0]],"v":[[454.368,-278.924],[454.368,278.924],[424.368,308.924],[-424.368,308.924],[-454.368,278.924],[-454.368,-278.924],[-424.368,-308.924],[424.368,-308.924]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":20,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[14,-7],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0}]}],"fonts":{"list":[{"fName":"Roboto-Black","fFamily":"Roboto","fStyle":"Black","ascent":75},{"fName":"Roboto-Regular","fFamily":"Roboto","fStyle":"Regular","ascent":75}]},"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Total","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.34,"y":0.34},"o":{"x":0.66,"y":0.66},"t":0,"s":[555,540,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":41,"s":[555,540,0],"to":[0,6.667,0],"ti":[0,-6.667,0]},{"i":{"x":0.34,"y":0.34},"o":{"x":0.167,"y":0.167},"t":73,"s":[555,580,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0},"t":117,"s":[555,580,0],"to":[0,-6,0],"ti":[0,6,0]},{"i":{"x":0.34,"y":0.34},"o":{"x":0.167,"y":0.167},"t":168,"s":[555,544,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.34,"y":0.34},"o":{"x":0.167,"y":0.167},"t":197,"s":[555,544,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.167,"y":0},"t":251,"s":[555,544,0],"to":[0,8.667,0],"ti":[0,-8.667,0]},{"t":274.000011160249,"s":[555,596,0]}],"ix":2,"l":2},"a":{"a":0,"k":[555,540,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":41,"s":[89,89,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":73,"s":[105,105,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":117,"s":[105,105,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":143,"s":[91,91,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":166,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":197,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":251,"s":[89,89,100]},{"t":272.000011078787,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"w":1110,"h":1080,"ip":0,"op":3896.00015868733,"st":0,"bm":0}],"markers":[],"chars":[{"ch":"0","size":130,"style":"Black","w":57.91,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[4.329,5.241],[7.877,0],[4.313,-5.208],[0,-9.602],[0,0],[-4.33,-5.241],[-7.91,0],[-4.314,5.209],[0,9.603]],"o":[[0,-9.57],[-4.33,-5.241],[-7.878,0],[-4.314,5.209],[0,0],[0,9.538],[4.329,5.241],[7.845,0],[4.313,-5.208],[0,0]],"v":[[53.711,-41.992],[47.217,-64.209],[28.906,-72.07],[10.62,-64.258],[4.15,-42.041],[4.15,-29.053],[10.645,-6.885],[29.004,0.977],[47.241,-6.836],[53.711,-29.053]],"c":true},"ix":2},"nm":"0","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[1.334,-2.393],[2.799,0],[1.334,2.458],[0,5.306],[0,0],[-1.286,2.344],[-2.832,0],[-1.335,-2.522],[0,-5.11]],"o":[[-0.033,5.111],[-1.335,2.393],[-2.898,0],[-1.335,-2.457],[0,0],[0.098,-4.752],[1.286,-2.344],[2.897,0],[1.334,2.523],[0,0]],"v":[[37.256,-26.563],[35.205,-15.308],[29.004,-11.719],[22.656,-15.405],[20.654,-27.051],[20.654,-45.215],[22.729,-55.859],[28.906,-59.375],[35.254,-55.591],[37.256,-44.141]],"c":true},"ix":2},"nm":"0","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"0","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"M","size":51,"style":"Regular","w":87.3,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[8.252,-71.094],[8.252,0],[17.627,0],[17.627,-27.686],[16.699,-57.422],[39.99,0],[47.168,0],[70.508,-57.568],[69.629,-27.686],[69.629,0],[79.004,0],[79.004,-71.094],[66.846,-71.094],[43.604,-13.086],[20.361,-71.094]],"c":true},"ix":2},"nm":"M","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"M","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"Y","size":51,"style":"Regular","w":60.94,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[11.475,-71.094],[0.732,-71.094],[25.244,-26.514],[25.244,0],[34.619,0],[34.619,-26.514],[59.131,-71.094],[48.486,-71.094],[29.932,-35.4]],"c":true},"ix":2},"nm":"Y","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"Y","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"S","size":51,"style":"Regular","w":59.33,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.441,-1.904],[0,-3.483],[2.637,-2.018],[4.948,0],[3.174,2.49],[0,4.297],[0,0],[-2.295,-3.255],[-4.232,-1.871],[-4.883,0],[-4.492,3.467],[0,5.762],[1.611,2.67],[3.336,2.002],[5.908,1.663],[2.457,2.006],[0,2.903],[-2.588,2.039],[-4.623,0],[-2.734,-2.466],[0,-4.312],[0,0],[2.1,3.32],[3.825,1.888],[4.883,0],[4.475,-3.662],[0,-5.598],[-3.662,-3.369],[-8.041,-2.311]],"o":[[2.441,1.904],[0,3.484],[-2.637,2.019],[-5.306,0],[-3.174,-2.49],[0,0],[0,4.134],[2.295,3.255],[4.231,1.871],[7.52,0],[4.492,-3.467],[0,-3.613],[-1.611,-2.669],[-3.337,-2.002],[-5.908,-1.663],[-2.458,-2.005],[0,-3.619],[2.588,-2.039],[4.98,0],[2.734,2.467],[0,0],[0,-3.938],[-2.1,-3.32],[-3.825,-1.888],[-7.162,0],[-4.476,3.662],[0,4.948],[3.662,3.369],[6.413,1.855]],"v":[[42.48,-26.05],[46.143,-17.969],[42.188,-9.717],[30.811,-6.689],[18.091,-10.425],[13.33,-20.605],[3.906,-20.605],[7.349,-9.521],[17.139,-1.831],[30.811,0.977],[48.828,-4.224],[55.566,-18.066],[53.149,-27.49],[45.728,-34.497],[31.86,-39.995],[19.312,-45.498],[15.625,-52.86],[19.507,-61.346],[30.322,-64.404],[41.895,-60.705],[45.996,-50.537],[55.42,-50.537],[52.271,-61.426],[43.384,-69.238],[30.322,-72.07],[12.866,-66.577],[6.152,-52.686],[11.646,-40.21],[29.199,-31.689]],"c":true},"ix":2},"nm":"S","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"S","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"T","size":51,"style":"Regular","w":60.45,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[57.373,-71.094],[2.393,-71.094],[2.393,-63.428],[25.195,-63.428],[25.195,0],[34.521,0],[34.521,-63.428],[57.373,-63.428]],"c":true},"ix":2},"nm":"T","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"T","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"}]} ================================================ FILE: src/app/onboarding/components/IntroductionSteps/IntroductionSteps.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import Lottie from "react-lottie-player" import React from "react" import styled, { keyframes } from "styled-components" import { StepProgressBar } from "../../../ui-kit/components/StepProgressBar/StepProgressBar" import { GhostButton } from "../../../ui-kit/components/Button/GhostButton" import { bg1 } from "../../../ui-kit/colors" import { Heading2, Small } from "../../../ui-kit/typography" import { LightButton } from "../../../ui-kit/components/Button/LightButton" import { BrandButton } from "../../../ui-kit/components/Button/BrandButton" import { ViewContainer } from "../../../navigation/components/ViewContainer/ViewContainer" const Container = styled(ViewContainer)` background: ${bg1}; display: flex; flex-direction: column; justify-content: flex-start; -webkit-app-region: drag; ` const Steps = styled.div` height: 72px; display: flex; align-items: center; justify-content: center; ` const fadeIn = keyframes` from { opacity: 0; } to { opacity: 1; } ` const Title = styled.h1` margin: 0; text-align: center; font-weight: bold; font-size: 24px; letter-spacing: 1px; color: #fff; animation: ${fadeIn} 0.4s ease-in-out; ` const Animation = styled.div` background: #f4f4fc11; border-radius: 50%; width: 256px; height: 256px; margin: 0 auto; margin-top: 17px; ` const Subtitle = styled(Heading2)` margin-top: 18px; text-align: center; color: #fff; animation: ${fadeIn} 0.4s ease-in-out; ` const Description = styled(Small)` height: 56px; color: #fff; opacity: 0.7; display: flex; align-items: center; justify-content: center; padding: 0 50px; ` const Actions = styled.div` height: 35px; margin-top: auto; display: flex; flex-direction: row; align-items: center; justify-content: center; ` const BackButton = styled(LightButton)` margin-right: 20px; ` const NextButton = styled(BrandButton)` min-width: 134px; box-shadow: inset 0 0.5px 1px #ff25a1, 2px 2px 3px rgba(0, 0, 0, 0.3); ` const SkipContainer = styled.div` height: 57px; display: flex; flex-direction: row; align-items: center; justify-content: center; ` export interface IntroductionStepProps { index: number title: React.ReactNode subtitle: React.ReactNode description: React.ReactNode animation: object onBack?: () => void nextText?: React.ReactNode onNext?: () => void onSkip?: () => void } export const IntroductionStep: React.FC = (props) => ( {props.title} {props.subtitle} {props.description} {!!props.onBack && Back} {!!props.onNext && {props.nextText ?? "Next"}} {!!props.onSkip && Skip} ) ================================================ FILE: src/app/onboarding/components/IntroductionSteps/Step1.tsx ================================================ /** * Copyright (c) 2022 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { useNavigate } from "react-router-dom" import { observer } from "mobx-react-lite" import { locations } from "../../../navigation/locations" import { useStores } from "../../../store" import { IntroductionStep } from "./IntroductionSteps" import animationNetwork from "./animation_network.json" export const Step1: React.FC = observer(function Step1() { const { onboarding } = useStores() const navigate = useNavigate() return ( navigate(locations.onboardingIntro2)} onSkip={() => onboarding.onboardingStepsComplete()} /> ) }) ================================================ FILE: src/app/onboarding/components/IntroductionSteps/Step2.tsx ================================================ /** * Copyright (c) 2022 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { useNavigate } from "react-router-dom" import { observer } from "mobx-react-lite" import { locations } from "../../../navigation/locations" import { useStores } from "../../../store" import { IntroductionStep } from "./IntroductionSteps" import animationPrivacy from "./animation_privacy.json" export const Step2: React.FC = observer(function Step2() { const { onboarding } = useStores() const navigate = useNavigate() return ( Now everyone says no logs, but do they mean no logs? Don't trust. Verify.} animation={animationPrivacy} onBack={() => navigate(-1)} onNext={() => navigate(locations.onboardingIntro3)} onSkip={() => onboarding.onboardingStepsComplete()} /> ) }) ================================================ FILE: src/app/onboarding/components/IntroductionSteps/Step3.tsx ================================================ /** * Copyright (c) 2022 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { useNavigate } from "react-router-dom" import { observer } from "mobx-react-lite" import { locations } from "../../../navigation/locations" import { useStores } from "../../../store" import { IntroductionStep } from "./IntroductionSteps" import animationPayAsYouGo from "./animation_payasyougo.json" export const Step3: React.FC = observer(function Step3() { const { onboarding } = useStores() const navigate = useNavigate() return ( Using our micropayments system, Hermes Protocol, you only pay for the gigabytes you actually use.
No subscriptions, no monthly fees – just minute-by-minute payments. } animation={animationPayAsYouGo} onBack={() => navigate(-1)} onNext={() => navigate(locations.onboardingIntro4)} onSkip={() => onboarding.onboardingStepsComplete()} /> ) }) ================================================ FILE: src/app/onboarding/components/IntroductionSteps/Step4.tsx ================================================ /** * Copyright (c) 2022 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { useNavigate } from "react-router-dom" import { observer } from "mobx-react-lite" import { useStores } from "../../../store" import { IntroductionStep } from "./IntroductionSteps" import animationCrypto from "./animation_crypto.json" export const Step4: React.FC = observer(function Step4() { const { onboarding } = useStores() const navigate = useNavigate() return ( navigate(-1)} nextText="Setup my account" onNext={() => onboarding.onboardingStepsComplete()} /> ) }) ================================================ FILE: src/app/onboarding/components/IntroductionSteps/animation_crypto.json ================================================ { "v": "5.7.4", "fr": 29.9700012207031, "ip": 0, "op": 212.000008634937, "w": 1000, "h": 1400, "nm": "OB_33", "ddd": 0, "assets": [ ], "layers": [ { "ddd": 0, "ind": 1, "ty": 4, "nm": "Слой-фигура 6", "sr": 1, "ks": { "o": { "a": 0, "k": 30, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 0, "s": [ 424, 1204, 0 ], "to": [ 80, -23.333, 0 ], "ti": [ -80, 23.333, 0 ] }, { "i": { "x": 0.16, "y": 0.16 }, "o": { "x": 0.84, "y": 0.84 }, "t": 30, "s": [ 904, 1064, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 68, "s": [ 904, 1064, 0 ], "to": [ -24, -118.667, 0 ], "ti": [ 24, 118.667, 0 ] }, { "i": { "x": 0.16, "y": 0.16 }, "o": { "x": 0.84, "y": 0.84 }, "t": 89, "s": [ 760, 352, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 129, "s": [ 760, 352, 0 ], "to": [ -112.833, 46, 0 ], "ti": [ 112.833, -46, 0 ] }, { "i": { "x": 0.16, "y": 0.16 }, "o": { "x": 0.84, "y": 0.84 }, "t": 150, "s": [ 83, 628, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 180, "s": [ 83, 628, 0 ], "to": [ 56.833, 96, 0 ], "ti": [ -56.833, -96, 0 ] }, { "t": 210.000008553475, "s": [ 424, 1204, 0 ] } ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ -260, -308, 0 ], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [ 100, 100, 100 ], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "d": 1, "ty": "el", "s": { "a": 0, "k": [ 47, 47 ], "ix": 2 }, "p": { "a": 0, "k": [ 0, 0 ], "ix": 3 }, "nm": "Контур эллипса 1", "mn": "ADBE Vector Shape - Ellipse", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 19, "ix": 5 }, "lc": 1, "lj": 1, "ml": 4, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ -260, -308 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Эллипс 1", "np": 3, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 2, "ty": 4, "nm": "Слой-фигура 5", "sr": 1, "ks": { "o": { "a": 0, "k": 30, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 0, "s": [ 60, 848, 0 ], "to": [ 88, 43.333, 0 ], "ti": [ -88, -43.333, 0 ] }, { "i": { "x": 0.16, "y": 0.16 }, "o": { "x": 0.84, "y": 0.84 }, "t": 30, "s": [ 588, 1108, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 60, "s": [ 588, 1108, 0 ], "to": [ 46, -79.333, 0 ], "ti": [ -46, 79.333, 0 ] }, { "i": { "x": 0.16, "y": 0.16 }, "o": { "x": 0.84, "y": 0.84 }, "t": 89, "s": [ 864, 632, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 120, "s": [ 864, 632, 0 ], "to": [ -62.833, -64.667, 0 ], "ti": [ 62.833, 64.667, 0 ] }, { "i": { "x": 0.16, "y": 0.16 }, "o": { "x": 0.84, "y": 0.84 }, "t": 158, "s": [ 487, 244, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 180, "s": [ 487, 244, 0 ], "to": [ -71.167, 100.667, 0 ], "ti": [ 71.167, -100.667, 0 ] }, { "t": 210.000008553475, "s": [ 60, 848, 0 ] } ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ -260, -308, 0 ], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [ 100, 100, 100 ], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "d": 1, "ty": "el", "s": { "a": 0, "k": [ 47, 47 ], "ix": 2 }, "p": { "a": 0, "k": [ 0, 0 ], "ix": 3 }, "nm": "Контур эллипса 1", "mn": "ADBE Vector Shape - Ellipse", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 19, "ix": 5 }, "lc": 1, "lj": 1, "ml": 4, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ -260, -308 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Эллипс 1", "np": 3, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 3, "ty": 4, "nm": "Кривые Слой 1", "sr": 1, "ks": { "o": { "a": 0, "k": 70, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 0, "s": [ 0 ] }, { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 31, "s": [ 122 ] }, { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 180, "s": [ 122 ] }, { "t": 210.000008553475, "s": [ 0 ] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 0, "s": [ 494.113, 704.38, 0 ], "to": [ -64.509, -39.032, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 31, "s": [ 107.057, 470.19, 0 ], "to": [ 45.509, 42.032, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 180, "s": [ 107.057, 470.19, 0 ], "to": [ 0, 0, 0 ], "ti": [ -64.509, -39.032, 0 ] }, { "t": 210.000008553475, "s": [ 494.113, 704.38, 0 ] } ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ 258.415, 258.415, 0 ], "ix": 1, "l": 2 }, "s": { "a": 1, "k": [ { "i": { "x": [ 0.16, 0.16, 0.16 ], "y": [ 1, 1, 1 ] }, "o": { "x": [ 0.84, 0.84, 0.84 ], "y": [ 0, 0, 0 ] }, "t": 0, "s": [ 100, 100, 100 ] }, { "i": { "x": [ 0.16, 0.16, 0.16 ], "y": [ 1, 1, 1 ] }, "o": { "x": [ 0.84, 0.84, 0.84 ], "y": [ 0, 0, 0 ] }, "t": 31, "s": [ 0, 0, 100 ] }, { "i": { "x": [ 0.16, 0.16, 0.16 ], "y": [ 1, 1, 1 ] }, "o": { "x": [ 0.84, 0.84, 0.84 ], "y": [ 0, 0, 0 ] }, "t": 180, "s": [ 0, 0, 100 ] }, { "t": 210.000008553475, "s": [ 100, 100, 100 ] } ], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ], "v": [ [ -17.848, 25.139 ], [ 6.145, 17.617 ], [ 17.848, -25.139 ], [ -6.707, -18.108 ] ], "c": false }, "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 20, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 291.287, 244.314 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 2", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ], "v": [ [ 18.148, -25.139 ], [ -6.443, -17.616 ], [ -18.148, 25.139 ], [ 7.32, 16.941 ] ], "c": false }, "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 20, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 181.414, 284.788 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 3", "np": 2, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ], "v": [ [ -80.824, -12.922 ], [ -95.781, 45.198 ], [ 83.362, 45.198 ], [ 95.781, -4.961 ], [ -6.608, -4.483 ], [ 3.881, -45.198 ] ], "c": false }, "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 20, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 269.557, 314.651 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 4", "np": 2, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ], "v": [ [ 32.464, 22.27 ], [ 52.554, -55.713 ], [ -23.881, -55.713 ], [ -52.554, 55.713 ] ], "c": false }, "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 20, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 252.115, 203.936 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 5", "np": 2, "cix": 2, "bm": 0, "ix": 4, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 4, "ty": 4, "nm": "Слой-фигура 4", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 0, "s": [ 500, 700, 0 ], "to": [ -65.491, -38.302, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 0.16 }, "o": { "x": 0.84, "y": 0.84 }, "t": 31, "s": [ 107.057, 470.19, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 60, "s": [ 107.057, 470.19, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 0.16 }, "o": { "x": 0.603, "y": 0.603 }, "t": 89, "s": [ 123.057, 794.19, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.603, "y": 0 }, "t": 120, "s": [ 123.057, 794.19, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.025, "y": 0.025 }, "o": { "x": 0.84, "y": 0.84 }, "t": 150, "s": [ 107.057, 470.19, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 180, "s": [ 107.057, 470.19, 0 ], "to": [ 46.491, 41.302, 0 ], "ti": [ -65.491, -38.302, 0 ] }, { "t": 210.000008553475, "s": [ 500, 700, 0 ] } ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ -260, -308, 0 ], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [ 100, 100, 100 ], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "d": 1, "ty": "el", "s": { "a": 1, "k": [ { "i": { "x": [ 0.16, 0.16 ], "y": [ 1, 1 ] }, "o": { "x": [ 0.84, 0.84 ], "y": [ 0, 0 ] }, "t": 0, "s": [ 442, 442 ] }, { "i": { "x": [ 0.16, 0.16 ], "y": [ 1, 1 ] }, "o": { "x": [ 0.84, 0.84 ], "y": [ 0, 0 ] }, "t": 31, "s": [ 47, 47 ] }, { "i": { "x": [ 0.16, 0.16 ], "y": [ 1, 1 ] }, "o": { "x": [ 0.84, 0.84 ], "y": [ 0, 0 ] }, "t": 60, "s": [ 47, 47 ] }, { "i": { "x": [ 0.16, 0.16 ], "y": [ 1, 1 ] }, "o": { "x": [ 0.84, 0.84 ], "y": [ 0, 0 ] }, "t": 180, "s": [ 47, 47 ] }, { "t": 210.000008553475, "s": [ 442, 442 ] } ], "ix": 2 }, "p": { "a": 0, "k": [ 0, 0 ], "ix": 3 }, "nm": "Контур эллипса 1", "mn": "ADBE Vector Shape - Ellipse", "hd": false }, { "ty": "st", "c": { "a": 1, "k": [ { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 14, "s": [ 0.839215695858, 0.121568627656, 0.521568655968, 1 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 30, "s": [ 1, 1, 1, 1 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 180, "s": [ 1, 1, 1, 1 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 197, "s": [ 0.839215695858, 0.121568627656, 0.521568655968, 1 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 255, "s": [ 0.839215695858, 0.121568627656, 0.521568655968, 1 ] }, { "t": 271.000011038056, "s": [ 1, 1, 1, 1 ] } ], "ix": 3 }, "o": { "a": 1, "k": [ { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 14, "s": [ 100 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 30, "s": [ 50 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 180, "s": [ 50 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 197, "s": [ 100 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 255, "s": [ 100 ] }, { "t": 271.000011038056, "s": [ 50 ] } ], "ix": 4 }, "w": { "a": 0, "k": 19, "ix": 5 }, "lc": 1, "lj": 1, "ml": 4, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ -260, -308 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Эллипс 1", "np": 3, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 5, "ty": 4, "nm": "Кривые Слой 4", "sr": 1, "ks": { "o": { "a": 0, "k": 70, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 0, "s": [ 122 ] }, { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 31, "s": [ 0 ] }, { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 60, "s": [ 0 ] }, { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 91, "s": [ 122 ] }, { "t": 211.000008594206, "s": [ 122 ] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 0, "s": [ 869, 918, 0 ], "to": [ -61.5, -36.333, 0 ], "ti": [ 61.5, 36.333, 0 ] }, { "i": { "x": 0.16, "y": 0.16 }, "o": { "x": 0.84, "y": 0.84 }, "t": 31, "s": [ 500, 700, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 60, "s": [ 500, 700, 0 ], "to": [ -40.667, 64.667, 0 ], "ti": [ -61.5, -36.333, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 91, "s": [ 256, 1088, 0 ], "to": [ 61.5, 36.333, 0 ], "ti": [ -102.167, 28.333, 0 ] }, { "t": 211.000008594206, "s": [ 869, 918, 0 ] } ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ 258.415, 258.415, 0 ], "ix": 1, "l": 2 }, "s": { "a": 1, "k": [ { "i": { "x": [ 0.16, 0.16, 0.16 ], "y": [ 1, 1, 1 ] }, "o": { "x": [ 0.84, 0.84, 0.84 ], "y": [ 0, 0, 0 ] }, "t": 0, "s": [ 0, 0, 100 ] }, { "i": { "x": [ 0.16, 0.16, 0.16 ], "y": [ 1, 1, 1 ] }, "o": { "x": [ 0.84, 0.84, 0.84 ], "y": [ 0, 0, 0 ] }, "t": 31, "s": [ 100, 100, 100 ] }, { "i": { "x": [ 0.16, 0.16, 0.16 ], "y": [ 1, 1, 1 ] }, "o": { "x": [ 0.84, 0.84, 0.84 ], "y": [ 0, 0, 0 ] }, "t": 60, "s": [ 100, 100, 100 ] }, { "i": { "x": [ 0.16, 0.16, 0.16 ], "y": [ 1, 1, 1 ] }, "o": { "x": [ 0.84, 0.84, 0.84 ], "y": [ 0, 0, 0 ] }, "t": 91, "s": [ 0, 0, 100 ] }, { "t": 211.000008594206, "s": [ 0, 0, 100 ] } ], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 20, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 258.415, 258.416 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 1", "np": 1, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [ 17.255, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, -17.255 ] ], "o": [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 17.255, 0 ], [ 0, 17.254 ] ], "v": [ [ 17.5, -17.847 ], [ -48.794, -17.847 ], [ -48.794, -80.431 ], [ 17.5, -80.431 ], [ 48.792, -49.138 ] ], "c": true }, "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ind": 1, "ty": "sh", "ix": 2, "ks": { "a": 0, "k": { "i": [ [ 17.255, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, -17.256 ] ], "o": [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 17.255, 0 ], [ 0, 17.255 ] ], "v": [ [ 17.5, 80.431 ], [ -48.794, 80.431 ], [ -48.794, 17.846 ], [ 17.5, 17.846 ], [ 48.792, 49.139 ] ], "c": true }, "ix": 2 }, "nm": "Контур 2", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ind": 2, "ty": "sh", "ix": 3, "ks": { "a": 0, "k": { "i": [ [ 0, 19.401 ], [ 26.663, 8.841 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 29.591 ], [ 13.226, 12.244 ] ], "o": [ [ 0, -29.591 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 26.663, -8.84 ], [ 0, -19.402 ], [ 13.226, -12.245 ] ], "v": [ [ 84.484, -49.138 ], [ 38.526, -112.725 ], [ 38.526, -140.789 ], [ 2.834, -140.789 ], [ 2.834, -116.124 ], [ -18.921, -116.124 ], [ -18.921, -140.789 ], [ -54.612, -140.789 ], [ -54.612, -116.124 ], [ -84.484, -116.124 ], [ -84.484, -17.847 ], [ -84.484, 17.846 ], [ -84.484, 116.124 ], [ -54.612, 116.124 ], [ -54.612, 140.79 ], [ -18.921, 140.79 ], [ -18.921, 116.124 ], [ 2.834, 116.124 ], [ 2.834, 140.79 ], [ 38.526, 140.79 ], [ 38.526, 112.724 ], [ 84.484, 49.139 ], [ 62.959, 0 ] ], "c": true }, "ix": 2 }, "nm": "Контур 3", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "mm", "mm": 1, "nm": "Объединить контуры 1", "mn": "ADBE Vector Filter - Merge", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 20, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 258.415, 258.416 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 2", "np": 5, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 6, "ty": 4, "nm": "Слой-фигура 3", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 0, "s": [ 869, 918, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 0.16 }, "o": { "x": 0.84, "y": 0.84 }, "t": 31, "s": [ 500, 700, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 60, "s": [ 500, 700, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 0.16 }, "o": { "x": 0.84, "y": 0.84 }, "t": 91, "s": [ 256, 1088, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 120, "s": [ 256, 1088, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 0.16 }, "o": { "x": 0.84, "y": 0.84 }, "t": 150, "s": [ 549.319, 1201.659, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 180, "s": [ 549.319, 1201.659, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "t": 211.000008594206, "s": [ 869, 918, 0 ] } ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ -260, -308, 0 ], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [ 100, 100, 100 ], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "d": 1, "ty": "el", "s": { "a": 1, "k": [ { "i": { "x": [ 0.16, 0.16 ], "y": [ 1, 1 ] }, "o": { "x": [ 0.84, 0.84 ], "y": [ 0, 0 ] }, "t": 0, "s": [ 47, 47 ] }, { "i": { "x": [ 0.16, 0.16 ], "y": [ 1, 1 ] }, "o": { "x": [ 0.84, 0.84 ], "y": [ 0, 0 ] }, "t": 31, "s": [ 442, 442 ] }, { "i": { "x": [ 0.16, 0.16 ], "y": [ 1, 1 ] }, "o": { "x": [ 0.84, 0.84 ], "y": [ 0, 0 ] }, "t": 60, "s": [ 442, 442 ] }, { "i": { "x": [ 0.16, 0.16 ], "y": [ 1, 1 ] }, "o": { "x": [ 0.84, 0.84 ], "y": [ 0, 0 ] }, "t": 91, "s": [ 47, 47 ] }, { "i": { "x": [ 0.16, 0.16 ], "y": [ 1, 1 ] }, "o": { "x": [ 0.84, 0.84 ], "y": [ 0, 0 ] }, "t": 120, "s": [ 47, 47 ] }, { "i": { "x": [ 0.16, 0.16 ], "y": [ 1, 1 ] }, "o": { "x": [ 0.84, 0.84 ], "y": [ 0, 0 ] }, "t": 150, "s": [ 47, 47 ] }, { "i": { "x": [ 0.16, 0.16 ], "y": [ 1, 1 ] }, "o": { "x": [ 0.84, 0.84 ], "y": [ 0, 0 ] }, "t": 180, "s": [ 47, 47 ] }, { "t": 211.000008594206, "s": [ 47, 47 ] } ], "ix": 2 }, "p": { "a": 0, "k": [ 0, 0 ], "ix": 3 }, "nm": "Контур эллипса 1", "mn": "ADBE Vector Shape - Ellipse", "hd": false }, { "ty": "st", "c": { "a": 1, "k": [ { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 0, "s": [ 1, 1, 1, 1 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 17, "s": [ 0.839215695858, 0.121568627656, 0.521568655968, 1 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 75, "s": [ 0.839215695858, 0.121568627656, 0.521568655968, 1 ] }, { "t": 91.000003706506, "s": [ 1, 1, 1, 1 ] } ], "ix": 3 }, "o": { "a": 1, "k": [ { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 0, "s": [ 50 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 17, "s": [ 100 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 75, "s": [ 100 ] }, { "t": 91.000003706506, "s": [ 50 ] } ], "ix": 4 }, "w": { "a": 0, "k": 19, "ix": 5 }, "lc": 1, "lj": 1, "ml": 4, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ -260, -308 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Эллипс 1", "np": 3, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 7, "ty": 4, "nm": "Кривые D", "sr": 1, "ks": { "o": { "a": 0, "k": 70, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 60, "s": [ 122 ] }, { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 90, "s": [ 0 ] }, { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 120, "s": [ 0 ] }, { "t": 150.000006109625, "s": [ 122 ] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 60, "s": [ 819.66, 569.385, 0 ], "to": [ -53.167, 22.833, 0 ], "ti": [ 53.167, -22.833, 0 ] }, { "i": { "x": 0.16, "y": 0.16 }, "o": { "x": 0.84, "y": 0.84 }, "t": 90, "s": [ 500.66, 706.385, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 120, "s": [ 500.66, 706.385, 0 ], "to": [ 40.5, 45, 0 ], "ti": [ -40.5, -45, 0 ] }, { "t": 150.000006109625, "s": [ 743.66, 976.385, 0 ] } ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ 960, 960, 0 ], "ix": 1, "l": 2 }, "s": { "a": 1, "k": [ { "i": { "x": [ 0.16, 0.16, 0.16 ], "y": [ 1, 1, 1 ] }, "o": { "x": [ 0.84, 0.84, 0.84 ], "y": [ 0, 0, 0 ] }, "t": 60, "s": [ 0, 0, 100 ] }, { "i": { "x": [ 0.16, 0.16, 0.16 ], "y": [ 1, 1, 1 ] }, "o": { "x": [ 0.84, 0.84, 0.84 ], "y": [ 0, 0, 0 ] }, "t": 90, "s": [ 30, 30, 100 ] }, { "i": { "x": [ 0.16, 0.16, 0.16 ], "y": [ 1, 1, 1 ] }, "o": { "x": [ 0.84, 0.84, 0.84 ], "y": [ 0, 0, 0 ] }, "t": 120, "s": [ 30, 30, 100 ] }, { "t": 150.000006109625, "s": [ 0, 0, 100 ] } ], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ] ], "v": [ [ 491, 1031.895 ], [ 1491, 1031.895 ] ], "c": false }, "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 87, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 0, 0 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ] ], "v": [ [ 491, 840.718 ], [ 1491, 840.718 ] ], "c": false }, "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 87, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 0, 0 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 2", "np": 2, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [ 221.609, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 221.61 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 221.609, 0 ], [ 0, 0 ], [ 0, -221.61 ] ], "v": [ [ -33.613, -401.26 ], [ -367.647, -401.26 ], [ -367.647, 401.26 ], [ -33.613, 401.26 ], [ 367.647, 0 ], [ 367.647, 0 ] ], "c": true }, "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 87, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 1007.807, 945.76 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 3", "np": 2, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 9, "ty": 4, "nm": "Слой-фигура 2", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 0, "s": [ 811, 703, 0 ], "to": [ 1.333, -23.333, 0 ], "ti": [ -1.333, 23.333, 0 ] }, { "i": { "x": 0.16, "y": 0.16 }, "o": { "x": 0.84, "y": 0.84 }, "t": 30, "s": [ 819, 563, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 60, "s": [ 819, 563, 0 ], "to": [ -53.167, 22.833, 0 ], "ti": [ 53.167, -22.833, 0 ] }, { "i": { "x": 0.16, "y": 0.16 }, "o": { "x": 0.84, "y": 0.84 }, "t": 90, "s": [ 500, 700, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 120, "s": [ 500, 700, 0 ], "to": [ 40.5, 45, 0 ], "ti": [ -40.5, -45, 0 ] }, { "i": { "x": 0.16, "y": 0.16 }, "o": { "x": 0.84, "y": 0.84 }, "t": 150, "s": [ 743, 970, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 180, "s": [ 743, 970, 0 ], "to": [ 11.333, -44.5, 0 ], "ti": [ -11.333, 44.5, 0 ] }, { "t": 210.000008553475, "s": [ 811, 703, 0 ] } ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ -260, -308, 0 ], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [ 100, 100, 100 ], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "d": 1, "ty": "el", "s": { "a": 1, "k": [ { "i": { "x": [ 0.16, 0.16 ], "y": [ 1, 1 ] }, "o": { "x": [ 0.84, 0.84 ], "y": [ 0, 0 ] }, "t": 0, "s": [ 47, 47 ] }, { "i": { "x": [ 0.16, 0.16 ], "y": [ 1, 1 ] }, "o": { "x": [ 0.84, 0.84 ], "y": [ 0, 0 ] }, "t": 30, "s": [ 47, 47 ] }, { "i": { "x": [ 0.16, 0.16 ], "y": [ 1, 1 ] }, "o": { "x": [ 0.84, 0.84 ], "y": [ 0, 0 ] }, "t": 60, "s": [ 47, 47 ] }, { "i": { "x": [ 0.16, 0.16 ], "y": [ 1, 1 ] }, "o": { "x": [ 0.84, 0.84 ], "y": [ 0, 0 ] }, "t": 90, "s": [ 442, 442 ] }, { "i": { "x": [ 0.16, 0.16 ], "y": [ 1, 1 ] }, "o": { "x": [ 0.84, 0.84 ], "y": [ 0, 0 ] }, "t": 120, "s": [ 442, 442 ] }, { "i": { "x": [ 0.16, 0.16 ], "y": [ 1, 1 ] }, "o": { "x": [ 0.84, 0.84 ], "y": [ 0, 0 ] }, "t": 150, "s": [ 47, 47 ] }, { "i": { "x": [ 0.16, 0.16 ], "y": [ 1, 1 ] }, "o": { "x": [ 0.84, 0.84 ], "y": [ 0, 0 ] }, "t": 180, "s": [ 47, 47 ] }, { "t": 210.000008553475, "s": [ 47, 47 ] } ], "ix": 2 }, "p": { "a": 0, "k": [ 0, 0 ], "ix": 3 }, "nm": "Контур эллипса 1", "mn": "ADBE Vector Shape - Ellipse", "hd": false }, { "ty": "st", "c": { "a": 1, "k": [ { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 60, "s": [ 1, 1, 1, 1 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 77, "s": [ 0.839215695858, 0.121568627656, 0.521568655968, 1 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 135, "s": [ 0.839215695858, 0.121568627656, 0.521568655968, 1 ] }, { "t": 151.000006150356, "s": [ 1, 1, 1, 1 ] } ], "ix": 3 }, "o": { "a": 1, "k": [ { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 60, "s": [ 50 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 77, "s": [ 100 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 135, "s": [ 100 ] }, { "t": 151.000006150356, "s": [ 50 ] } ], "ix": 4 }, "w": { "a": 0, "k": 19, "ix": 5 }, "lc": 1, "lj": 1, "ml": 4, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ -260, -308 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Эллипс 1", "np": 3, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 10, "ty": 4, "nm": "Кривые Слой 3", "sr": 1, "ks": { "o": { "a": 0, "k": 70, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 120, "s": [ 122 ] }, { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 150, "s": [ 0 ] }, { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 180, "s": [ 0 ] }, { "t": 210.000008553475, "s": [ 122 ] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 120, "s": [ 615.722, 254.652, 0 ], "to": [ -19.5, 74, 0 ], "ti": [ 19.5, -74, 0 ] }, { "i": { "x": 0.16, "y": 0.16 }, "o": { "x": 0.84, "y": 0.84 }, "t": 150, "s": [ 498.722, 698.652, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 180, "s": [ 498.722, 698.652, 0 ], "to": [ 19.5, -74, 0 ], "ti": [ -19.5, 74, 0 ] }, { "t": 210.000008553475, "s": [ 615.722, 254.652, 0 ] } ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ 258.415, 258.415, 0 ], "ix": 1, "l": 2 }, "s": { "a": 1, "k": [ { "i": { "x": [ 0.16, 0.16, 0.16 ], "y": [ 1, 1, 1 ] }, "o": { "x": [ 0.84, 0.84, 0.84 ], "y": [ 0, 0, 0 ] }, "t": 120, "s": [ 0, 0, 100 ] }, { "i": { "x": [ 0.16, 0.16, 0.16 ], "y": [ 1, 1, 1 ] }, "o": { "x": [ 0.84, 0.84, 0.84 ], "y": [ 0, 0, 0 ] }, "t": 150, "s": [ 100, 100, 100 ] }, { "i": { "x": [ 0.16, 0.16, 0.16 ], "y": [ 1, 1, 1 ] }, "o": { "x": [ 0.84, 0.84, 0.84 ], "y": [ 0, 0, 0 ] }, "t": 180, "s": [ 100, 100, 100 ] }, { "t": 210.000008553475, "s": [ 0, 0, 100 ] } ], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ], "v": [ [ 48.998, -69.856 ], [ -48.998, 69.856 ], [ -48.998, -12.095 ] ], "c": true }, "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 20, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 309.24, 360.051 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 2", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ], "v": [ [ -48.998, -49.444 ], [ 48.998, -5.848 ], [ -48.751, 49.444 ] ], "c": true }, "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 20, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 308.143, 257.89 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 3", "np": 2, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ], "v": [ [ -48.998, -81.211 ], [ 48.998, 81.211 ], [ -48.998, 37.615 ] ], "c": true }, "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 20, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 308.143, 170.831 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 4", "np": 2, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ], "v": [ [ -48.998, -69.856 ], [ 48.998, 69.856 ], [ 48.998, -12.095 ] ], "c": true }, "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 20, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 211.244, 360.051 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 5", "np": 2, "cix": 2, "bm": 0, "ix": 4, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ], "v": [ [ 48.998, -49.444 ], [ -48.998, -5.848 ], [ 48.751, 49.444 ] ], "c": true }, "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 20, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 210.147, 257.89 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 6", "np": 2, "cix": 2, "bm": 0, "ix": 5, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ], "v": [ [ 48.998, -81.211 ], [ -48.998, 81.211 ], [ 48.998, 37.615 ] ], "c": true }, "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 20, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 210.147, 170.831 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 7", "np": 2, "cix": 2, "bm": 0, "ix": 6, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 11, "ty": 4, "nm": "Слой-фигура 1", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 0, "s": [ 617, 256, 0 ], "to": [ -40.667, -15.333, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.792, "y": 0.792 }, "o": { "x": 0.481, "y": 0.481 }, "t": 29, "s": [ 373, 164, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": -0.025, "y": 1 }, "o": { "x": 0.443, "y": 0 }, "t": 60, "s": [ 373, 164, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": -0.025, "y": -0.025 }, "o": { "x": 0.84, "y": 0.84 }, "t": 90, "s": [ 617, 256, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 120, "s": [ 617, 256, 0 ], "to": [ -19.5, 74, 0 ], "ti": [ 19.5, -74, 0 ] }, { "i": { "x": 0.16, "y": 0.16 }, "o": { "x": 0.84, "y": 0.84 }, "t": 150, "s": [ 500, 700, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 180, "s": [ 500, 700, 0 ], "to": [ 19.5, -74, 0 ], "ti": [ -19.5, 74, 0 ] }, { "t": 210.000008553475, "s": [ 617, 256, 0 ] } ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ -260, -308, 0 ], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [ 100, 100, 100 ], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "d": 1, "ty": "el", "s": { "a": 1, "k": [ { "i": { "x": [ 0.16, 0.16 ], "y": [ 1, 1 ] }, "o": { "x": [ 0.84, 0.84 ], "y": [ 0, 0 ] }, "t": 0, "s": [ 47, 47 ] }, { "i": { "x": [ 0.16, 0.16 ], "y": [ 1, 1 ] }, "o": { "x": [ 0.84, 0.84 ], "y": [ 0, 0 ] }, "t": 29, "s": [ 47, 47 ] }, { "i": { "x": [ 0.16, 0.16 ], "y": [ 1, 1 ] }, "o": { "x": [ 0.84, 0.84 ], "y": [ 0, 0 ] }, "t": 90, "s": [ 47, 47 ] }, { "i": { "x": [ 0.16, 0.16 ], "y": [ 1, 1 ] }, "o": { "x": [ 0.84, 0.84 ], "y": [ 0, 0 ] }, "t": 120, "s": [ 47, 47 ] }, { "i": { "x": [ 0.16, 0.16 ], "y": [ 1, 1 ] }, "o": { "x": [ 0.84, 0.84 ], "y": [ 0, 0 ] }, "t": 150, "s": [ 442, 442 ] }, { "i": { "x": [ 0.16, 0.16 ], "y": [ 1, 1 ] }, "o": { "x": [ 0.84, 0.84 ], "y": [ 0, 0 ] }, "t": 180, "s": [ 442, 442 ] }, { "t": 210.000008553475, "s": [ 47, 47 ] } ], "ix": 2 }, "p": { "a": 0, "k": [ 0, 0 ], "ix": 3 }, "nm": "Контур эллипса 1", "mn": "ADBE Vector Shape - Ellipse", "hd": false }, { "ty": "st", "c": { "a": 1, "k": [ { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 120, "s": [ 1, 1, 1, 1 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 137, "s": [ 0.839215695858, 0.121568627656, 0.521568655968, 1 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 195, "s": [ 0.839215695858, 0.121568627656, 0.521568655968, 1 ] }, { "t": 211.000008594206, "s": [ 1, 1, 1, 1 ] } ], "ix": 3 }, "o": { "a": 1, "k": [ { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 120, "s": [ 50 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 137, "s": [ 100 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 195, "s": [ 100 ] }, { "t": 211.000008594206, "s": [ 50 ] } ], "ix": 4 }, "w": { "a": 0, "k": 19, "ix": 5 }, "lc": 1, "lj": 1, "ml": 4, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ -260, -308 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Эллипс 1", "np": 3, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 } ], "markers": [ ] } ================================================ FILE: src/app/onboarding/components/IntroductionSteps/animation_network.json ================================================ { "v": "5.7.4", "fr": 29.9700012207031, "ip": 0, "op": 155.000006313279, "w": 1000, "h": 1400, "nm": "OB_1", "ddd": 0, "assets": [ { "id": "comp_0", "layers": [ { "ddd": 0, "ind": 1, "ty": 0, "nm": "TR", "refId": "comp_1", "sr": 1, "ks": { "o": { "a": 0, "k": 50, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [ 500, 700, 0 ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ 500, 700, 0 ], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [ 100, 100, 100 ], "ix": 6, "l": 2 } }, "ao": 0, "w": 1000, "h": 1400, "ip": 0, "op": 307.000012504366, "st": 0, "bm": 0 } ] }, { "id": "comp_1", "layers": [ { "ddd": 0, "ind": 1, "ty": 4, "nm": "Кривые Слой 1", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [ 485.269, 757.959, 0 ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ 321.951, 673.164, 0 ], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [ 100, 100, 100 ], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 9.07, "s": [ { "i": [ [ 0, -5.005 ], [ 5.005, 0 ], [ 0, 5.005 ], [ -5.005, 0 ] ], "o": [ [ 0, 5.005 ], [ -5.005, 0 ], [ 0, -5.005 ], [ 5.005, 0 ] ], "v": [ [ 8.492, -0.57 ], [ -0.57, 8.492 ], [ -9.633, -0.57 ], [ -0.57, -9.632 ] ], "c": true } ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 30, "s": [ { "i": [ [ 0, -65.994 ], [ 65.993, 0 ], [ 0, 65.994 ], [ -65.994, 0 ] ], "o": [ [ 0, 65.994 ], [ -65.994, 0 ], [ 0, -65.994 ], [ 65.993, 0 ] ], "v": [ [ 119.492, -0.001 ], [ 0, 119.492 ], [ -119.492, -0.001 ], [ 0, -119.492 ] ], "c": true } ] }, { "i": { "x": 0.833, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 253, "s": [ { "i": [ [ 0, -65.994 ], [ 65.993, 0 ], [ 0, 65.994 ], [ -65.994, 0 ] ], "o": [ [ 0, 65.994 ], [ -65.994, 0 ], [ 0, -65.994 ], [ 65.993, 0 ] ], "v": [ [ 119.492, -0.001 ], [ 0, 119.492 ], [ -119.492, -0.001 ], [ 0, -119.492 ] ], "c": true } ] }, { "t": 269.000010956595, "s": [ { "i": [ [ 0, -5.005 ], [ 5.005, 0 ], [ 0, 5.005 ], [ -5.005, 0 ] ], "o": [ [ 0, 5.005 ], [ -5.005, 0 ], [ 0, -5.005 ], [ 5.005, 0 ] ], "v": [ [ 8.492, -0.57 ], [ -0.57, 8.492 ], [ -9.633, -0.57 ], [ -0.57, -9.632 ] ], "c": true } ] } ], "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 25, "ix": 5 }, "lc": 1, "lj": 1, "ml": 10, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 323.314, 671.574 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 3, "ty": 0, "nm": "2", "refId": "comp_2", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 1, "s": [ 6 ] }, { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 53.135, "s": [ -1.113 ] }, { "i": { "x": [ 0.833 ], "y": [ 1 ] }, "o": { "x": [ 0.167 ], "y": [ 0 ] }, "t": 103, "s": [ 5.13 ] }, { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 154, "s": [ 6 ] }, { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 206.135, "s": [ -1.113 ] }, { "t": 256.000010427094, "s": [ 5.13 ] } ], "ix": 10 }, "p": { "a": 0, "k": [ 484.75, 755.25, 0 ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ 482, 756, 0 ], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [ 100, 100, 100 ], "ix": 6, "l": 2 } }, "ao": 0, "w": 1000, "h": 1400, "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 4, "ty": 0, "nm": "1", "refId": "comp_3", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [ 0.833 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 16, "s": [ 6 ] }, { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 46, "s": [ 6 ] }, { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 129, "s": [ -1.113 ] }, { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 166, "s": [ -1.113 ] }, { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.167 ], "y": [ 0 ] }, "t": 208, "s": [ 5.13 ] }, { "t": 281.000011445365, "s": [ 5.13 ] } ], "ix": 10 }, "p": { "a": 0, "k": [ 485.5, 755, 0 ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ 483.5, 762, 0 ], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [ 100, 100, 100 ], "ix": 6, "l": 2 } }, "ao": 0, "w": 1000, "h": 1400, "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 } ] }, { "id": "comp_2", "layers": [ { "ddd": 0, "ind": 1, "ty": 4, "nm": "Кривые Слой 13", "sr": 1, "ks": { "o": { "a": 1, "k": [ { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 12, "s": [ 0 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 14, "s": [ 30 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 270, "s": [ 30 ] }, { "t": 272.000011078787, "s": [ 0 ] } ], "ix": 11 }, "r": { "a": 0, "k": -78, "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 4, "s": [ 388.795, 814.558, 0 ], "to": [ -150, 31.333, 0 ], "ti": [ 3.667, 135.667, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 29, "s": [ 142.795, 611.558, 0 ], "to": [ -1.257, -46.526, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 64, "s": [ 193.795, 611.558, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 102.879, "s": [ 126.795, 574.558, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 146, "s": [ 142.795, 611.558, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 0.16 }, "o": { "x": 0.84, "y": 0.84 }, "t": 186, "s": [ 126.795, 574.558, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 221, "s": [ 126.795, 574.558, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.833, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 265, "s": [ 142.795, 611.558, 0 ], "to": [ 0, 0, 0 ], "ti": [ 52.76, -11.021, 0 ] }, { "t": 272.000011078787, "s": [ 388.795, 814.558, 0 ] } ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ 645.132, 667.069, 0 ], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [ 100, 100, 100 ], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [ 0, -14.152 ], [ 14.152, 0 ], [ 0, 14.152 ], [ -14.152, 0 ] ], "o": [ [ 0, 14.152 ], [ -14.152, 0 ], [ 0, -14.152 ], [ 14.152, 0 ] ], "v": [ [ 15.03, 32.353 ], [ -10.595, 57.978 ], [ -36.22, 32.353 ], [ -10.595, 6.728 ] ], "c": true }, "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 25, "ix": 5 }, "lc": 1, "lj": 1, "ml": 10, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 654.531, 634.772 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 2, "ty": 4, "nm": "Кривые Слой 11", "sr": 1, "ks": { "o": { "a": 1, "k": [ { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 12, "s": [ 0 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 14, "s": [ 30 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 280, "s": [ 30 ] }, { "t": 281.000011445365, "s": [ 0 ] } ], "ix": 11 }, "r": { "a": 0, "k": -78, "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 5, "s": [ 592.795, 710.558, 0 ], "to": [ 31, -162, 0 ], "ti": [ -139, -78, 0 ] }, { "i": { "x": 0.458, "y": 0.667 }, "o": { "x": 0.32, "y": 0 }, "t": 36, "s": [ 868.795, 521.558, 0 ], "to": [ 26.923, 15.108, 0 ], "ti": [ 6.462, 3.626, 0 ] }, { "i": { "x": 0.528, "y": 0.864 }, "o": { "x": 0.219, "y": 0.106 }, "t": 73.19, "s": [ 853.779, 563.334, 0 ], "to": [ -4.749, -2.665, 0 ], "ti": [ -5.958, 11.362, 0 ] }, { "i": { "x": 0.611, "y": 1 }, "o": { "x": 0.281, "y": 0.052 }, "t": 112.776, "s": [ 778.458, 573.533, 0 ], "to": [ 2.47, -4.71, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.528, "y": 0.898 }, "o": { "x": 0.167, "y": 0 }, "t": 146, "s": [ 868.795, 521.558, 0 ], "to": [ 0, 0, 0 ], "ti": [ -5.958, 11.362, 0 ] }, { "i": { "x": 0.458, "y": 0.763 }, "o": { "x": 0.281, "y": 0.073 }, "t": 186, "s": [ 778.458, 573.533, 0 ], "to": [ 2.47, -4.71, 0 ], "ti": [ 6.462, 3.626, 0 ] }, { "i": { "x": 0.611, "y": 1 }, "o": { "x": 0.219, "y": 0.239 }, "t": 221, "s": [ 853.779, 563.334, 0 ], "to": [ -4.749, -2.665, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.833, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 272, "s": [ 868.795, 521.558, 0 ], "to": [ 0, 0, 0 ], "ti": [ -11.835, 61.846, 0 ] }, { "t": 281.000011445365, "s": [ 592.795, 710.558, 0 ] } ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ 645.132, 667.069, 0 ], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [ 100, 100, 100 ], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [ 0, -14.152 ], [ 14.152, 0 ], [ 0, 14.152 ], [ -14.152, 0 ] ], "o": [ [ 0, 14.152 ], [ -14.152, 0 ], [ 0, -14.152 ], [ 14.152, 0 ] ], "v": [ [ 15.03, 32.353 ], [ -10.595, 57.978 ], [ -36.22, 32.353 ], [ -10.595, 6.728 ] ], "c": true }, "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 25, "ix": 5 }, "lc": 1, "lj": 1, "ml": 10, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 654.531, 634.772 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 3, "ty": 4, "nm": "Кривые Слой 3", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 4, "s": [ 548.53, 631.772, 0 ], "to": [ -12.667, -289.5, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 0.16 }, "o": { "x": 0.167, "y": 0.167 }, "t": 38, "s": [ 808.53, 214.772, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.833, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 257, "s": [ 808.53, 214.772, 0 ], "to": [ 0, 0, 0 ], "ti": [ 3.58, 81.824, 0 ] }, { "t": 276.00001124171, "s": [ 548.53, 631.772, 0 ] } ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ 655.53, 553.772, 0 ], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [ 100, 100, 100 ], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 40, "s": [ { "i": [ [ 0, -14.152 ], [ 14.152, 0 ], [ 0, 14.152 ], [ -14.152, 0 ] ], "o": [ [ 0, 14.152 ], [ -14.152, 0 ], [ 0, -14.152 ], [ 14.152, 0 ] ], "v": [ [ 15.03, 32.353 ], [ -10.595, 57.978 ], [ -36.22, 32.353 ], [ -10.595, 6.728 ] ], "c": true } ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 60, "s": [ { "i": [ [ 0, -37.263 ], [ 37.263, 0 ], [ 0, 37.263 ], [ -37.262, 0 ] ], "o": [ [ 0, 37.263 ], [ -37.262, 0 ], [ 0, -37.263 ], [ 37.263, 0 ] ], "v": [ [ 80.469, 3 ], [ 12.999, 70.47 ], [ -54.47, 3 ], [ 12.999, -64.47 ] ], "c": true } ] }, { "i": { "x": 0.833, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 243, "s": [ { "i": [ [ 0, -37.263 ], [ 37.263, 0 ], [ 0, 37.263 ], [ -37.262, 0 ] ], "o": [ [ 0, 37.263 ], [ -37.262, 0 ], [ 0, -37.263 ], [ 37.263, 0 ] ], "v": [ [ 80.469, 3 ], [ 12.999, 70.47 ], [ -54.47, 3 ], [ 12.999, -64.47 ] ], "c": true } ] }, { "t": 261.000010630748, "s": [ { "i": [ [ 0, -14.152 ], [ 14.152, 0 ], [ 0, 14.152 ], [ -14.152, 0 ] ], "o": [ [ 0, 14.152 ], [ -14.152, 0 ], [ 0, -14.152 ], [ 14.152, 0 ] ], "v": [ [ 15.03, 32.353 ], [ -10.595, 57.978 ], [ -36.22, 32.353 ], [ -10.595, 6.728 ] ], "c": true } ] } ], "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 25, "ix": 5 }, "lc": 1, "lj": 1, "ml": 10, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 642.531, 550.772 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 4, "ty": 4, "nm": "Кривые Слой 6", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 0, "s": [ 428.341, 878.507, 0 ], "to": [ -31, 86.5, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 0.16 }, "o": { "x": 0.167, "y": 0.167 }, "t": 22, "s": [ 171.341, 969.507, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 261, "s": [ 171.341, 969.507, 0 ], "to": [ 0, 0, 0 ], "ti": [ 16.594, -46.302, 0 ] }, { "t": 273.000011119518, "s": [ 428.341, 878.507, 0 ] } ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ -125.659, 626.507, 0 ], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [ 100, 100, 100 ], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 69, "s": [ { "i": [ [ 0, -14.152 ], [ 14.152, 0 ], [ 0, 14.152 ], [ -14.152, 0 ] ], "o": [ [ 0, 14.152 ], [ -14.152, 0 ], [ 0, -14.152 ], [ 14.152, 0 ] ], "v": [ [ 15.03, 32.353 ], [ -10.595, 57.978 ], [ -36.22, 32.353 ], [ -10.595, 6.728 ] ], "c": true } ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 89, "s": [ { "i": [ [ 0, -37.263 ], [ 37.263, 0 ], [ 0, 37.263 ], [ -37.262, 0 ] ], "o": [ [ 0, 37.263 ], [ -37.262, 0 ], [ 0, -37.263 ], [ 37.263, 0 ] ], "v": [ [ 80.469, 3 ], [ 12.999, 70.47 ], [ -54.47, 3 ], [ 12.999, -64.47 ] ], "c": true } ] }, { "i": { "x": 0.833, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 242, "s": [ { "i": [ [ 0, -37.263 ], [ 37.263, 0 ], [ 0, 37.263 ], [ -37.262, 0 ] ], "o": [ [ 0, 37.263 ], [ -37.262, 0 ], [ 0, -37.263 ], [ 37.263, 0 ] ], "v": [ [ 80.469, 3 ], [ 12.999, 70.47 ], [ -54.47, 3 ], [ 12.999, -64.47 ] ], "c": true } ] }, { "t": 261.000010630748, "s": [ { "i": [ [ 0, -14.152 ], [ 14.152, 0 ], [ 0, 14.152 ], [ -14.152, 0 ] ], "o": [ [ 0, 14.152 ], [ -14.152, 0 ], [ 0, -14.152 ], [ 14.152, 0 ] ], "v": [ [ 15.03, 32.353 ], [ -10.595, 57.978 ], [ -36.22, 32.353 ], [ -10.595, 6.728 ] ], "c": true } ] } ], "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 25, "ix": 5 }, "lc": 1, "lj": 1, "ml": 10, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ -114.469, 633.772 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 200, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 5, "ty": 4, "nm": "Кривые Слой 5", "sr": 1, "ks": { "o": { "a": 1, "k": [ { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 30, "s": [ 0 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 31, "s": [ 100 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 258, "s": [ 100 ] }, { "t": 259.000010549286, "s": [ 0 ] } ], "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [ 660.302, 469.786, 0 ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ 494.802, 386.786, 0 ], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [ 100, 100, 100 ], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 34, "s": [ { "i": [ [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ] ], "v": [ [ -109.677, 185.276 ], [ -109.698, 185.286 ] ], "c": false } ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 57, "s": [ { "i": [ [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ] ], "v": [ [ 109.698, -185.286 ], [ -109.698, 185.286 ] ], "c": false } ] }, { "i": { "x": 0.833, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 244, "s": [ { "i": [ [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ] ], "v": [ [ 109.698, -185.286 ], [ -109.698, 185.286 ] ], "c": false } ] }, { "t": 259.000010549286, "s": [ { "i": [ [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ] ], "v": [ [ -109.677, 185.276 ], [ -109.698, 185.286 ] ], "c": false } ] } ], "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 25, "ix": 5 }, "lc": 2, "lj": 1, "ml": 10, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 494.802, 386.786 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 6, "ty": 4, "nm": "Кривые Слой 7", "sr": 1, "ks": { "o": { "a": 1, "k": [ { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 59, "s": [ 0 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 60, "s": [ 100 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 256, "s": [ 100 ] }, { "t": 257.000010467825, "s": [ 0 ] } ], "ix": 11 }, "r": { "a": 0, "k": -154, "ix": 10 }, "p": { "a": 0, "k": [ 204.302, 941.786, 0 ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ 494.802, 386.786, 0 ], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [ 100, 100, 100 ], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 59, "s": [ { "i": [ [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ] ], "v": [ [ -109.677, 185.276 ], [ -109.698, 185.286 ] ], "c": false } ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 76, "s": [ { "i": [ [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ] ], "v": [ [ -19.42, 22.395 ], [ -109.698, 185.287 ] ], "c": false } ] }, { "i": { "x": 0.833, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 245, "s": [ { "i": [ [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ] ], "v": [ [ -19.42, 22.395 ], [ -109.698, 185.287 ] ], "c": false } ] }, { "t": 257.000010467825, "s": [ { "i": [ [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ] ], "v": [ [ -109.677, 185.276 ], [ -109.698, 185.286 ] ], "c": false } ] } ], "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 25, "ix": 5 }, "lc": 2, "lj": 1, "ml": 10, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 494.802, 386.786 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 } ] }, { "id": "comp_3", "layers": [ { "ddd": 0, "ind": 1, "ty": 4, "nm": "Кривые Слой 12", "sr": 1, "ks": { "o": { "a": 1, "k": [ { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 11, "s": [ 0 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 13, "s": [ 30 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 283, "s": [ 30 ] }, { "t": 286.000011649019, "s": [ 0 ] } ], "ix": 11 }, "r": { "a": 0, "k": -78, "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 10, "s": [ 543.795, 858.558, 0 ], "to": [ 8.5, 39.167, 0 ], "ti": [ 172.667, -162, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 30, "s": [ 594.795, 1093.558, 0 ], "to": [ -35.059, 32.893, 0 ], "ti": [ 1.333, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 87, "s": [ 564.795, 1069.558, 0 ], "to": [ -1.333, 0, 0 ], "ti": [ -1.667, -0.333, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 135, "s": [ 650.795, 1083.558, 0 ], "to": [ 1.667, 0.333, 0 ], "ti": [ 1, -0.667, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 180, "s": [ 592.795, 1095.558, 0 ], "to": [ -1, 0.667, 0 ], "ti": [ -1.667, -0.333, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 210, "s": [ 650.795, 1083.558, 0 ], "to": [ 1.667, 0.333, 0 ], "ti": [ 1.333, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 240, "s": [ 564.795, 1069.558, 0 ], "to": [ -1.333, 0, 0 ], "ti": [ 172.667, -162, 0 ] }, { "i": { "x": 0.833, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 261, "s": [ 594.795, 1093.558, 0 ], "to": [ -35.059, 32.893, 0 ], "ti": [ 8.5, 39.167, 0 ] }, { "t": 280.000011404634, "s": [ 543.795, 858.558, 0 ] } ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ 645.132, 667.069, 0 ], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [ 100, 100, 100 ], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [ 0, -14.152 ], [ 14.152, 0 ], [ 0, 14.152 ], [ -14.152, 0 ] ], "o": [ [ 0, 14.152 ], [ -14.152, 0 ], [ 0, -14.152 ], [ 14.152, 0 ] ], "v": [ [ 15.03, 32.353 ], [ -10.595, 57.978 ], [ -36.22, 32.353 ], [ -10.595, 6.728 ] ], "c": true }, "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 25, "ix": 5 }, "lc": 1, "lj": 1, "ml": 10, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 654.531, 634.772 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 2, "ty": 4, "nm": "Кривые Слой 10", "sr": 1, "ks": { "o": { "a": 1, "k": [ { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 11, "s": [ 0 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 13, "s": [ 30 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 289, "s": [ 30 ] }, { "t": 291.000011852673, "s": [ 0 ] } ], "ix": 11 }, "r": { "a": 0, "k": -78, "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 2, "s": [ 437.795, 660.558, 0 ], "to": [ -41, -109.667, 0 ], "ti": [ -123, 21.667, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 44, "s": [ 558.795, 429.558, 0 ], "to": [ 42.471, -7.481, 0 ], "ti": [ 1, 1, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 97, "s": [ 530.795, 409.558, 0 ], "to": [ -1, -1, 0 ], "ti": [ 0.667, -1.333, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 134, "s": [ 518.795, 441.558, 0 ], "to": [ -0.667, 1.333, 0 ], "ti": [ -0.667, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 180, "s": [ 557.795, 430.558, 0 ], "to": [ 0.667, 0, 0 ], "ti": [ 0.667, -1.333, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 210, "s": [ 518.795, 441.558, 0 ], "to": [ -0.667, 1.333, 0 ], "ti": [ 1, 1, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 240, "s": [ 530.795, 409.558, 0 ], "to": [ -1, -1, 0 ], "ti": [ -123, 21.667, 0 ] }, { "i": { "x": 0.833, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 261, "s": [ 558.795, 429.558, 0 ], "to": [ 42.471, -7.481, 0 ], "ti": [ 15.102, 40.394, 0 ] }, { "t": 282.000011486096, "s": [ 437.795, 660.558, 0 ] } ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ 645.132, 667.069, 0 ], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [ 100, 100, 100 ], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [ 0, -14.152 ], [ 14.152, 0 ], [ 0, 14.152 ], [ -14.152, 0 ] ], "o": [ [ 0, 14.152 ], [ -14.152, 0 ], [ 0, -14.152 ], [ 14.152, 0 ] ], "v": [ [ 15.03, 32.353 ], [ -10.595, 57.978 ], [ -36.22, 32.353 ], [ -10.595, 6.728 ] ], "c": true }, "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 25, "ix": 5 }, "lc": 1, "lj": 1, "ml": 10, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 654.531, 634.772 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 3, "ty": 4, "nm": "Кривые Слой 8", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": -78, "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 4, "s": [ 362.795, 701.558, 0 ], "to": [ -50.333, -231, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 0.16 }, "o": { "x": 0.167, "y": 0.167 }, "t": 33, "s": [ 180.795, 401.558, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.833, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 274, "s": [ 180.795, 401.558, 0 ], "to": [ 0, 0, 0 ], "ti": [ 12.451, 57.141, 0 ] }, { "t": 285.000011608288, "s": [ 362.795, 701.558, 0 ] } ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ 667.53, 637.772, 0 ], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [ 100, 100, 100 ], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 34, "s": [ { "i": [ [ 0, -14.152 ], [ 14.152, 0 ], [ 0, 14.152 ], [ -14.152, 0 ] ], "o": [ [ 0, 14.152 ], [ -14.152, 0 ], [ 0, -14.152 ], [ 14.152, 0 ] ], "v": [ [ 15.03, 32.353 ], [ -10.595, 57.978 ], [ -36.22, 32.353 ], [ -10.595, 6.728 ] ], "c": true } ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 55, "s": [ { "i": [ [ 0, -37.263 ], [ 37.263, 0 ], [ 0, 37.263 ], [ -37.262, 0 ] ], "o": [ [ 0, 37.263 ], [ -37.262, 0 ], [ 0, -37.263 ], [ 37.263, 0 ] ], "v": [ [ 80.469, 3 ], [ 12.999, 70.47 ], [ -54.47, 3 ], [ 12.999, -64.47 ] ], "c": true } ] }, { "i": { "x": 0.833, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 256, "s": [ { "i": [ [ 0, -37.263 ], [ 37.263, 0 ], [ 0, 37.263 ], [ -37.262, 0 ] ], "o": [ [ 0, 37.263 ], [ -37.262, 0 ], [ 0, -37.263 ], [ 37.263, 0 ] ], "v": [ [ 80.469, 3 ], [ 12.999, 70.47 ], [ -54.47, 3 ], [ 12.999, -64.47 ] ], "c": true } ] }, { "t": 274.000011160249, "s": [ { "i": [ [ 0, -14.152 ], [ 14.152, 0 ], [ 0, 14.152 ], [ -14.152, 0 ] ], "o": [ [ 0, 14.152 ], [ -14.152, 0 ], [ 0, -14.152 ], [ 14.152, 0 ] ], "v": [ [ 15.03, 32.353 ], [ -10.595, 57.978 ], [ -36.22, 32.353 ], [ -10.595, 6.728 ] ], "c": true } ] } ], "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 25, "ix": 5 }, "lc": 1, "lj": 1, "ml": 10, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 654.531, 634.772 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 4, "ty": 4, "nm": "Кривые Слой 14", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": -154, "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 0, "s": [ 634.341, 792.507, 0 ], "to": [ 72.5, -79, 0 ], "ti": [ -26.5, 5, 0 ] }, { "i": { "x": 0.16, "y": 0.16 }, "o": { "x": 0.167, "y": 0.167 }, "t": 22, "s": [ 793.341, 762.507, 0 ], "to": [ 0, 0, 0 ], "ti": [ 0, 0, 0 ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 282, "s": [ 793.341, 762.507, 0 ], "to": [ -26.5, 5, 0 ], "ti": [ -18.234, 19.869, 0 ] }, { "t": 301.000012259981, "s": [ 634.341, 792.507, 0 ] } ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ -125.659, 626.507, 0 ], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [ 100, 100, 100 ], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 69, "s": [ { "i": [ [ 0, -14.152 ], [ 14.152, 0 ], [ 0, 14.152 ], [ -14.152, 0 ] ], "o": [ [ 0, 14.152 ], [ -14.152, 0 ], [ 0, -14.152 ], [ 14.152, 0 ] ], "v": [ [ 15.03, 32.353 ], [ -10.595, 57.978 ], [ -36.22, 32.353 ], [ -10.595, 6.728 ] ], "c": true } ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 102, "s": [ { "i": [ [ 0, -37.263 ], [ 37.263, 0 ], [ 0, 37.263 ], [ -37.262, 0 ] ], "o": [ [ 0, 37.263 ], [ -37.262, 0 ], [ 0, -37.263 ], [ 37.263, 0 ] ], "v": [ [ 80.469, 3 ], [ 12.999, 70.47 ], [ -54.47, 3 ], [ 12.999, -64.47 ] ], "c": true } ] }, { "i": { "x": 0.833, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 258, "s": [ { "i": [ [ 0, -37.263 ], [ 37.263, 0 ], [ 0, 37.263 ], [ -37.262, 0 ] ], "o": [ [ 0, 37.263 ], [ -37.262, 0 ], [ 0, -37.263 ], [ 37.263, 0 ] ], "v": [ [ 80.469, 3 ], [ 12.999, 70.47 ], [ -54.47, 3 ], [ 12.999, -64.47 ] ], "c": true } ] }, { "t": 277.000011282441, "s": [ { "i": [ [ 0, -14.152 ], [ 14.152, 0 ], [ 0, 14.152 ], [ -14.152, 0 ] ], "o": [ [ 0, 14.152 ], [ -14.152, 0 ], [ 0, -14.152 ], [ 14.152, 0 ] ], "v": [ [ 15.03, 32.353 ], [ -10.595, 57.978 ], [ -36.22, 32.353 ], [ -10.595, 6.728 ] ], "c": true } ] } ], "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 25, "ix": 5 }, "lc": 1, "lj": 1, "ml": 10, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ -114.469, 633.772 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 200, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 5, "ty": 4, "nm": "Кривые Слой 9", "sr": 1, "ks": { "o": { "a": 1, "k": [ { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 30, "s": [ 0 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 31, "s": [ 100 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 269, "s": [ 100 ] }, { "t": 270.000010997325, "s": [ 0 ] } ], "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [ 512.302, 479.786, 0 ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ 494.802, 386.786, 0 ], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [ 100, 100, 100 ], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 30, "s": [ { "i": [ [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ] ], "v": [ [ -109.677, 185.276 ], [ -109.698, 185.286 ] ], "c": false } ] }, { "i": { "x": 0.833, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 47, "s": [ { "i": [ [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ] ], "v": [ [ -287.802, -23.286 ], [ -107.698, 189.286 ] ], "c": false } ] }, { "i": { "x": 0.833, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 99, "s": [ { "i": [ [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ] ], "v": [ [ -287.802, -23.286 ], [ -107.698, 189.286 ] ], "c": false } ] }, { "i": { "x": 0.833, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 116, "s": [ { "i": [ [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ] ], "v": [ [ -289.802, -24.786 ], [ -287.698, -26.714 ] ], "c": false } ] }, { "i": { "x": 0.833, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 154, "s": [ { "i": [ [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ] ], "v": [ [ -289.802, -24.786 ], [ -287.698, -26.714 ] ], "c": false } ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 168, "s": [ { "i": [ [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ] ], "v": [ [ -287.802, -23.286 ], [ -107.698, 189.286 ] ], "c": false } ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 256, "s": [ { "i": [ [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ] ], "v": [ [ -287.802, -23.286 ], [ -107.698, 189.286 ] ], "c": false } ] }, { "t": 274.000011160249, "s": [ { "i": [ [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ] ], "v": [ [ -109.677, 185.276 ], [ -109.698, 185.286 ] ], "c": false } ] } ], "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 25, "ix": 5 }, "lc": 2, "lj": 1, "ml": 10, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 494.802, 386.786 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 6, "ty": 4, "nm": "Кривые Слой 15", "sr": 1, "ks": { "o": { "a": 1, "k": [ { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 59, "s": [ 0 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 60, "s": [ 100 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 283, "s": [ 100 ] }, { "t": 284.000011567557, "s": [ 0 ] } ], "ix": 11 }, "r": { "a": 0, "k": -154, "ix": 10 }, "p": { "a": 0, "k": [ 560.302, 919.786, 0 ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ 494.802, 386.786, 0 ], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [ 85.272, 96.948, 100 ], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 1, "k": [ { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 75, "s": [ { "i": [ [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ] ], "v": [ [ 36.29, 170.857 ], [ 35.742, 171.094 ] ], "c": false } ] }, { "i": { "x": 0.833, "y": 1 }, "o": { "x": 0.84, "y": 0 }, "t": 90, "s": [ { "i": [ [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ] ], "v": [ [ 36.29, 170.857 ], [ -93.852, 222.099 ] ], "c": false } ] }, { "i": { "x": 0.833, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 120, "s": [ { "i": [ [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ] ], "v": [ [ 36.29, 170.857 ], [ -93.852, 222.099 ] ], "c": false } ] }, { "i": { "x": 0.833, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 132, "s": [ { "i": [ [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ] ], "v": [ [ -94.358, 222.314 ], [ -93.852, 222.099 ] ], "c": false } ] }, { "i": { "x": 0.833, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 145, "s": [ { "i": [ [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ] ], "v": [ [ -94.358, 222.314 ], [ -93.852, 222.099 ] ], "c": false } ] }, { "i": { "x": 0.833, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 159, "s": [ { "i": [ [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ] ], "v": [ [ 36.29, 170.857 ], [ -93.852, 222.099 ] ], "c": false } ] }, { "i": { "x": 0.16, "y": 1 }, "o": { "x": 0.167, "y": 0 }, "t": 271, "s": [ { "i": [ [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ] ], "v": [ [ 36.29, 170.857 ], [ -93.852, 222.099 ] ], "c": false } ] }, { "t": 284.000011567557, "s": [ { "i": [ [ 0, 0 ], [ 0, 0 ] ], "o": [ [ 0, 0 ], [ 0, 0 ] ], "v": [ [ 36.29, 170.857 ], [ 35.742, 171.094 ] ], "c": false } ] } ], "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 1, 1, 1, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 25, "ix": 5 }, "lc": 2, "lj": 1, "ml": 10, "bm": 0, "nm": "Обводка 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 494.802, 386.786 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 0, "k": [ 100, 100 ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 } ] } ], "layers": [ { "ddd": 0, "ind": 1, "ty": 4, "nm": "Кривые Слой 2", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [ 484.996, 760.779, 0 ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ 320.814, 674.574, 0 ], "ix": 1, "l": 2 }, "s": { "a": 1, "k": [ { "i": { "x": [ 0.16, 0.16, 0.16 ], "y": [ 1, 1, 1 ] }, "o": { "x": [ 0.84, 0.84, 0.84 ], "y": [ 0, 0, 0 ] }, "t": 0, "s": [ 100, 100, 100 ] }, { "i": { "x": [ 0.16, 0.16, 0.16 ], "y": [ 1, 1, 1 ] }, "o": { "x": [ 0.84, 0.84, 0.84 ], "y": [ 0, 0, 0 ] }, "t": 25, "s": [ 100, 100, 100 ] }, { "i": { "x": [ 0.16, 0.16, 0.16 ], "y": [ 1, 1, 1 ] }, "o": { "x": [ 0.84, 0.84, 0.84 ], "y": [ 0, 0, 0 ] }, "t": 56.779, "s": [ 146, 146, 100 ] }, { "i": { "x": [ 0.16, 0.16, 0.16 ], "y": [ 1, 1, 1 ] }, "o": { "x": [ 0.84, 0.84, 0.84 ], "y": [ 0, 0, 0 ] }, "t": 94.334, "s": [ 100, 100, 100 ] }, { "i": { "x": [ 0.16, 0.16, 0.16 ], "y": [ 1, 1, 1 ] }, "o": { "x": [ 0.84, 0.84, 0.84 ], "y": [ 0, 0, 0 ] }, "t": 114.506, "s": [ 175, 175, 100 ] }, { "t": 133.000005417201, "s": [ 0, 0, 100 ] } ], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [ 0, -25.595 ], [ 25.594, 0 ], [ 0, 25.595 ], [ -25.595, 0 ] ], "o": [ [ 0, 25.595 ], [ -25.595, 0 ], [ 0, -25.595 ], [ 25.594, 0 ] ], "v": [ [ 46.343, 0 ], [ 0, 46.343 ], [ -46.343, 0 ], [ 0, -46.343 ] ], "c": true }, "ix": 2 }, "nm": "Контур 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [ 0.838999968884, 0.122000002394, 0.522000002394, 1 ], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Заливка 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [ 321.951, 673.164 ], "ix": 2 }, "a": { "a": 0, "k": [ 0, 0 ], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [ 0.16, 0.16 ], "y": [ 1, 1 ] }, "o": { "x": [ 0.84, 0.84 ], "y": [ 0, 0 ] }, "t": 0, "s": [ 0, 0 ] }, { "t": 20.9300008524964, "s": [ 100, 100 ] } ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Преобразовать" } ], "nm": "Группа 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 2, "ty": 0, "nm": "31", "refId": "comp_0", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 0, "s": [ 0 ] }, { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 20, "s": [ 6 ] }, { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 39.58, "s": [ -1.113 ] }, { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 58.309, "s": [ 5.13 ] }, { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 72.84, "s": [ 6 ] }, { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 90.013, "s": [ -1.113 ] }, { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 108.741, "s": [ 5.13 ] }, { "i": { "x": [ 0.16 ], "y": [ 1 ] }, "o": { "x": [ 0.84 ], "y": [ 0 ] }, "t": 127, "s": [ -3.727 ] }, { "t": 147.000005987433, "s": [ 0 ] } ], "ix": 10 }, "p": { "a": 0, "k": [ 486.5, 759.25, 0 ], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [ 486.5, 755.25, 0 ], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [ 100, 100, 100 ], "ix": 6, "l": 2 } }, "ao": 0, "tm": { "a": 1, "k": [ { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 0, "s": [ 0 ] }, { "i": { "x": [ 0.833 ], "y": [ 0.833 ] }, "o": { "x": [ 0.167 ], "y": [ 0.167 ] }, "t": 181, "s": [ 11.945 ] }, { "t": 1079.00004394857, "s": [ 36.003 ] } ], "ix": 2 }, "w": 1000, "h": 1400, "ip": 0, "op": 1079.00004394857, "st": 0, "bm": 0 } ], "markers": [ ] } ================================================ FILE: src/app/onboarding/components/IntroductionSteps/animation_payasyougo.json ================================================ {"v":"5.7.4","fr":29.9700012207031,"ip":0,"op":180.00000733155,"w":1000,"h":1000,"nm":"ДЩсл1","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Кривые Слой 6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[500,612.271,0],"to":[0,-1.667,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9.258,"s":[500,602.271,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.514,"s":[500,612.271,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22.224,"s":[500,602.271,0],"to":[0,0,0],"ti":[0,-0.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":29.935,"s":[500,612.271,0],"to":[0,0.833,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40.449,"s":[500,607.271,0],"to":[0,0,0],"ti":[0,-0.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53.768,"s":[500,612.271,0],"to":[0,0.333,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":66.383,"s":[500,609.271,0],"to":[0,0,0],"ti":[0,-0.5,0]},{"t":79.000003217736,"s":[500,612.271,0]}],"ix":2,"l":2},"a":{"a":0,"k":[421.162,202.952,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[511.478,355.903],[331.989,355.903]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[0.839215695858,0.121568627656,0.521568655968,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":109,"s":[1,1,1,1]},{"t":179.000007290819,"s":[0.839215695858,0.121568627656,0.521568655968,1]}],"ix":3},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":109,"s":[50]},{"t":179.000007290819,"s":[100]}],"ix":4},"w":{"a":0,"k":20,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,42.807],[0,0],[-15.057,8.728],[0,0],[-4.001,5.501],[0,0],[-15.614,0],[0,0],[-9.272,-11.229],[0,0],[-8.205,-2.971],[0,0],[0,-20.546],[0,0],[42.806,0]],"o":[[-42.807,0],[0,0],[0,-17.405],[0,0],[5.885,-3.411],[0,0],[9.183,-12.628],[0,0],[14.562,0],[0,0],[5.556,6.73],[0,0],[19.318,6.995],[0,0],[0,42.807],[0,0]],"v":[[-293.653,152.952],[-371.162,75.443],[-371.162,49.192],[-346.836,6.972],[-286.276,-28.136],[-271.284,-41.652],[-204.956,-132.853],[-165.488,-152.951],[93.929,-152.951],[131.563,-135.219],[204.966,-46.308],[225.986,-31.49],[338.975,9.419],[371.162,55.306],[371.162,75.443],[293.654,152.952]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[0.839215695858,0.121568627656,0.521568655968,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":109,"s":[1,1,1,1]},{"t":179.000007290819,"s":[0.839215695858,0.121568627656,0.521568655968,1]}],"ix":3},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":109,"s":[50]},{"t":179.000007290819,"s":[100]}],"ix":4},"w":{"a":0,"k":20,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[421.162,202.952],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3027.00012329224,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Кривые Слой 5","sr":1,"ks":{"o":{"a":0,"k":50,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.94]},"t":0,"s":[0]},{"t":90.0000036657751,"s":[1080]}],"ix":10},"p":{"a":0,"k":[309.3,765.222,0],"ix":2,"l":2},"a":{"a":0,"k":[111.812,111.813,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[111.812,50.001],[111.812,111.814]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":20,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-34.138],[-34.138,0],[0,34.138],[34.137,0]],"o":[[0,34.138],[34.137,0],[0,-34.138],[-34.138,0]],"v":[[-61.812,0],[0,61.813],[61.812,0],[0,-61.813]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":20,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[111.812,111.813],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3027.00012329224,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Кривые Слой 4","sr":1,"ks":{"o":{"a":0,"k":50,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.94]},"t":0,"s":[180]},{"t":90.0000036657751,"s":[1260]}],"ix":10},"p":{"a":0,"k":[690.586,765.222,0],"ix":2,"l":2},"a":{"a":0,"k":[111.812,111.813,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[111.811,50.001],[111.811,111.814]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":20,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-34.138],[-34.138,0],[0,34.138],[34.137,0]],"o":[[0,34.138],[34.137,0],[0,-34.138],[-34.138,0]],"v":[[-61.811,0],[0,61.813],[61.811,0],[0,-61.813]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":20,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[111.812,111.813],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3027.00012329224,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Gas","refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.9],"y":[0]},"t":52,"s":[0]},{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.9],"y":[0]},"t":99.434,"s":[84]},{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.9],"y":[0]},"t":140.748,"s":[84]},{"t":179.000007290819,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.1,"y":1},"o":{"x":0.9,"y":0},"t":52,"s":[370,330,0],"to":[-367.333,-234,0],"ti":[7.333,3.667,0]},{"i":{"x":0.757,"y":1},"o":{"x":0.434,"y":0},"t":99.434,"s":[50,336,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.1,"y":1},"o":{"x":0.604,"y":0},"t":109,"s":[45,333,0],"to":[0,0,0],"ti":[7.333,3.667,0]},{"i":{"x":0.757,"y":1},"o":{"x":0.434,"y":0},"t":116,"s":[50,336,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.1,"y":1},"o":{"x":0.604,"y":0},"t":123,"s":[45,333,0],"to":[0,0,0],"ti":[7.333,3.667,0]},{"i":{"x":-0.081,"y":-0.081},"o":{"x":0.434,"y":0.434},"t":130,"s":[50,336,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.1,"y":1},"o":{"x":0.9,"y":0},"t":140.748,"s":[50,336,0],"to":[-1.667,-314.333,0],"ti":[44.99,28.66,0]},{"t":179.000007290819,"s":[370,330,0]}],"ix":2,"l":2},"a":{"a":0,"k":[372,316,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1000,"h":1000,"ip":52.0000021180034,"op":3079.00012541024,"st":52.0000021180034,"bm":0}]},{"id":"comp_2","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Кривые Слой 9","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[464.856,197.402,0],"ix":2,"l":2},"a":{"a":0,"k":[144.833,170.445,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.6,"y":1},"o":{"x":0.32,"y":0.94},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.528,36.667],[-20.027,36.653],[-20.027,87.334],[28.777,87.334],[28.777,36.667]],"c":true}]},{"i":{"x":0.6,"y":1},"o":{"x":0.32,"y":0},"t":15,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-14.222,-117.334],[-93.777,-38.222],[-93.777,117.334],[93.777,117.334],[93.777,-117.334]],"c":true}]},{"i":{"x":0.6,"y":1},"o":{"x":0.32,"y":0},"t":117,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-14.222,-117.334],[-93.777,-38.222],[-93.777,117.334],[93.777,117.334],[93.777,-117.334]],"c":true}]},{"t":127.000005172816,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.528,36.667],[-20.027,36.653],[-20.027,87.334],[28.777,87.334],[28.777,36.667]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.839215686275,0.121568627451,0.521568627451,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":20,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[145.889,173.556],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.6,"y":1},"o":{"x":0.32,"y":0.94},"t":9,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[34.722,3.5],[1.5,36.722],[1.778,36.5],[35,3.278]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":17,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[30.222,-3],[-3,30.222],[-30.222,3],[3,-30.222]],"c":true}]},{"i":{"x":0.24,"y":1},"o":{"x":0.76,"y":0},"t":112,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[30.222,-3],[-3,30.222],[-30.222,3],[3,-30.222]],"c":true}]},{"t":118.000004806239,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[31.722,-1.5],[-2.5,33.722],[-2.222,34],[32,-1.222]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.839215686275,0.121568627451,0.521568627451,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":114,"s":[20]},{"t":119.000004846969,"s":[0]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[80.222,80.222],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":173.000007046434,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Кривые Слой 10","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[459.356,261.652,0],"ix":2,"l":2},"a":{"a":0,"k":[150.333,234.695,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.6,"y":1},"o":{"x":0.32,"y":0.94},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.528,36.667],[-20.027,36.653],[-20.027,87.334],[28.777,87.334],[28.777,36.667]],"c":true}]},{"t":15.0000006109625,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-14.222,-117.334],[-93.777,-38.222],[-93.777,117.334],[93.777,117.334],[93.777,-117.334]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":20,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[145.889,173.556],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.6,"y":1},"o":{"x":0.32,"y":0.94},"t":9,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[34.722,3.5],[1.5,36.722],[1.778,36.5],[35,3.278]],"c":true}]},{"t":17.0000006924242,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[30.222,-3],[-3,30.222],[-30.222,3],[3,-30.222]],"c":true}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[0]},{"t":12.00000048877,"s":[20]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[80.222,80.222],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":183.000007453743,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Кривые Слой 8","tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.9],"y":[0]},"t":0,"s":[0]},{"t":47.1075019187278,"s":[-80]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[387.856,297.382,0],"to":[6.507,-10.316,0],"ti":[-16.246,27.807,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23.554,"s":[516.412,228.616,0],"to":[17.874,-30.594,0],"ti":[-7.159,3.056,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47.108,"s":[531.856,273.382,0],"to":[13.667,-5.833,0],"ti":[-21,-18.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70.66,"s":[605.856,162.382,0],"to":[21,18.167,0],"ti":[-8.667,-36.667,0]},{"t":95.0000038694293,"s":[657.856,382.382,0]}],"ix":2,"l":2},"a":{"a":0,"k":[228.381,168.741,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[23.793,16.302],[0,0],[24.038,15.94],[0,0],[0,0],[23.794,16.302],[0,0],[24.037,15.94],[0,0],[0,0],[0,0],[0,0]],"o":[[-21.697,-14.865],[0,0],[-24.037,-15.94],[0,0],[0,0],[-21.696,-14.865],[0,0],[-24.037,-15.94],[0,0],[0,0],[0,0],[0,0]],"v":[[132.268,-102.845],[92.353,-102.926],[48.58,-102.801],[0,-102.755],[0,-102.733],[-46.114,-102.845],[-86.028,-102.926],[-129.801,-102.801],[-178.381,-102.755],[-178.381,118.741],[178.381,118.741],[178.381,-102.733]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.839215686275,0.121568627451,0.521568627451,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":20,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[228.381,168.741],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":116.000004724777,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Слой-фигура 4","sr":1,"ks":{"o":{"a":0,"k":50,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[441,223,0],"ix":2,"l":2},"a":{"a":0,"k":[-277.148,-44.832,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0},"t":17,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-364.342,-44.787],[-363.657,-45.19]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":33.5,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-364.342,-44.787],[-191.657,-45.19]],"c":false}]},{"t":50.0000020365418,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-192.342,-44.787],[-191.657,-45.19]],"c":false}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":20,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.24,"y":1},"o":{"x":0.76,"y":0},"t":17,"s":[0.003,-0.027],"to":[42.667,0],"ti":[-42.667,0]},{"t":50.0000020365418,"s":[256.003,-0.027]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Фигура 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":16.0000006516934,"op":52.0000021180034,"st":17.0000006924242,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Слой-фигура 3","sr":1,"ks":{"o":{"a":0,"k":50,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[535,85,0],"ix":2,"l":2},"a":{"a":0,"k":[-277.148,-44.832,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0},"t":12,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-364.342,-44.787],[-363.657,-45.19]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":22,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-364.342,-44.787],[-191.657,-45.19]],"c":false}]},{"t":32.0000013033867,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-192.342,-44.787],[-191.657,-45.19]],"c":false}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":20,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.24,"y":1},"o":{"x":0.76,"y":0},"t":12,"s":[0.003,-0.027],"to":[42.667,0],"ti":[-42.667,0]},{"t":32.0000013033867,"s":[256.003,-0.027]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":70,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Фигура 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":11.0000004480392,"op":35.0000014255792,"st":12.00000048877,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Слой-фигура 2","sr":1,"ks":{"o":{"a":0,"k":50,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[769,299,0],"ix":2,"l":2},"a":{"a":0,"k":[-277.148,-44.832,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0},"t":8,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-364.342,-44.787],[-363.657,-45.19]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":15.5,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-364.342,-44.787],[-191.657,-45.19]],"c":false}]},{"t":23.0000009368092,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-192.342,-44.787],[-191.657,-45.19]],"c":false}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":20,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.24,"y":1},"o":{"x":0.76,"y":0},"t":8,"s":[0.003,-0.027],"to":[42.667,0],"ti":[-42.667,0]},{"t":23.0000009368092,"s":[256.003,-0.027]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Фигура 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":7.00000028511585,"op":24.00000097754,"st":8.00000032584668,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Слой-фигура 1","sr":1,"ks":{"o":{"a":0,"k":50,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[503,223,0],"ix":2,"l":2},"a":{"a":0,"k":[-277.148,-44.832,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.167,"y":0},"t":2,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-364.342,-44.787],[-363.657,-45.19]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":9.5,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-364.342,-44.787],[-191.657,-45.19]],"c":false}]},{"t":17.0000006924242,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-192.342,-44.787],[-191.657,-45.19]],"c":false}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":20,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.24,"y":1},"o":{"x":0.76,"y":0},"t":2,"s":[0.003,-0.027],"to":[42.667,0],"ti":[-42.667,0]},{"t":17.0000006924242,"s":[256.003,-0.027]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Фигура 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":1.00000004073083,"op":18.000000733155,"st":2.00000008146167,"bm":0},{"ddd":0,"ind":5,"ty":0,"nm":"Car","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.6,"y":1},"o":{"x":0.28,"y":1},"t":48,"s":[500,405,0],"to":[0,15.833,0],"ti":[0,-15.833,0]},{"i":{"x":0.6,"y":0.6},"o":{"x":0.167,"y":0.167},"t":76,"s":[500,500,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.6,"y":1},"o":{"x":0.32,"y":0},"t":167,"s":[500,500,0],"to":[0,-15.833,0],"ti":[0,15.833,0]},{"t":180.00000733155,"s":[500,405,0]}],"ix":2,"l":2},"a":{"a":0,"k":[500,500,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1000,"h":1000,"ip":0,"op":3027.00012329224,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":0,"nm":"Предварительная композиция 3","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.94]},"t":52,"s":[90]},{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0]},"t":59,"s":[0]},{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0]},"t":170,"s":[0]},{"t":179.000007290819,"s":[-90]}],"ix":10},"p":{"a":0,"k":[457,277.25,0],"ix":2,"l":2},"a":{"a":0,"k":[457,277.25,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.6,0.6,0.6],"y":[1,1,1]},"o":{"x":[0.32,0.32,0.32],"y":[0.94,0.94,0]},"t":52,"s":[0,0,100]},{"i":{"x":[0.6,0.6,0.6],"y":[1,1,1]},"o":{"x":[0.32,0.32,0.32],"y":[0,0,0]},"t":59,"s":[100,100,100]},{"i":{"x":[0.6,0.6,0.6],"y":[1,1,1]},"o":{"x":[0.32,0.32,0.32],"y":[0,0,0]},"t":170,"s":[100,100,100]},{"t":179.000007290819,"s":[0,0,100]}],"ix":6,"l":2}},"ao":0,"w":1000,"h":1000,"ip":0,"op":3027.00012329224,"st":0,"bm":0}],"markers":[]} ================================================ FILE: src/app/onboarding/components/IntroductionSteps/animation_privacy.json ================================================ {"v":"5.7.4","fr":29.9700012207031,"ip":0,"op":149.000006068894,"w":1000,"h":1000,"nm":"Lock","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Кривые Слой 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[499,643.236,0],"ix":2,"l":2},"a":{"a":0,"k":[231.591,141.676,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[61.955,-1.037],[-1.037,61.955],[-61.955,1.036],[1.036,-61.955]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.839215686275,0.121568627451,0.521568627451,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":20,"ix":5},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"штрих","v":{"a":0,"k":499,"ix":1}},{"n":"o","nm":"смещение","v":{"a":1,"k":[{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":31,"s":[-419]},{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":90,"s":[0]},{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":109,"s":[0]},{"t":127.000005172816,"s":[-419]}],"ix":7}}],"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[351.227,170.886],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[90.198,-31.581],[-31.581,90.199],[-90.199,31.581],[31.581,-90.199]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.839215686275,0.121568627451,0.521568627451,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":20,"ix":5},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"штрих","v":{"a":0,"k":547,"ix":1}},{"n":"o","nm":"смещение","v":{"a":1,"k":[{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":31,"s":[-524]},{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":90,"s":[0]},{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":109,"s":[0]},{"t":127.000005172816,"s":[-524]}],"ix":7}}],"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[261.752,140.199],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[90.199,-31.581],[-31.581,90.199],[-90.199,31.58],[31.581,-90.199]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.839215686275,0.121568627451,0.521568627451,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":20,"ix":5},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"штрих","v":{"a":0,"k":578,"ix":1}},{"n":"o","nm":"смещение","v":{"a":1,"k":[{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":31,"s":[604]},{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":90,"s":[0]},{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":109,"s":[0]},{"t":127.000005172816,"s":[604]}],"ix":7}}],"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[140.199,143.153],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3027.00012329224,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Слой-фигура 3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"t":31.0000012626559,"s":[70]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[500,645.889,0],"ix":2,"l":2},"a":{"a":0,"k":[0,145.889,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0.16,0.16],"y":[1,1]},"o":{"x":[0.84,0.84],"y":[0,0]},"t":0,"s":[30,30]},{"i":{"x":[0.16,0.16],"y":[1,1]},"o":{"x":[0.84,0.84],"y":[0,0]},"t":30,"s":[400,400]},{"i":{"x":[0.16,0.16],"y":[1,1]},"o":{"x":[0.84,0.84],"y":[0,0]},"t":59,"s":[482,450]},{"i":{"x":[0.833,0.833],"y":[1,1]},"o":{"x":[0.84,0.84],"y":[0,0]},"t":83,"s":[482,450]},{"i":{"x":[0.16,0.16],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0,0]},"t":92,"s":[482,434]},{"i":{"x":[0.16,0.16],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0,0]},"t":101,"s":[482,450]},{"i":{"x":[0.16,0.16],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0,0]},"t":118,"s":[482,450]},{"t":151.000006150356,"s":[30,30]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":0,"s":[502]},{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":30,"s":[306.645]},{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":59,"s":[54]},{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":118,"s":[54]},{"t":151.000006150356,"s":[502]}],"ix":4},"nm":"Контур прямоугольника 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0.839215755463,0.121568635106,0.521568655968,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126,"s":[1,1,1,1]},{"t":152.000006191087,"s":[0.839215755463,0.121568635106,0.521568655968,1]}],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":20,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1,144],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3027.00012329224,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Слой-фигура 2","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[500,645.889,0],"ix":2,"l":2},"a":{"a":0,"k":[0,145.889,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0.16,0.16],"y":[1,1]},"o":{"x":[0.84,0.84],"y":[0,0]},"t":0,"s":[30,30]},{"i":{"x":[0.16,0.16],"y":[1,1]},"o":{"x":[0.84,0.84],"y":[0,0]},"t":30,"s":[400,400]},{"i":{"x":[0.16,0.16],"y":[1,1]},"o":{"x":[0.84,0.84],"y":[0,0]},"t":59,"s":[482,450]},{"i":{"x":[0.833,0.833],"y":[1,1]},"o":{"x":[0.84,0.84],"y":[0,0]},"t":83,"s":[482,450]},{"i":{"x":[0.16,0.16],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0,0]},"t":92,"s":[482,434]},{"i":{"x":[0.16,0.16],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0,0]},"t":101,"s":[482,450]},{"i":{"x":[0.16,0.16],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0,0]},"t":118,"s":[482,450]},{"t":151.000006150356,"s":[30,30]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":0,"s":[502]},{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":30,"s":[306.645]},{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":59,"s":[54]},{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":118,"s":[54]},{"t":151.000006150356,"s":[502]}],"ix":4},"nm":"Контур прямоугольника 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":20,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.905882352941,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1,144],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3027.00012329224,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Кривые Слой 2","tt":2,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.9],"y":[0]},"t":48,"s":[0]},{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.9],"y":[0]},"t":77,"s":[19]},{"t":94.0000038286985,"s":[0]}],"ix":10},"p":{"a":0,"k":[654,429.448,0],"ix":2,"l":2},"a":{"a":0,"k":[359.333,369.553,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.1,"y":1},"o":{"x":0.9,"y":0},"t":77,"s":[{"i":[[0,0],[0,0],[-85.788,0],[0,-85.788],[0,0]],"o":[[0,0],[0,-85.788],[85.789,0],[0,0],[0,0]],"v":[[-155.333,63.553],[-155.333,-0.219],[-0.001,-155.552],[155.333,-0.219],[155.333,199.552]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":117,"s":[{"i":[[0,0],[0,0],[-85.788,0],[0,-85.788],[0,0]],"o":[[0,0],[0,-85.788],[85.789,0],[0,0],[0,0]],"v":[[-155.333,63.553],[-155.333,-0.219],[-0.001,-155.552],[155.333,-0.219],[155.333,199.552]],"c":false}]},{"t":128.000005213547,"s":[{"i":[[0,0],[0,0],[-85.788,0],[0,-85.788],[0,0]],"o":[[0,0],[0,-85.788],[85.789,0],[0,0],[0,0]],"v":[[-155.333,-0.447],[-155.333,-0.219],[-0.001,-155.552],[155.333,-0.219],[159.333,1.552]],"c":false}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":20,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.1,"y":1},"o":{"x":0.9,"y":0},"t":47,"s":[205.333,550.553],"to":[0,-62.167],"ti":[0,40.333]},{"i":{"x":0.1,"y":1},"o":{"x":0.9,"y":0},"t":77,"s":[205.333,177.553],"to":[0,-40.333],"ti":[0,-21.833]},{"i":{"x":0.1,"y":0.1},"o":{"x":0.167,"y":0.167},"t":94,"s":[205.333,308.553],"to":[0,0],"ti":[0,0]},{"i":{"x":0.1,"y":1},"o":{"x":0.167,"y":0},"t":117,"s":[205.333,308.553],"to":[0,53.167],"ti":[0,-53.167]},{"t":128.000005213547,"s":[205.333,627.553]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":70,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":46.0000018736184,"op":124.000005050624,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Слой-фигура 7","sr":1,"ks":{"o":{"a":0,"k":70,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[460.057,715.19,0],"to":[18.667,46.333,0],"ti":[144.541,16.554,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[246.057,931.19,0],"to":[-29.373,-3.364,0],"ti":[-14.37,89.266,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[132.057,819.19,0],"to":[12.853,-79.844,0],"ti":[-6.383,70.014,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":95,"s":[207.057,686.19,0],"to":[8.273,-90.747,0],"ti":[30.333,-18.333,0]},{"t":105.000004276738,"s":[25.057,796.19,0]}],"ix":2,"l":2},"a":{"a":0,"k":[-299,-555,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":18,"s":[0,0]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":22,"s":[47,47]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":102,"s":[47,47]},{"t":108.00000439893,"s":[0,0]}],"ix":2},"p":{"a":0,"k":[-39,-247],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":19,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-260,-308],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":4.00000016292334,"op":109.000004439661,"st":4.00000016292334,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Слой-фигура 6","sr":1,"ks":{"o":{"a":0,"k":70,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[366.057,671.19,0],"to":[-32.667,16,0],"ti":[2.524,95.967,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[170.057,767.19,0],"to":[-2,-76.04,0],"ti":[-14.37,89.266,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[44.057,633.19,0],"to":[12.853,-79.844,0],"ti":[-6.383,70.014,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":95,"s":[211.057,566.19,0],"to":[8.273,-90.747,0],"ti":[23,26.333,0]},{"t":105.000004276738,"s":[73.057,408.19,0]}],"ix":2,"l":2},"a":{"a":0,"k":[-299,-555,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":18,"s":[0,0]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":22,"s":[47,47]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":102,"s":[47,47]},{"t":108.00000439893,"s":[0,0]}],"ix":2},"p":{"a":0,"k":[-39,-247],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":19,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-260,-308],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":4.00000016292334,"op":109.000004439661,"st":4.00000016292334,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Слой-фигура 8","sr":1,"ks":{"o":{"a":0,"k":70,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[579.057,722.19,0],"to":[27.081,-3.298,0],"ti":[-70.512,-6.671,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36,"s":[658.407,765.459,0],"to":[47.092,4.455,0],"ti":[6.382,83.656,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[834.057,677.19,0],"to":[-8.701,-114.049,0],"ti":[24.63,43.266,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[934.057,452.19,0],"to":[-40.009,-70.281,0],"ti":[2.326,37.536,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":95,"s":[778.057,503.69,0],"to":[-5.044,-81.411,0],"ti":[-57.167,78.583,0]},{"t":105.000004276738,"s":[951.057,240.19,0]}],"ix":2,"l":2},"a":{"a":0,"k":[-299,-555,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":18,"s":[0,0]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":22,"s":[47,47]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":102,"s":[47,47]},{"t":108.00000439893,"s":[0,0]}],"ix":2},"p":{"a":0,"k":[-39,-247],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":19,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-260,-308],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":4.00000016292334,"op":109.000004439661,"st":4.00000016292334,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Слой-фигура 5","sr":1,"ks":{"o":{"a":0,"k":70,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[650.057,673.19,0],"to":[36.667,39.167,0],"ti":[-59.476,87.967,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[870.057,908.19,0],"to":[42.605,-63.015,0],"ti":[35.055,35.352,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[938.057,660.19,0],"to":[-32.009,-32.281,0],"ti":[15.092,-31.188,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":95,"s":[788.057,737.69,0],"to":[-13.552,28.005,0],"ti":[-43.167,-33.417,0]},{"t":105.000004276738,"s":[969.057,798.19,0]}],"ix":2,"l":2},"a":{"a":0,"k":[-299,-555,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":18,"s":[0,0]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":22,"s":[47,47]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":102,"s":[47,47]},{"t":108.00000439893,"s":[0,0]}],"ix":2},"p":{"a":0,"k":[-39,-247],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":19,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-260,-308],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":4.00000016292334,"op":109.000004439661,"st":4.00000016292334,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Слой-фигура 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-27,"ix":10},"p":{"a":0,"k":[298,335,0],"ix":2,"l":2},"a":{"a":0,"k":[-343,23,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":86.224,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-344,22],[-343.75,22.5]],"c":false}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":90.451,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-346.342,9.213],[-339.784,-79.283]],"c":false}]},{"t":95.2475038795102,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-344,-119],[-343.75,-118.5]],"c":false}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.839215686275,0.121568627451,0.521568627451,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":85.913,"s":[0]},{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":86.224,"s":[20]},{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":95.091,"s":[20]},{"t":95.4025038858235,"s":[0]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":86.224,"s":[0,0],"to":[1.833,-14.833],"ti":[-1.833,14.833]},{"t":95.2475038795102,"s":[11,-89]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Фигура 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":86.0000035028518,"op":97.000003950891,"st":86.0000035028518,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Слой-фигура 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-73,"ix":10},"p":{"a":0,"k":[268,372,0],"ix":2,"l":2},"a":{"a":0,"k":[-343,23,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":88.773,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-344,22],[-343.75,22.5]],"c":false}]},{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":93,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-346.342,9.213],[-339.784,-79.283]],"c":false}]},{"t":97.795003983272,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-344,-119],[-343.75,-118.5]],"c":false}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.839215686275,0.121568627451,0.521568627451,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":88.461,"s":[0]},{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":88.773,"s":[20]},{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":97.64,"s":[20]},{"t":97.9512539896362,"s":[0]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.16,"y":1},"o":{"x":0.84,"y":0},"t":88.773,"s":[0,0],"to":[1.833,-14.833],"ti":[-1.833,14.833]},{"t":97.795003983272,"s":[11,-89]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Фигура 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":89.0000036250443,"op":99.0000040323527,"st":89.0000036250443,"bm":0},{"ddd":0,"ind":7,"ty":0,"nm":"Предварительная композиция 2","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.9],"y":[0]},"t":30,"s":[90]},{"t":93.0000037879676,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.1,"y":1},"o":{"x":0.9,"y":0},"t":0,"s":[500.875,327.125,0],"to":[0,33,0],"ti":[0,-33,0]},{"i":{"x":0.1,"y":0.1},"o":{"x":0.9,"y":0.9},"t":15,"s":[500.875,525.125,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.1,"y":1},"o":{"x":0.9,"y":0},"t":30,"s":[500.875,525.125,0],"to":[0,14.5,0],"ti":[0,-22,0]},{"i":{"x":0.1,"y":1},"o":{"x":0.9,"y":0},"t":69,"s":[500.875,612.125,0],"to":[0,22,0],"ti":[0,-1,0]},{"i":{"x":0.1,"y":1},"o":{"x":0.167,"y":0},"t":93,"s":[500.875,657.125,0],"to":[0,1,0],"ti":[0,55,0]},{"i":{"x":0.237,"y":0.529},"o":{"x":0.253,"y":0},"t":116,"s":[500.875,618.125,0],"to":[0,-44.168,0],"ti":[0,74.46,0]},{"i":{"x":0.565,"y":1},"o":{"x":0.243,"y":0.061},"t":132,"s":[500.875,751.883,0],"to":[0,-18.262,0],"ti":[0,9.552,0]},{"t":148.000006028164,"s":[500.875,327.125,0]}],"ix":2,"l":2},"a":{"a":0,"k":[500.875,644.125,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1000,"h":1000,"ip":0,"op":149.000006068894,"st":0,"bm":0}],"markers":[]} ================================================ FILE: src/app/onboarding/components/Welcome/Welcome.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { observer } from "mobx-react-lite" import styled, { keyframes } from "styled-components" import { Step, useStores } from "../../../store" import { BrandButton } from "../../../ui-kit/components/Button/BrandButton" import welcomeBg from "./welcome-bg.png" const Container = styled.div` background: url(${welcomeBg}) no-repeat, #8e3061; height: 100%; display: flex; flex-direction: column; justify-content: flex-start; -webkit-app-region: drag; ` const fadeIn = keyframes` from { opacity: 0; } to { opacity: 1; } ` const Title = styled.h1` padding-top: 280px; margin: 0; text-align: center; font-weight: bold; font-size: 24px; letter-spacing: 1px; color: #fff; animation: ${fadeIn} 0.4s ease-in-out; ` const Description = styled.p` width: 310px; margin: 16px auto 28px auto; text-align: center; font-size: 16px; line-height: 24px; letter-spacing: 0.75px; color: #fff; animation: ${fadeIn} 0.4s ease-in-out; ` const Actions = styled.div` margin-top: auto; display: flex; flex-direction: row; align-items: center; justify-content: center; margin-bottom: 57px; ` const GetStartedButton = styled(BrandButton)` min-width: 134px; box-shadow: inset 0 0.5px 1px #ff25a1, 2px 2px 3px rgba(0, 0, 0, 0.3); ` export const Welcome: React.FC = observer(function Welcome() { const rootStore = useStores() const onGetStarted = () => { return rootStore.startupSequence(Step.WELCOME_DONE) } return ( Welcome to Mysterium Network Connect to everything, everywhere via the Worldߴs first decentralized VPN. Get Started ) }) ================================================ FILE: src/app/onboarding/store.ts ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { action, makeObservable } from "mobx" import { RootStore, Step } from "../store" import { locations } from "../navigation/locations" import { log } from "../../shared/log/log" export class OnboardingStore { root: RootStore constructor(root: RootStore) { makeObservable(this, { onboardingStepsComplete: action, createNewID: action, registerWithReferralCode: action, finishIDSetup: action, }) this.root = root } onboardingStepsComplete = (): void => { this.root.config.setOnboarded() this.root.startupSequence(Step.ONBOARDING_STEPS_DONE) } createNewID = async (): Promise => { await this.root.identity.create() await this.root.identity.loadIdentity() const id = this.root.identity.identity if (!id) { log.error("ID not found, exiting") return } this.root.navigation.push(locations.onboardingIdentityBackup) } registerWithReferralCode = async (code: string): Promise => { const id = this.root.identity.identity if (!id) { log.error("ID not found, exiting") return } await this.root.identity.register(id, code) } finishIDSetup = (): void => { this.root.startupSequence(Step.IDENTITY_CREATE_DONE) } } ================================================ FILE: src/app/payment/components/SelectTaxCountry/SelectTaxCountry.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useEffect } from "react" import { observer } from "mobx-react-lite" import _ from "lodash" import { useStores } from "../../../store" import { Select } from "../../../ui-kit/form-components/Select" import { countryNames } from "../../../location/countries" export const SelectTaxCountry: React.FC = observer(() => { const { payment, connection } = useStores() useEffect(() => { if (payment.taxCountry) { return } const countryFromLocation = connection.originalLocation?.country payment.setTaxCountry(countryFromLocation) }, []) const options = _.mapKeys(countryNames, (value, key) => key.toUpperCase()) return (
) }) ================================================ FILE: src/app/payment/components/SelectTaxState/SelectTaxState.tsx ================================================ /** * Copyright (c) 2022 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { observer } from "mobx-react-lite" import { useStores } from "../../../store" import { Select } from "../../../ui-kit/form-components/Select" import { STATES } from "../../../location/states" export const SelectTaxState: React.FC = observer(() => { const { payment } = useStores() const options = STATES[payment.taxCountry ?? ""] return (
) }) ================================================ FILE: src/app/payment/currency.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ export const isLightningAvailable = (currency?: string): boolean => { return currency == "BTC" || currency == "LTC" } export interface AmountMultiCurrency { MYST?: number USD?: number } ================================================ FILE: src/app/payment/display.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { DECIMAL_PART, Tokens } from "mysterium-vpn-js" import BigNumber from "bignumber.js" export const decimalPart = (): number => { return DECIMAL_PART } export const displayUSD = (amount: number): string => { return "$" + new BigNumber(amount).toFixed(2) } export const displayTokens2 = (tokens?: Tokens): string => { return new BigNumber(tokens?.human ?? 0).toFixed(2) } export const displayTokens4 = (tokens?: Tokens): string => { return new BigNumber(tokens?.human ?? 0).toFixed(4) } ================================================ FILE: src/app/payment/methods.ts ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { PaymentGateway } from "mysterium-vpn-js" import { IconProp } from "@fortawesome/fontawesome-svg-core" import { faBitcoin, faPaypal } from "@fortawesome/free-brands-svg-icons" import { faCreditCard } from "@fortawesome/free-solid-svg-icons" export enum PaymentMethodName { COINGATE = "coingate", PAYPAL = "paypal", STRIPE = "stripe", MYST = "myst", } export enum Gateway { COINGATE = "coingate", PAYPAL = "paypal", STRIPE = "stripe", } export interface PaymentMethodMetadata { displayOrder: number displayText: string gateway: string icon?: IconProp } export type PaymentMethod = { name: PaymentMethodName gatewayData: PaymentGateway } & PaymentMethodMetadata export const SUPPORTED_METHODS: { [key: string]: PaymentMethodMetadata } = { [PaymentMethodName.COINGATE]: { displayOrder: 0, displayText: "Crypto", icon: faBitcoin, gateway: "coingate", }, [PaymentMethodName.PAYPAL]: { displayOrder: 1, displayText: "Paypal", icon: faPaypal, gateway: "paypal", }, [PaymentMethodName.STRIPE]: { displayOrder: 2, displayText: "Credit card", icon: faCreditCard, gateway: "stripe", }, [PaymentMethodName.MYST]: { displayOrder: 3, displayText: "MYST", gateway: "coingate", }, } ================================================ FILE: src/app/payment/rate.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import BigNumber from "bignumber.js" export const mystToUSD = (myst: number, rate?: number): number | undefined => { if (!rate) { return } return new BigNumber(myst).times(rate).toNumber() } ================================================ FILE: src/app/payment/store.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { action, computed, makeObservable, observable, runInAction, toJS, when } from "mobx" import { CreatePaymentOrderRequest, Currency, EntertainmentEstimateResponse, FeesV2, Money, PaymentGateway, PaymentOrder, } from "mysterium-vpn-js" import retry from "async-retry" import { ipcRenderer } from "electron" import BigNumber from "bignumber.js" import { RootStore } from "../store" import { DaemonStatusType } from "../daemon/store" import { log, logErrorMessage } from "../../shared/log/log" import { tequilapi } from "../tequilapi" import { parseError } from "../../shared/errors/parseError" import { MainIpcListenChannels } from "../../shared/ipc" import { AmountMultiCurrency, isLightningAvailable } from "./currency" import { Gateway, PaymentMethod, SUPPORTED_METHODS } from "./methods" export enum OrderStatus { PENDING, SUCCESS, FAILED, } export enum MystChain { POLYGON = "polygon", ETHEREUM = "ethereum", } export class PaymentStore { root: RootStore appCurrency: Currency = Currency.MYST appFiatCurrency = "USD" fees?: FeesV2 mystToUsdRate?: Money topUpAmountUSD?: number paymentMethod?: PaymentMethod paymentGateways?: PaymentGateway[] paymentMethods: PaymentMethod[] = [] paymentCurrency?: string chain?: MystChain taxCountry?: string taxState?: string lightningNetwork = false order?: PaymentOrder orderExpiresAt?: Date constructor(root: RootStore) { makeObservable(this, { appCurrency: observable, fees: observable, mystToUsdRate: observable, topUpAmountUSD: observable, paymentMethod: observable, paymentGateways: observable, paymentMethods: observable, currencies: computed, orderOptions: computed, paymentCurrency: observable, chain: observable, taxCountry: observable, taxState: observable, lightningNetwork: observable, order: observable, fetchTransactorFees: action, fetchMystToUsdRate: action, createOrder: action, openOrderSecureForm: action, orderStatus: computed, downloadInvoice: action, clearOrder: action, clearPaymentOptions: action, setPaymentMethod: action, setPaymentCurrency: action, setLightningNetwork: action, setTaxCountry: action, setTaxState: action, setChain: action, setTopupAmountUSD: action, refreshBalance: action, }) this.root = root } setupReactions(): void { when( () => this.root.daemon.status == DaemonStatusType.Up, () => { this.fetchMystToUsdRate() }, ) } async fetchTransactorFees(): Promise { const fees = await tequilapi.transactorFeesV2() runInAction(() => { this.fees = fees?.current }) } async fetchMystToUsdRate(): Promise { const res = await tequilapi.exchangeRate("usd") runInAction(() => { this.mystToUsdRate = res }) } fiatEquivalent(amount: number): number { const rate = this.mystToUsdRate?.amount ?? 0 return new BigNumber(amount).times(rate).toNumber() } async fetchPaymentGateways(): Promise { const gateways = await tequilapi.payment.gateways("USD") runInAction(() => { this.paymentGateways = gateways }) runInAction(() => { this.paymentMethods = Object.keys(SUPPORTED_METHODS) .map((name) => { const meta = SUPPORTED_METHODS[name] const gatewayData = this.paymentGateways?.find((gw) => gw.name === meta.gateway) return { name, ...meta, gatewayData } as PaymentMethod }) .filter((m) => m.gatewayData != null) .sort((a, b) => (a < b ? -1 : 1)) }) } get orderOptions(): number[] { return this.paymentMethod?.gatewayData.orderOptions.suggested ?? [] } get currencies(): string[] { return this.paymentMethod?.gatewayData.currencies ?? [] } buildCallerData(): CreatePaymentOrderRequest["gatewayCallerData"] { const gateway = this.paymentMethod?.gateway switch (gateway) { case Gateway.COINGATE: return { lightningNetwork: this.lightningNetwork, } case Gateway.PAYPAL: case Gateway.STRIPE: return {} } throw new Error("Unsupported payment gateway: " + gateway) } validateOrderResponse(order: PaymentOrder): void { switch (this.paymentMethod?.gateway) { case Gateway.COINGATE: if (!order.publicGatewayData?.paymentUrl) { throw new Error("Could not retrieve payment URL") } return case Gateway.STRIPE: if (!order.publicGatewayData?.secureForm) { throw new Error("Could not retrieve secure form for payment") } return } } async createOrder(): Promise { const id = this.root.identity.identity?.id if (!id || !this.topUpAmountUSD || !this.paymentCurrency || !this.paymentMethod) { return } const order = await tequilapi.payment.createOrder(id, this.paymentMethod.gateway, { country: this.taxCountry || "", state: this.taxState || "", amountUsd: new BigNumber(this.topUpAmountUSD).toFixed(2), payCurrency: this.paymentCurrency, gatewayCallerData: this.buildCallerData(), }) log.info("Payment order created", order) this.validateOrderResponse(order) log.info("Payment order validated") runInAction(() => { this.order = order if (order.publicGatewayData?.expireAt) { this.orderExpiresAt = new Date(order.publicGatewayData.expireAt) } }) retry( async () => { if (!this.order) { return } const order = await tequilapi.payment.order(id, this.order.id) runInAction(() => { this.order = order log.info("Updated order", toJS(this.order)) if (this.orderStatus == OrderStatus.PENDING) { throw Error("Order is in pending state") } }) }, { retries: 60, factor: 1, minTimeout: 10_000, onRetry: (e, attempt) => log.warn(`Retrying payment order check (${attempt}): ${e.message}`), }, ) } async openOrderSecureForm(): Promise { if (this.order?.publicGatewayData?.secureForm) { ipcRenderer.send( MainIpcListenChannels.OpenSecureFormPaymentWindow, this.order.publicGatewayData?.secureForm, ) } } get orderStatus(): OrderStatus { if (!this.order) { return OrderStatus.PENDING } if (["confirming", "paid"].includes(this.order.status)) { return OrderStatus.SUCCESS } else if (["invalid", "expired", "canceled", "failed"].includes(this.order.status)) { return OrderStatus.FAILED } else { return OrderStatus.PENDING } } async downloadInvoice(): Promise { const id = this.root.identity.identity?.id const orderId = this.order?.id if (!id || !orderId) { return } const data = await tequilapi.payment.invoice(id, orderId) // create a download anchor tag const downloadLink = document.createElement("a") downloadLink.target = "_blank" downloadLink.download = `MysteriumVPN-order-${orderId}.pdf` // convert downloaded data to a Blob const blob = new Blob([data], { type: "application/pdf" }) // create an object URL from the Blob const URL = window.URL || window.webkitURL const downloadUrl = URL.createObjectURL(blob) // set object URL as the anchor's href downloadLink.href = downloadUrl // append the anchor to document body document.body.appendChild(downloadLink) // fire a click event on the anchor downloadLink.click() // cleanup: remove element and revoke object URL document.body.removeChild(downloadLink) URL.revokeObjectURL(downloadUrl) } async startTopupFlow(location: string): Promise { await Promise.all([this.fetchPaymentGateways(), this.fetchMystToUsdRate()]) this.setPaymentMethod(undefined) this.clearPaymentOptions() this.clearOrder() this.root.navigation.push(location) } async onPaymentMethodChosen(): Promise { this.clearPaymentOptions() this.clearOrder() } clearOrder(): void { this.order = undefined this.orderExpiresAt = undefined } clearPaymentOptions(): void { this.setPaymentCurrency(undefined) this.setLightningNetwork(false) this.setChain(undefined) this.setTopupAmountUSD(undefined) } setPaymentMethod = (pm?: PaymentMethod): void => { this.paymentMethod = pm } setPaymentCurrency = (currency?: string): void => { this.paymentCurrency = currency this.lightningNetwork = isLightningAvailable(currency) } setChain = (chain?: MystChain): void => { this.chain = chain } setTaxCountry = (country?: string): void => { this.taxCountry = country } setTaxState = (state?: string): void => { this.taxState = state } setLightningNetwork = (use: boolean): void => { this.lightningNetwork = use } setTopupAmountUSD = (amountUSD?: number): void => { this.topUpAmountUSD = amountUSD } estimateEntertainment = async (amount: AmountMultiCurrency): Promise => { let amt if (amount.USD != null && this.mystToUsdRate?.amount) { amt = amount.USD / this.mystToUsdRate.amount } else if (amount.MYST != null) { amt = amount.MYST } else { return undefined } try { return await tequilapi .estimateEntertainment({ amount: amt }) .then((res: EntertainmentEstimateResponse) => ({ videoMinutes: Number((res.videoMinutes / 60).toFixed(0)), musicMinutes: Number((res.musicMinutes / 60).toFixed(0)), browsingMinutes: Number((res.browsingMinutes / 60).toFixed(0)), trafficMb: Number((res.trafficMb / 1024).toFixed()), })) } catch (err) { const msg = parseError(err) logErrorMessage("Failed to estimate entertainment for amount: " + amount, msg) return undefined } } refreshBalance = async (): Promise => { const id = this.root.identity.identity?.id if (!id) { return } await tequilapi.identityBalanceRefresh(id) } } ================================================ FILE: src/app/proposals/components/CountryFilter/CountryFilter.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useEffect, useRef } from "react" import { observer } from "mobx-react-lite" import styled from "styled-components" import { useStores } from "../../../store" import { Toggle } from "../../../ui-kit/components/Toggle/Toggle" import { countryName, isUnknownCountry } from "../../../location/countries" import { Flag } from "../../../location/components/Flag/Flag" import { IconGlobe } from "../../../ui-kit/icons/IconGlobe" import { brand } from "../../../ui-kit/colors" const Container = styled.div` flex: 1; display: flex; flex-direction: column; padding: 0 12px; overflow-y: scroll; position: relative; /* For scrollTop to work properly on children */ ` const CountryToggle = styled(Toggle).attrs({ activeShadowColor: "0px 5px 10px rgba(214, 31, 133, 0.2)", })`` const CountryName = styled.div` margin-left: 10px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; ` const Count = styled.span` margin-left: auto; ` export const CountryFilter = observer(function CountryFilter() { const { proposals, filters } = useStores() const myRef = useRef(null) useEffect(() => { const parent = myRef.current?.parentNode if (parent) { ;(parent as HTMLDivElement).scrollTop = myRef.current?.offsetTop } }, [proposals.proposalsCurrent.length != 0, filters.presetID, proposals.suggestion]) const countryCounts = proposals.countryCounts if (!Object.keys(countryCounts).length) { return <> } const sortedCountries = Object.keys(countryCounts).sort((self, other) => { if (isUnknownCountry(self)) { return 1 } return countryName(self).localeCompare(countryName(other)) }) return ( proposals.setCountryFilter(undefined)} active={filters.country == null} > All countries {proposals.proposalsAll.length} {sortedCountries.map((countryCode) => { const toggleAction = (): void => { proposals.toggleCountryFilter(countryCode) } return ( {countryName(countryCode)} {countryCounts[countryCode]} ) })} ) }) ================================================ FILE: src/app/proposals/components/Preset/Preset.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import styled from "styled-components" import { observer } from "mobx-react-lite" import { Toggle } from "../../../ui-kit/components/Toggle/Toggle" import { useStores } from "../../../store" import { IconMedia } from "../../../ui-kit/icons/IconMedia" import { brandLight } from "../../../ui-kit/colors" import { IconProps } from "../../../ui-kit/icons/Props" import { IconBrowsing } from "../../../ui-kit/icons/IconBrowsing" import { IconDownload } from "../../../ui-kit/icons/IconDownload" import { IconNoPreset } from "../../../ui-kit/icons/IconNoPreset" const Container = styled.div`` const PresetToggle = styled(Toggle).attrs({ activeShadowColor: "0px 5px 10px rgba(214, 31, 133, 0.2)", })` svg { margin-right: 10px; } ` const PresetIcons: { [key: string]: React.FC | undefined } = { "Media Streaming": IconMedia, Browsing: IconBrowsing, Download: IconDownload, "All nodes": IconNoPreset, } export const Preset: React.FC = observer(function Preset() { const { proposals, filters } = useStores() if (!proposals.filterPresets) { return <> } const togglePreset = (id: number): Promise => { return proposals.toggleFilterPreset(id) } const isActive = (id: number): boolean => { return (filters.config.preset?.id ?? 0) == id } return ( {proposals.filterPresets.map((p) => { const Icon = PresetIcons[p.name] || IconNoPreset return ( togglePreset(p.id)} active={isActive(p.id)}> {p.name} ) })} ) }) ================================================ FILE: src/app/proposals/components/ProposalQuality/ProposalQuality.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { QualityLevel } from "mysterium-vpn-js" import styled from "styled-components" import { brandLight } from "../../../ui-kit/colors" export interface QualityProps { level?: QualityLevel color?: string } const Svg = styled.svg` .active & > rect { fill: #fff; } ` export const ProposalQuality: React.FC = ({ level, color = brandLight }) => { return ( 0 ? 1 : 0.2} /> = 1 ? 1 : 0.2} /> = 2 ? 1 : 0.2} /> ) } ================================================ FILE: src/app/proposals/components/ProposalTable/ProposalTable.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { CSSProperties, useEffect, useRef } from "react" import styled from "styled-components" import { observer } from "mobx-react-lite" import { Column, useBlockLayout, useSortBy, useTable } from "react-table" import { FixedSizeList } from "react-window" import AutoSizer from "react-virtualized-auto-sizer" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { faRegistered } from "@fortawesome/free-solid-svg-icons" import { useStores } from "../../../store" import { UIProposal } from "../../uiProposal" import { ProposalQuality } from "../ProposalQuality/ProposalQuality" import { brand } from "../../../ui-kit/colors" import { IconPriceTier } from "../../../ui-kit/icons/IconPriceTier" import { displayTokens4 } from "../../../payment/display" import { RowRenderer } from "./RowRenderer" const Styles = styled.div` flex: 1; min-height: 0; display: flex; .table { flex: 1; min-height: 0; display: flex; flex-direction: column; overflow: hidden; } .td, .th { height: 25px; line-height: 25px; white-space: nowrap; overflow: hidden; &.sorted-asc { box-shadow: inset 1px -4px 0px -2px ${brand}; } &.sorted-desc { box-shadow: inset 1px 4px 0px -2px ${brand}; } } .th { color: #5a597d; opacity: 0.5; &:last-child { padding: 0; } } .thead { .tr { box-sizing: border-box; padding-left: 12px; font-size: 11px; border-bottom: 1px dashed #dfdff3; } } .tbody { flex: 1; } ` const CellCenter = styled.div` width: 100%; height: 100%; display: flex; align-items: center; justify-content: flex-start; ` type TableProps = { columns: Column[] data: UIProposal[] } const hiddenColsSingleCountry = ["countryName"] const hiddenColsAllCountries = ["priceHour", "priceGib"] const Table: React.FC = observer(function Table({ columns, data }) { const { proposals, filters } = useStores() const defaultColumn = React.useMemo( () => ({ width: 50, }), [], ) const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow, setHiddenColumns, state } = useTable( { columns, data, defaultColumn, autoResetSortBy: false, initialState: { sortBy: [{ id: "countryName" }, { id: "qualityLevel", desc: true }], hiddenColumns: filters.country == null ? hiddenColsAllCountries : hiddenColsSingleCountry, }, }, useBlockLayout, useSortBy, ) useEffect(() => { if (filters.country == null) { if (state.hiddenColumns != hiddenColsAllCountries) { setHiddenColumns(hiddenColsAllCountries) } } else { if (state.hiddenColumns != hiddenColsSingleCountry) { setHiddenColumns(hiddenColsSingleCountry) } } }, [filters.country]) const listRef = useRef(null) useEffect(() => { if (proposals.suggestion) { const idx = rows.findIndex((row) => row.original.providerId === proposals.suggestion?.providerId) if (idx != -1) { listRef.current?.scrollToItem(idx, "center") } } }, [proposals.suggestion, data]) const renderRow = React.useCallback( ({ index, style }: { index: number; style: CSSProperties }): JSX.Element => { return }, [prepareRow, rows], ) return (
{headerGroups.map((headerGroup) => { const { style, key, ...restHeaderGroupProps } = headerGroup.getHeaderGroupProps() return (
{headerGroup.headers.map((column) => { const { key, ...restHeaderProps } = column.getHeaderProps( column.getSortByToggleProps({ title: column.canSort ? `Sort by ${column.Header}` : undefined, }), ) return (
{column.render("Header")}
) })}
) })}
{({ width, height }): JSX.Element => ( {renderRow} )}
) }) export const ProposalTable: React.FC = observer(function ProposalTable() { const { proposals } = useStores() const columns = React.useMemo[]>( () => [ { Header: "", accessor: "ipType", width: 25, Cell: (props) => { if (props.value === "residential") { return ( ) } return }, disableSortBy: true, }, { Header: "Node", accessor: "shortId", width: 120 }, { Header: "Country", accessor: "countryName", width: 124, }, { Header: "Price/h", id: "priceHour", accessor: (p): string => displayTokens4(p.price.perHourTokens), width: 62, sortType: "basic", }, { Header: "Price/GiB", id: "priceGib", accessor: (p): string => displayTokens4(p.price.perGibTokens), width: 62, sortType: "basic", }, { Header: "Price", accessor: (p): number => proposals.priceTier(p), width: 44, Cell: (props: { value: number }) => , }, { Header: "Quality", accessor: "qualityLevel", width: 42, sortDescFirst: true, Cell: (props) => { return ( ) }, }, ], [], ) as Column[] return ( ) }) ================================================ FILE: src/app/proposals/components/ProposalTable/RowRenderer.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { ListChildComponentProps } from "react-window" import { Row } from "react-table" import { observer } from "mobx-react-lite" import React from "react" import styled from "styled-components" import { useStores } from "../../../store" import { UIProposal } from "../../uiProposal" import { Toggle } from "../../../ui-kit/components/Toggle/Toggle" import { darkBlue, lightBlue } from "../../../ui-kit/colors" const TableToggle = styled(Toggle).attrs({ activeColor: "#5a597d", hoverColor: lightBlue, textColor: darkBlue, paddingX: "6px", })`` export type RowRendererProps = { prepareRow: (row: Row) => void rows: Array> } & Omit export const RowRenderer: React.FC = observer(({ index, rows, style, prepareRow }) => { const { proposals } = useStores() const row = rows[index] prepareRow(row) const active = proposals.active?.key == row.original.key const onClick = (): void => proposals.toggleActiveProposal(row.original) const rowMarginX = 6 return (
{row.cells.map((cell) => { const { key, ...rest } = cell.getCellProps() return (
{cell.render("Cell")}
) })}
) }) ================================================ FILE: src/app/proposals/components/QualityFilter/QualityFilter.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { ChangeEvent, useEffect, useState } from "react" import { observer } from "mobx-react-lite" import styled from "styled-components" import { QualityLevel } from "mysterium-vpn-js" import { useStores } from "../../../store" import { Small } from "../../../ui-kit/typography" const Container = styled.div` width: 100%; flex: 1; display: flex; flex-direction: column; ` const RangeContainer = styled.div` height: 32px; margin-bottom: 16px; ` const Label = styled(Small)` opacity: 0.7; ` const Range = styled.input` width: 100%; margin: 10px 0; ` const displayQuality = (q?: QualityLevel): string => { switch (q) { case QualityLevel.MEDIUM: return "Medium+" case QualityLevel.HIGH: return "High" default: return "Any" } } export const QualityFilter = observer(() => { const { proposals, filters } = useStores() const quality = filters.config.quality?.level const qualityText = displayQuality(quality) const [range, setRange] = useState<{ quality?: QualityLevel }>({ quality }) useEffect(() => { setRange({ ...range, quality: filters.config.quality?.level }) }, [filters.config.quality?.level]) const onChange = (event: ChangeEvent): void => { const val = event.target.valueAsNumber proposals.setQualityFilter(val) setRange({ ...range, quality: val }) } return ( ) }) ================================================ FILE: src/app/proposals/components/SelectedProposal/SelectedProposal.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { observer } from "mobx-react-lite" import styled, { keyframes } from "styled-components" import { useStores } from "../../../store" import { ConnectButton } from "../../../connection/components/ConnectButton/ConnectButton" import { Flag } from "../../../location/components/Flag/Flag" import { displayTokens4 } from "../../../payment/display" const slideIn = keyframes` from { transform: translateY(100%); } to { transform: none; } ` const fadeIn = keyframes` from { opacity: 0; } to { opacity: 1; } ` const Container = styled.div` box-sizing: border-box; height: 60px; padding: 0 15px; width: 100%; box-shadow: 0px 0px 20px rgba(109, 60, 121, 0.3); border-radius: 10px; animation: ${slideIn} 150ms ease-in-out; ` const Inner = styled.div` display: flex; height: 60px; align-items: center; justify-content: space-between; opacity: 1; animation: ${fadeIn} 250ms ease-in-out; ` const ProposalFlag = styled(Flag)` padding-right: 7px; ` const ProviderId = styled.div` user-select: text; font-weight: bold; padding-right: 7px; ` const Pricing = styled.div` font-size: 11px; ` const ConnectWrapper = styled.div` margin-left: auto; ` export const SelectedProposal: React.FC = observer(function SelectedProposal() { const { proposals } = useStores() const proposal = proposals.active if (!proposal) { return <> } const timeRate = displayTokens4(proposal.price.perHourTokens) const trafficRate = displayTokens4(proposal.price.perGibTokens) const pricingText = `${timeRate}/h ${trafficRate}/GiB` return ( {proposal.shortId} {pricingText} ) }) ================================================ FILE: src/app/proposals/store.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { action, computed, makeObservable, observable, reaction, runInAction, when } from "mobx" import { ConnectionStatus, ProposalQuery, QualityLevel } from "mysterium-vpn-js" import * as _ from "lodash" import { FilterPreset } from "mysterium-vpn-js" import { RootStore } from "../store" import { DaemonStatusType } from "../daemon/store" import { logErrorMessage } from "../../shared/log/log" import { PriceCeiling, ProposalFilters } from "../config/store" import { tequilapi } from "../tequilapi" import { parseError } from "../../shared/errors/parseError" import { compareProposal, newUIProposal, UIProposal } from "./uiProposal" const supportedServiceType = "wireguard" const proposalRefreshRate = 30_000 type Dict = _.Dictionary type CountryCounts = { [code: string]: number } export class ProposalStore { loading = false proposalsCurrent: UIProposal[] = [] proposalsAll: UIProposal[] = [] proposalsByCountry: Dict = {} countryCounts: CountryCounts = {} proposalsAllPresetsForQuickSearch: UIProposal[] = [] filterPresets: FilterPreset[] = [] active?: UIProposal suggestion?: UIProposal root: RootStore constructor(root: RootStore) { makeObservable(this, { loading: observable, proposalsCurrent: observable.ref, countryCounts: observable.ref, proposalsAllPresetsForQuickSearch: observable.ref, filterPresets: observable.ref, active: observable.ref, suggestion: observable.ref, filters: computed, fetchProposals: action, fetchAllProposalsForQuickSearch: action, prepareForQuickSearch: action, fetchProposalFilterPresets: action, setQualityFilter: action, setIncludeFailed: action, setCountryFilter: action, toggleCountryFilter: action, filteredProposals: computed, priceCeil: computed, toggleActiveProposal: action, setActiveProposal: action, useQuickSearchSuggestion: action, setLoading: action, setProposals: action, setProposalsCurrent: action, }) this.root = root } setupReactions(): void { reaction( () => this.root.daemon.status, async (status) => { if (status == DaemonStatusType.Up && this.root.connection.status === ConnectionStatus.NOT_CONNECTED) { when( () => this.root.config.loaded, () => { this.fetchProposals().then(() => { this.setProposalsCurrent() }) this.fetchProposalFilterPresets() }, ) } }, ) setInterval(async () => { if (this.root.daemon.status != DaemonStatusType.Up) { return } if (this.root.connection.status === ConnectionStatus.CONNECTED) { return } await this.fetchProposals() }, proposalRefreshRate) } get filters(): ProposalFilters { return this.root.filters.config } async fetchProposals(): Promise { if (this.loading) { return } this.setLoading(true) try { const query: ProposalQuery = { serviceType: supportedServiceType, } query.presetId = this.filters.preset?.id ?? undefined query.qualityMin = this.filters.quality?.level query.natCompatibility = this.root.config.autoNATCompatibility ? this.root.connection.natType : undefined const proposals = await tequilapi.findProposals(query).then((proposals) => proposals.map(newUIProposal)) this.setProposals(proposals) } catch (err) { const msg = parseError(err) logErrorMessage("Could not get proposals", msg) } this.setLoading(false) } async fetchProposalFilterPresets(): Promise { let systemPresets: FilterPreset[] = [] try { const res = await tequilapi.proposalFilterPresets() systemPresets = res.items } catch (err) { const msg = parseError(err) logErrorMessage("Could not get proposal filter presets", msg) } runInAction(() => { this.filterPresets = systemPresets.concat([{ id: 0, name: "All nodes" }]) }) } async toggleFilterPreset(id: number | null): Promise { if (this.filters.preset?.id == id) { id = null } await this.root.filters.setPartial({ preset: { id } }) await this.fetchProposals() this.setProposalsCurrent() } // ##################### // Quality filter // ##################### async setQualityFilter(level: QualityLevel): Promise { await this.root.filters.setPartial({ quality: { level }, }) await this.fetchProposals() } setIncludeFailed(includeFailed: boolean): void { this.root.filters.setPartial({ quality: { "include-failed": includeFailed, }, }) } // ##################### // Country filter // ##################### async setCountryFilter(countryCode?: string): Promise { await this.root.filters.setPartial({ other: { country: countryCode ?? null, }, }) requestIdleCallback(() => { this.setProposalsCurrent() }) } toggleCountryFilter(countryCode?: string): void { this.setCountryFilter(this.root.filters.country !== countryCode ? countryCode : undefined) this.toggleActiveProposal(undefined) } // ##################### // Resulting list of proposals // ##################### get filteredProposals(): UIProposal[] { return this.proposalsCurrent } get priceCeil(): PriceCeiling { return { perGibMax: Math.max(...this.filteredProposals.map((p) => p.price.perGib)), } } priceTier = (p: UIProposal): number => { const perGibMax = this.priceCeil?.perGibMax ?? 0 if (p.price.perGib > perGibMax * 0.75) { return 3 } if (p.price.perGib > perGibMax * 0.25) { return 2 } if (p.price.perGib > 0) { return 1 } return 0 } // ##################### // End of filters // ##################### toggleActiveProposal(proposal?: UIProposal): void { this.active = this.active?.key !== proposal?.key ? proposal : undefined } setActiveProposal(proposal?: UIProposal): void { this.active = proposal } async prepareForQuickSearch(): Promise { if (this.filters.preset?.id) { this.toggleFilterPreset(0) } return this.fetchAllProposalsForQuickSearchDebounced() } fetchAllProposalsForQuickSearchDebounced = _.throttle(this.fetchAllProposalsForQuickSearch, 60_000) async fetchAllProposalsForQuickSearch(): Promise { const allProposals = await tequilapi .findProposals({ includeMonitoringFailed: true, }) .then((proposals) => proposals.map(newUIProposal)) runInAction(() => { this.proposalsAllPresetsForQuickSearch = allProposals }) } async useQuickSearchSuggestion(proposal?: UIProposal): Promise { await this.setCountryFilter(proposal?.country) runInAction(() => (this.active = proposal)) runInAction(() => (this.suggestion = proposal)) } setLoading = (b: boolean): void => { this.loading = b } setProposals = (proposals: UIProposal[]): void => { proposals = proposals.sort(compareProposal) this.proposalsAll = proposals this.proposalsByCountry = _.groupBy(proposals, "country") // observable this.countryCounts = _.mapValues(this.proposalsByCountry, (ps) => ps.length) } setProposalsCurrent = (): void => { const country = this.root.filters.country this.proposalsCurrent = country ? this.proposalsByCountry[country] ?? [] : this.proposalsAll } } ================================================ FILE: src/app/proposals/uiProposal.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { Proposal, qualityLevel, QualityLevel } from "mysterium-vpn-js" import { countryName } from "../location/countries" export type ProposalKey = string export interface UIProposal extends Proposal { key: ProposalKey country: string countryName: string shortId: string qualityLevel?: QualityLevel ipType: string } const shortId = (id: string): string => id.substring(0, 14) export const newUIProposal = (proposal: Proposal): UIProposal => { return { ...proposal, qualityLevel: qualityLevel(proposal.quality), key: proposal.providerId, country: proposal.location.country ?? "unknown", countryName: countryName(proposal.location.country ?? "unknown"), ipType: proposal.location.ipType ?? "unknown", shortId: shortId(proposal.providerId), } } export const compareProposal = (a: UIProposal, b: UIProposal): number => (a.key > b.key ? 1 : -1) ================================================ FILE: src/app/referral/store.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { action, makeObservable, observable } from "mobx" import * as _ from "lodash" import { RootStore } from "../store" import { log, logErrorMessage } from "../../shared/log/log" import { tequilapi } from "../tequilapi" import { decimalPart } from "../payment/display" import { parseError } from "../../shared/errors/parseError" export class ReferralStore { token?: string rewardAmount?: number message?: string loading = false root: RootStore constructor(root: RootStore) { makeObservable(this, { token: observable, rewardAmount: observable, message: observable, loading: observable, validateToken: action, resetToken: action, generateToken: action, setToken: action, setMessage: action, setLoading: action, }) this.root = root } async validateToken(code: string): Promise { this.token = undefined this.rewardAmount = undefined try { const res = await tequilapi.referralTokenRewards(code) if (!res.amount) { return false } this.token = code this.rewardAmount = Number(Number(BigInt(res.amount) / BigInt(decimalPart())).toFixed(1)) return true } catch (err) { log.error("Invalid referral token:", err) return false } } resetToken(): void { this.token = undefined this.rewardAmount = undefined } async generateToken(): Promise { const id = this.root.identity.identity?.id if (!id) { return } return _.throttle(async () => { this.setLoading(true) try { const tokenResponse = await tequilapi.getReferralToken(id) this.setToken(tokenResponse.token) } catch (err) { const msg = parseError(err) logErrorMessage("Referral token generation failed", msg) this.setMessage(msg.humanReadable) } finally { this.setLoading(false) } }, 60_000)() } setToken(token: string): void { this.token = token this.message = undefined } setMessage(message?: string): void { this.token = undefined this.message = message } setLoading(b: boolean): void { this.loading = b } } ================================================ FILE: src/app/storage/localStorage.ts ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ export const loadJSON = (key: string, fallback: () => T): T => { const value = localStorage.getItem(key) if (!value) { return fallback() } return JSON.parse(value) as T } export const storeJSON = (key: string, value: unknown): void => { if (typeof value === "string") { localStorage.setItem(key, value) return } localStorage.setItem(key, JSON.stringify(value)) } ================================================ FILE: src/app/store.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { action, computed, configure, makeObservable, observable, reaction, runInAction } from "mobx" import { ipcRenderer } from "electron" import { History } from "history" // import { enableLogging } from "mobx-logger" import { IdentityRegistrationStatus } from "mysterium-vpn-js" import { MainIpcListenChannels, WebIpcListenChannels } from "../shared/ipc" import { log } from "../shared/log/log" import { NavigationStore } from "./navigation/store" import { DaemonStatusType, DaemonStore } from "./daemon/store" import { ConfigStore } from "./config/store" import { IdentityStore } from "./identity/store" import { ProposalStore } from "./proposals/store" import { ConnectionStore } from "./connection/store" import { PaymentStore } from "./payment/store" import { FeedbackStore } from "./feedback/store" import { ReferralStore } from "./referral/store" import { Filters } from "./config/filters" import { OnboardingStore } from "./onboarding/store" import { analytics } from "./analytics/analytics" import { EventName } from "./analytics/event" import { locations } from "./navigation/locations" export const createRootStore = (history: History): RootStore => { rootStore = new RootStore(history) StoreContext = React.createContext(rootStore) return rootStore } export let rootStore: RootStore export let StoreContext: React.Context export enum Step { START = 0, WELCOME, WELCOME_DONE, TERMS, TERMS_DONE, ONBOARDING_STEPS, ONBOARDING_STEPS_DONE, IDENTITY_CREATE, IDENTITY_CREATE_DONE, IDENTITY_UPGRADE, IDENTITY_UPGRADE_DONE, IDENTITY_REGISTER, IDENTITY_REGISTER_DONE, COMPLETE, } export class RootStore { navigation: NavigationStore daemon: DaemonStore config: ConfigStore filters: Filters identity: IdentityStore onboarding: OnboardingStore proposals: ProposalStore connection: ConnectionStore payment: PaymentStore feedback: FeedbackStore referral: ReferralStore os = "" constructor(history: History) { makeObservable(this, { startupSequence: action, os: observable, isWindows: computed, isMacOS: computed, isLinux: computed, }) this.navigation = new NavigationStore(this, history) this.daemon = new DaemonStore(this) this.config = new ConfigStore(this) this.filters = new Filters(this) this.identity = new IdentityStore(this) this.onboarding = new OnboardingStore(this) this.proposals = new ProposalStore(this) this.connection = new ConnectionStore(this) this.payment = new PaymentStore(this) this.feedback = new FeedbackStore(this) this.referral = new ReferralStore(this) // Setup cross-store reactions after all injections. this.daemon.setupReactions() this.filters.setupReactions() this.identity.setupReactions() this.proposals.setupReactions() this.payment.setupReactions() this.connection.setupReactions() this.setupReactions() ipcRenderer.invoke(MainIpcListenChannels.GetOS).then((os) => { runInAction(() => { this.os = os }) }) } setupReactions(): void { reaction( () => this.daemon.status, async (status) => { if (status == DaemonStatusType.Up) { analytics.event(EventName.startup) log.info("[startup] Startup sequence start") await Promise.all([ this.config.loadConfig().catch((reason) => { log.warn("Could not load app config: ", reason) }), this.identity.loadIdentity().catch((reason) => { log.warn("Could not load identity: ", reason) }), ]) await this.startupSequence(Step.START) } }, ) window.addEventListener("online", () => console.log("online")) window.addEventListener("offline", () => console.log("offline")) } async startupSequence(resumeFromStep: Step): Promise { /* eslint-disable @typescript-eslint/ban-ts-comment */ // // noinspection FallThroughInSwitchStatementJS switch (resumeFromStep) { // @ts-ignore case Step.START: log.info("[startup] START") // @ts-ignore case Step.WELCOME: log.info("[startup] WELCOME") if (!this.config.onboarded) { log.info("[startup] User not onboarded, redirecting ->", locations.onboardingWelcome) this.navigation.push(locations.onboardingWelcome) return } // @ts-ignore case Step.WELCOME_DONE: log.info("[startup] WELCOME_DONE") // @ts-ignore case Step.TERMS: log.info("[startup] TERMS") if (!this.config.currentTermsAgreed) { log.info("[startup] Terms of use not accepted, redirecting ->", locations.terms) this.navigation.push(locations.terms) return } // @ts-ignore case Step.TERMS_DONE: log.info("[startup] TERMS_DONE") // @ts-ignore case Step.ONBOARDING_STEPS: log.info("[startup] ONBOARDING_STEPS") if (!this.config.onboarded) { log.info("[startup] User not onboarded, redirecting ->", locations.onboardingIntroIndex) this.navigation.push(locations.onboardingIntroIndex) return } // @ts-ignore case Step.ONBOARDING_STEPS_DONE: log.info("[startup] ONBOARDING_STEPS_DONE") // @ts-ignore case Step.IDENTITY_CREATE: log.info("[startup] IDENTITY_CREATE") if (!this.identity.identityExists) { log.info("[startup] No identity exists, redirecting ->", locations.onboardingIdentitySetup) this.navigation.push(locations.onboardingIdentitySetup) return } // @ts-ignore case Step.IDENTITY_CREATE_DONE: log.info("[startup] IDENTITY_CREATE_DONE") // @ts-ignore case Step.IDENTITY_UPGRADE: log.info("[startup] IDENTITY_UPGRADE") if (await this.identity.upgradeRequired()) { log.info("[startup] ID upgrade is required, redirecting ->", locations.idUpgrading) this.navigation.push(locations.idUpgrading) return } // @ts-ignore case Step.IDENTITY_UPGRADE_DONE: log.info("[startup] IDENTITY_UPGRADE_DONE") // @ts-ignore case Step.IDENTITY_REGISTER: log.info("[startup] IDENTITY_REGISTER") const id = this.identity.requireId() switch (id.registrationStatus) { case IdentityRegistrationStatus.Unknown: // Unable to check ID status - halt startup sequence return case IdentityRegistrationStatus.Unregistered: case IdentityRegistrationStatus.RegistrationError: if (await this.identity.balanceSufficientToRegister()) { this.navigation.push(locations.idRegistering) await this.identity.register(id) return } else { this.navigation.push(locations.onboardingTopupPrompt) return } case IdentityRegistrationStatus.InProgress: this.navigation.push(locations.idRegistering) return case IdentityRegistrationStatus.Registered: } // @ts-ignore case Step.IDENTITY_REGISTER_DONE: log.info("[startup] IDENTITY_REGISTER_DONE") // @ts-ignore case Step.COMPLETE: log.info("[startup] COMPLETE") this.navigation.navigateToInitialRoute() } /* eslint-enable @typescript-eslint/ban-ts-comment */ // } get isWindows(): boolean { return this.os === "win32" } get isMacOS(): boolean { return this.os === "darwin" } get isLinux(): boolean { return !this.isWindows && !this.isMacOS } } ipcRenderer.on(WebIpcListenChannels.Disconnect, async () => { await rootStore.connection.disconnect() }) configure({ enforceActions: "always" }) export const useStores = (): RootStore => React.useContext(StoreContext) ================================================ FILE: src/app/tequilapi/index.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { EventEmitter } from "events" import { parseSSEResponse, TequilapiClientFactory } from "mysterium-vpn-js" import { log } from "../../shared/log/log" export const TEQUILAPI_PORT = 44050 export const tequilapi = new TequilapiClientFactory(`http://127.0.0.1:${TEQUILAPI_PORT}`, 8_000).build() export const SSE_URL = `http://127.0.0.1:${TEQUILAPI_PORT}/events/state` export const eventBus = new EventEmitter() export const sseConnect = (): EventSource => { const es = new EventSource(SSE_URL) es.onerror = (evt): void => { log.error("[sse error]", evt) } es.onmessage = (evt): void => { const { type, payload } = parseSSEResponse(evt.data) log.debug("[sse message event]", type, JSON.stringify(payload, null, 2)) eventBus.emit(type, payload) } return es } ================================================ FILE: src/app/ui-kit/colors.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ export const brand = "#d61f85" export const brandLight = "#ed5bac" export const lightBlue = "#f4f4fc" export const greyBlue1 = "#9090bb" export const greyBlue2 = "#5a597d" export const darkBlue = "#3c3857" export const bg1 = "#020202" export const bg2 = "linear-gradient(180deg, #2B2745 0%, #454565 46.88%, #212045 100%)" ================================================ FILE: src/app/ui-kit/components/Anchor.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import styled from "styled-components" import { brandLight } from "../colors" export const Anchor = styled.a` cursor: pointer; text-decoration: underline; color: ${brandLight}; ` ================================================ FILE: src/app/ui-kit/components/Button/BrandButton.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import styled from "styled-components" import React from "react" import { faCircleNotch } from "@fortawesome/free-solid-svg-icons" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { brand } from "../../colors" export type BrandButtonProps = { background?: string disabledBackground?: string color?: string loading?: boolean className?: string } & React.ButtonHTMLAttributes const defaultProps = { background: brand, color: "#fff", disabledBackground: "#ccc", } const Button = styled.button` height: 35px; min-height: 35px; padding: 0 24px; border: none; font-size: 14px; line-height: 26px; font-weight: 500; border-radius: 100px; outline: none; box-shadow: ${(props) => { if (!props.disabled) { return "0px 10px 40px rgba(214, 31, 133, 0.4), inset 0px 0px 10px rgba(255, 98, 185, 0.5)" } return "none" }}; background: ${(props) => (!props.disabled ? props.background : props.disabledBackground)}; color: ${(props) => props.color}; transition: transform 0.2s; &:enabled:hover { filter: brightness(115%); } &:active { transform: scale(0.95); } -webkit-app-region: no-drag; user-select: none; ` const Icon = styled(FontAwesomeIcon)` margin-left: 8px; animation: fa-spin 0.7s infinite linear; ` export const BrandButton: React.FC = ({ background = defaultProps.background, disabledBackground = defaultProps.disabledBackground, color = defaultProps.color, loading = false, children, className = "", ...rest }) => { const indicator = loading ? : null return ( ) } ================================================ FILE: src/app/ui-kit/components/Button/CancelButton.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import styled from "styled-components" import { BrandButton, BrandButtonProps } from "./BrandButton" export const CancelButton = styled(BrandButton).attrs({ background: "#fefefe", color: "#d93c3c", })`` ================================================ FILE: src/app/ui-kit/components/Button/GhostButton.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import styled from "styled-components" import { BrandButton } from "./BrandButton" export const GhostButton = styled(BrandButton).attrs({ background: "transparent", color: "#fff", })` box-shadow: none; &:hover { background: rgba(255, 255, 255, 0.2); } ` ================================================ FILE: src/app/ui-kit/components/Button/LightButton.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import styled from "styled-components" import { BrandButton } from "./BrandButton" export const LightButton = styled(BrandButton).attrs({ background: "#ffffff44", color: "#fff", })` box-shadow: none; &:hover { background: rgba(255, 255, 255, 0.2); } ` ================================================ FILE: src/app/ui-kit/components/Button/OutlineButton.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import styled from "styled-components" import { darkBlue, lightBlue } from "../../colors" import { BrandButton } from "./BrandButton" export const OutlineButton = styled(BrandButton).attrs({ background: "transparent", color: darkBlue, })` box-shadow: none; border: 2px solid ${lightBlue}; &:hover { background: rgba(255, 255, 255, 0.2); } ` ================================================ FILE: src/app/ui-kit/components/Button/RippleButton.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import styled from "styled-components" import { brand } from "../../colors" export const RippleButton = styled.button` position: relative; display: inline-block; box-sizing: border-box; border: none; border-radius: 5px; padding: 0 16px; min-width: 64px; height: 36px; line-height: 36px; vertical-align: middle; text-align: center; text-overflow: ellipsis; color: #fff; background-color: ${brand}; overflow: hidden; cursor: pointer; &:before { content: ""; position: absolute; top: 0; bottom: 0; left: 0; right: 0; background-color: #fff; opacity: 0; transition: opacity 0.2s; } &:after { content: ""; position: absolute; left: 50%; top: 50%; border-radius: 50%; padding: 50%; background-color: #fff; opacity: 0; transform: translate(-50%, -50%) scale(1); transition: opacity 1s, transform 0.5s; } &:hover:before { opacity: 0.08; } &:focus:before { opacity: 0.24; } &:hover:focus:before { opacity: 0.3; } &:active:after { opacity: 0.32; transform: translate(-50%, -50%) scale(0); transition: transform 0s; } &:disabled { color: #777; background-color: #ccc; box-shadow: none; cursor: initial; } &:disabled:before, &:disabled:after { opacity: 0; } ` ================================================ FILE: src/app/ui-kit/components/Button/SecondaryButton.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import styled from "styled-components" import { darkBlue } from "../../colors" import { BrandButton } from "./BrandButton" export const SecondaryButton = styled(BrandButton).attrs({ background: darkBlue, })` box-shadow: none; ` ================================================ FILE: src/app/ui-kit/components/Button/SidebarButtons.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import styled from "styled-components" import { brand, darkBlue, lightBlue } from "../../colors" import { BrandButton } from "./BrandButton" export const PrimarySidebarActionButton = styled(BrandButton).attrs({ background: `${brand}11`, color: brand, })` border-radius: 10px; box-shadow: none; flex: 1; ` export const SecondarySidebarActionButton = styled(BrandButton).attrs({ background: lightBlue, color: darkBlue, })` border-radius: 10px; box-shadow: none; flex: 1; &:enabled:hover { filter: brightness(98%); } margin-top: 20px; ` export const ButtonContent = styled.div` display: flex; flex-direction: column; align-items: center; ` export const ButtonIcon = styled.div` width: 50px; height: 50px; display: flex; justify-content: center; align-items: center; box-sizing: border-box; background: #00000005; border-radius: 25px; margin-bottom: 10px; ` ================================================ FILE: src/app/ui-kit/components/Clipboard/Clipboard.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { faCopy } from "@fortawesome/free-solid-svg-icons" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { SizeProp } from "@fortawesome/fontawesome-svg-core" import { LightButton } from "../Button/LightButton" interface Props { size?: SizeProp text?: string } export const Clipboard: React.FC = ({ text, size }: Props) => { const copy = () => { if (text) { navigator.clipboard.writeText(text) } } return ( ) } ================================================ FILE: src/app/ui-kit/components/CryptoAnimation/CryptoAnimation.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import Lottie from "react-lottie-player" import { IconProps } from "../../icons/Props" import animationBTC from "./animation_btc.json" import animationDAI from "./animation_dai.json" import animationETH from "./animation_eth.json" import animationLTC from "./animation_ltc.json" import animationMYST from "./animation_myst.json" import animationUSDT from "./animation_usdt.json" import animationDOGE from "./animation_doge.json" export type IconCurrencyProps = IconProps & { currency?: string } // eslint-disable-next-line @typescript-eslint/ban-types const animations: { [key: string]: object } = { BTC: animationBTC, BCH: animationBTC, ETH: animationETH, DAI: animationDAI, LTC: animationLTC, USDT: animationUSDT, MYST: animationMYST, DOGE: animationDOGE, } export const CryptoAnimation: React.FC = ({ currency }) => { const animationData = animations[currency ?? ""] if (!animationData) { return <> } return } ================================================ FILE: src/app/ui-kit/components/CryptoAnimation/animation_btc.json ================================================ {"v":"5.7.4","fr":29.9700012207031,"ip":0,"op":134.000005457932,"w":1000,"h":1000,"nm":"Bitcoin","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":6,"ty":0,"nm":"Bitok","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[500,500,0],"ix":2,"l":2},"a":{"a":0,"k":[500,500,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1000,"h":1000,"ip":0,"op":1079.00004394857,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Слой-фигура 17","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[512,490,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[872,872],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"t":60.0000024438501,"s":[30]}],"ix":4},"w":{"a":0,"k":30,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-12,10],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.94]},"t":0,"s":[-195]},{"t":58.8000023949731,"s":[0]}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.94]},"t":0,"s":[0]},{"t":58.8000023949731,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":1079.00004394857,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Кривые bitcoin (2) 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[492.889,483.222,0],"ix":2,"l":2},"a":{"a":0,"k":[144.889,154.222,0],"ix":1,"l":2},"s":{"a":0,"k":[271,271,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[14.503,0],[0,0],[0,0],[0,0],[0,-14.503]],"o":[[0,0],[0,0],[0,0],[14.503,0],[0,14.503]],"v":[[14.709,-15],[-41.011,-15],[-41.011,-67.604],[14.709,-67.604],[41.01,-41.302]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[14.503,0],[0,0],[0,0],[0,0],[0,-14.503]],"o":[[0,0],[0,0],[0,0],[14.503,0],[0,14.503]],"v":[[14.709,67.604],[-41.011,67.604],[-41.011,15],[14.709,15],[41.01,41.302]],"c":true},"ix":2},"nm":"Контур 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Объединить контуры 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.982]},"o":{"x":[0.48],"y":[0.04]},"t":23.8,"s":[0]},{"t":59.5000024234847,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":4,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"t":60.0000024438501,"s":[30]}],"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":20.3,"s":[0]},{"t":23.8000009693939,"s":[10]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[152.306,157.333],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1079.00004394857,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Кривые bitcoin (2)","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[492.889,483.222,0],"ix":2,"l":2},"a":{"a":0,"k":[144.889,154.222,0],"ix":1,"l":2},"s":{"a":0,"k":[271,271,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,16.307],[22.411,7.431],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,24.872],[11.116,10.292]],"o":[[0,-24.871],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[22.411,-7.43],[0,-16.307],[11.116,-10.292]],"v":[[71.011,-41.302],[32.383,-94.746],[32.383,-118.335],[2.383,-118.335],[2.383,-97.604],[-15.902,-97.604],[-15.902,-118.335],[-45.902,-118.335],[-45.902,-97.604],[-71.01,-97.604],[-71.01,-15],[-71.01,15],[-71.01,97.604],[-45.902,97.604],[-45.902,118.335],[-15.902,118.335],[-15.902,97.604],[2.383,97.604],[2.383,118.335],[32.383,118.335],[32.383,94.746],[71.011,41.302],[52.919,0]],"c":true},"ix":2},"nm":"Контур 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Объединить контуры 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.968]},"o":{"x":[0.48],"y":[0.07]},"t":0,"s":[0]},{"t":63.0000025660426,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"t":60.0000024438501,"s":[30]}],"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[152.306,157.333],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1079.00004394857,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Povorot","refId":"comp_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[6]},{"t":1.00000004073083,"s":[100]}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.94]},"t":0,"s":[89]},{"t":60.0000024438501,"s":[0]}],"ix":10},"p":{"a":0,"k":[500,500,0],"ix":2,"l":2},"a":{"a":0,"k":[500,500,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1000,"h":1000,"ip":0,"op":1079.00004394857,"st":0,"bm":0}],"markers":[]} ================================================ FILE: src/app/ui-kit/components/CryptoAnimation/animation_dai.json ================================================ {"v":"5.7.4","fr":29.9700012207031,"ip":0,"op":134.000005457932,"w":1000,"h":1000,"nm":"Bitcoin","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":4,"ty":0,"nm":"Dai_logo","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[500,500,0],"ix":2,"l":2},"a":{"a":0,"k":[500,500,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1000,"h":1000,"ip":0,"op":1079.00004394857,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Слой-фигура 17","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[512,490,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[872,872],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"t":60.0000024438501,"s":[30]}],"ix":4},"w":{"a":0,"k":30,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-12,10],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.94]},"t":0,"s":[-195]},{"t":58.8000023949731,"s":[0]}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.94]},"t":0,"s":[0]},{"t":58.8000023949731,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":1079.00004394857,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Кривые Dai_logo","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[100]},{"t":60.0000024438501,"s":[30]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[499.889,499.722,0],"ix":2,"l":2},"a":{"a":0,"k":[144.889,154.222,0],"ix":1,"l":2},"s":{"a":0,"k":[270,270,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-32.403,17.182],[0.562,-17.182],[32.403,17.182]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":5.00000020365417,"s":[10]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[142.204,129.891],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[40,147.073],[249.778,147.073]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":5.00000020365417,"s":[10]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[104.889,34.364],[-0.001,-76.019],[-104.889,34.364],[-0.001,76.019]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":5.00000020365417,"s":[10]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[144.889,112.709],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-104.889,-50.837],[0,50.837],[104.889,-50.837],[0,-6.103]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":5.00000020365417,"s":[10]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[144.889,222.103],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.981]},"o":{"x":[0.48],"y":[0.041]},"t":0,"s":[0]},{"t":37.0000015070409,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":5,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":1079.00004394857,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Povorot","refId":"comp_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[6]},{"t":1.00000004073083,"s":[100]}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.94]},"t":0,"s":[89]},{"t":60.0000024438501,"s":[0]}],"ix":10},"p":{"a":0,"k":[500,500,0],"ix":2,"l":2},"a":{"a":0,"k":[500,500,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1000,"h":1000,"ip":0,"op":1079.00004394857,"st":0,"bm":0}],"markers":[]} ================================================ FILE: src/app/ui-kit/components/CryptoAnimation/animation_doge.json ================================================ {"v":"5.7.4","fr":29.9700012207031,"ip":0,"op":90.0000036657751,"w":1000,"h":1000,"nm":"Currencies_main","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":7,"ty":0,"nm":"Doge","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[500,500,0],"ix":2,"l":2},"a":{"a":0,"k":[500,500,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1000,"h":1000,"ip":0,"op":3896.00015868733,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Слой-фигура 17","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[512,490,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[872,872],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":30,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-12,10],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.94]},"t":0,"s":[-195]},{"t":58.8000023949731,"s":[0]}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.94]},"t":0,"s":[0]},{"t":58.8000023949731,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":1079.00004394857,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Кривые Слой 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[365.608,499.211,0],"ix":2,"l":2},"a":{"a":0,"k":[28.643,3.5,0],"ix":1,"l":2},"s":{"a":0,"k":[401,401,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[3.5,3.5],[53.786,3.5]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":8,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.987]},"o":{"x":[0.48],"y":[0.028]},"t":25.854,"s":[0]},{"t":60.0000024438501,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Кривые Слой 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[525.885,499.211,0],"ix":2,"l":2},"a":{"a":0,"k":[57.413,71.053,0],"ix":1,"l":2},"s":{"a":0,"k":[401,401,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.004,53.543]],"o":[[0,0],[-0.004,-53.543],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[39.913,0],[39.913,-0.01],[-6.362,-51.317],[-39.913,-51.317],[-39.913,-0.048],[-39.913,0.048],[-39.913,51.317],[-6.362,51.317],[39.913,0.01]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":8,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[57.413,71.053],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.986]},"o":{"x":[0.48],"y":[0.031]},"t":4,"s":[0]},{"t":42.2437517206232,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Povorot","refId":"comp_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[6]},{"t":1.00000004073083,"s":[100]}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.94]},"t":0,"s":[89]},{"t":60.0000024438501,"s":[0]}],"ix":10},"p":{"a":0,"k":[500,500,0],"ix":2,"l":2},"a":{"a":0,"k":[500,500,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1000,"h":1000,"ip":0,"op":1079.00004394857,"st":0,"bm":0}],"markers":[]} ================================================ FILE: src/app/ui-kit/components/CryptoAnimation/animation_eth.json ================================================ {"v":"5.7.4","fr":29.9700012207031,"ip":0,"op":134.000005457932,"w":1000,"h":1000,"nm":"Bitcoin","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":3,"ty":0,"nm":"Eth_logo","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[500,500,0],"ix":2,"l":2},"a":{"a":0,"k":[500,500,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1000,"h":1000,"ip":0,"op":1079.00004394857,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Кривые Eth_logo","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[100]},{"t":60.0000024438501,"s":[30]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[499.889,499.722,0],"ix":2,"l":2},"a":{"a":0,"k":[144.889,154.222,0],"ix":1,"l":2},"s":{"a":0,"k":[269,269,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[41.704,-59.456],[-41.704,59.457],[-41.704,-10.294]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[186.593,235.746],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-41.704,-42.083],[41.704,-4.978],[-41.494,42.083]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[186.593,160.46],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-41.704,-69.121],[41.704,69.121],[-41.704,32.016]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[186.593,86.361],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-41.704,-59.456],[41.703,59.457],[41.703,-10.294]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[103.185,235.746],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[41.704,-42.083],[-41.704,-4.978],[41.493,42.083]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[103.185,160.46],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[41.704,-69.121],[-41.704,69.121],[41.704,32.016]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[103.185,86.361],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.847]},"t":0,"s":[0]},{"t":53.0000021587343,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":7,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":1079.00004394857,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Слой-фигура 17","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[512,490,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[872,872],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"t":60.0000024438501,"s":[30]}],"ix":4},"w":{"a":0,"k":30,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-12,10],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.94]},"t":0,"s":[-195]},{"t":58.8000023949731,"s":[0]}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.94]},"t":0,"s":[0]},{"t":58.8000023949731,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":1079.00004394857,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Povorot","refId":"comp_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[6]},{"t":1.00000004073083,"s":[100]}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.94]},"t":0,"s":[89]},{"t":60.0000024438501,"s":[0]}],"ix":10},"p":{"a":0,"k":[500,500,0],"ix":2,"l":2},"a":{"a":0,"k":[500,500,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1000,"h":1000,"ip":0,"op":1079.00004394857,"st":0,"bm":0}],"markers":[]} ================================================ FILE: src/app/ui-kit/components/CryptoAnimation/animation_ltc.json ================================================ {"v":"5.7.4","fr":29.9700012207031,"ip":0,"op":134.000005457932,"w":1000,"h":1000,"nm":"Bitcoin","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":2,"ty":0,"nm":"Lite_logo","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[500,500,0],"ix":2,"l":2},"a":{"a":0,"k":[500,500,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1000,"h":1000,"ip":0,"op":1079.00004394857,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Кривые Lite_logo","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":17,"s":[100]},{"t":58.0000023623884,"s":[30]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[488.889,488.722,0],"ix":2,"l":2},"a":{"a":0,"k":[144.889,154.222,0],"ix":1,"l":2},"s":{"a":0,"k":[246,246,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-16.606,23.389],[5.717,16.39],[16.606,-23.388],[-6.24,-16.847]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[175.973,143.398],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[16.883,-23.389],[-5.995,-16.389],[-16.883,23.389],[6.809,15.76]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[73.752,181.054],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-75.197,-12.022],[-89.112,42.05],[77.555,42.05],[89.111,-4.617],[-6.149,-4.172],[3.609,-42.05]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[155.758,208.837],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[30.204,20.719],[48.894,-51.834],[-22.216,-51.834],[-48.894,51.834]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[139.529,105.833],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.94]},"t":0,"s":[0]},{"t":58.8000023949731,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":5,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":1079.00004394857,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Слой-фигура 17","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[512,490,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[872,872],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"t":60.0000024438501,"s":[30]}],"ix":4},"w":{"a":0,"k":30,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-12,10],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.94]},"t":0,"s":[-195]},{"t":58.8000023949731,"s":[0]}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.94]},"t":0,"s":[0]},{"t":58.8000023949731,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":1079.00004394857,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Povorot","refId":"comp_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[6]},{"t":1.00000004073083,"s":[100]}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.94]},"t":0,"s":[89]},{"t":60.0000024438501,"s":[0]}],"ix":10},"p":{"a":0,"k":[500,500,0],"ix":2,"l":2},"a":{"a":0,"k":[500,500,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1000,"h":1000,"ip":0,"op":1079.00004394857,"st":0,"bm":0}],"markers":[]} ================================================ FILE: src/app/ui-kit/components/CryptoAnimation/animation_myst.json ================================================ {"v":"5.7.4","fr":29.9700012207031,"ip":0,"op":134.000005457932,"w":1000,"h":1000,"nm":"Bitcoin","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":5,"ty":0,"nm":"Myst","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[500,500,0],"ix":2,"l":2},"a":{"a":0,"k":[500,500,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1000,"h":1000,"ip":0,"op":1079.00004394857,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"M Logo","refId":"comp_2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":6,"s":[100]},{"t":79.000003217736,"s":[30]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[500,500,0],"ix":2,"l":2},"a":{"a":0,"k":[500,500,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"tm":{"a":1,"k":[{"i":{"x":[0.36],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.22],"y":[0.982]},"t":79,"s":[3.37]},{"t":1079.00004394857,"s":[36.003]}],"ix":2},"w":1000,"h":1000,"ip":0,"op":1079.00004394857,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Слой-фигура 17","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[512,490,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[872,872],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"t":60.0000024438501,"s":[30]}],"ix":4},"w":{"a":0,"k":30,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-12,10],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.94]},"t":0,"s":[-195]},{"t":58.8000023949731,"s":[0]}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.94]},"t":0,"s":[0]},{"t":58.8000023949731,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":1079.00004394857,"st":0,"bm":0}]},{"id":"comp_2","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Кривые Mystertium_line","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[497.389,479.722,0],"ix":2,"l":2},"a":{"a":0,"k":[144.889,154.222,0],"ix":1,"l":2},"s":{"a":0,"k":[260,260,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-7.972,-13.917],[7.972,13.917]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[0]},{"t":46.0000018736184,"s":[10]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.988]},"o":{"x":[0.48],"y":[0.026]},"t":34.3,"s":[0]},{"t":58.0000023623884,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[253.583,187.083],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[1.259,-30.111],[13.111,-3.888],[-13.111,30.112]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[0]},{"t":60.0000024438501,"s":[10]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.988]},"o":{"x":[0.48],"y":[0.026]},"t":45.3,"s":[0]},{"t":69.0000028104276,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[232.297,176.444],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.778,23.26],[3.778,-23.259]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[0]},{"t":48.0000019550801,"s":[10]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.988]},"o":{"x":[0.48],"y":[0.026]},"t":34.3,"s":[0]},{"t":58.0000023623884,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[209.334,170.481],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 3","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-8.518,-9.778],[8.518,9.778]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[0]},{"t":48.0000019550801,"s":[10]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.982]},"o":{"x":[0.48],"y":[0.04]},"t":34.3,"s":[0]},{"t":70.0000028511585,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[183.26,170.925],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 4","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4.167,-15.815],[4.166,15.815]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[0]},{"t":48.0000019550801,"s":[10]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.976]},"o":{"x":[0.48],"y":[0.053]},"t":34.3,"s":[0]},{"t":82.0000033399285,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[209.241,130.37],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 5","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[11.259,-20.815],[13.778,-4.963],[-13.778,20.815]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[0]},{"t":66.0000026882351,"s":[10]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.982]},"o":{"x":[0.48],"y":[0.04]},"t":52.3,"s":[0]},{"t":88.0000035843135,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[191.185,118.852],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 6","np":3,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-7.482,-22],[7.481,22]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[0]},{"t":44.0000017921567,"s":[10]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.982]},"o":{"x":[0.48],"y":[0.04]},"t":30.3,"s":[0]},{"t":66.0000026882351,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[175.556,134.704],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 7","np":3,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1.334,-15.037],[-1.333,15.037]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60.7,"s":[0]},{"t":74.7000030425934,"s":[10]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.982]},"o":{"x":[0.48],"y":[0.04]},"t":61,"s":[0]},{"t":96.7000039386717,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[145.703,147.444],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 8","np":3,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-1.907,-13.416],[1.907,13.417]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[0]},{"t":53.5550021813399,"s":[10]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.982]},"o":{"x":[0.48],"y":[0.04]},"t":45.184,"s":[0]},{"t":67.0000027289659,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[157.425,180.749],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 9","np":3,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-21.703,-13.315],[14.408,1.908],[21.704,13.315]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[0]},{"t":76.0000030955435,"s":[10]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.982]},"o":{"x":[0.48],"y":[0.04]},"t":62.3,"s":[0]},{"t":98.0000039916218,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[144.222,192.425],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 10","np":3,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[8.445,-17.63],[-8.445,17.63]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64.7,"s":[0]},{"t":78.7000032055167,"s":[10]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.98]},"o":{"x":[0.48],"y":[0.045]},"t":65,"s":[0]},{"t":105.000004276738,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[123.778,176.259],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 11","np":3,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-6,-28.296],[6,28.296]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[0]},{"t":60.0000024438501,"s":[10]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.982]},"o":{"x":[0.48],"y":[0.04]},"t":46.3,"s":[0]},{"t":82.0000033399285,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[118.37,126.481],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 12","np":3,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[6.297,-20],[20.37,20],[-20.37,6.741]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[0]},{"t":68.0000027696968,"s":[10]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.982]},"o":{"x":[0.48],"y":[0.04]},"t":46.3,"s":[0]},{"t":82.0000033399285,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[80.888,159.814],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 13","np":3,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-81.297,-14.296],[-11.741,14.297],[45.74,-7.185],[81.296,-8.518]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[0]},{"t":63.0000025660426,"s":[10]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.982]},"o":{"x":[0.48],"y":[0.04]},"t":49.3,"s":[0]},{"t":85.000003462121,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[166.926,153.518],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 14","np":3,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[-1.185,0.444],[0,0]],"v":[[11.111,-3.037],[-11.111,3.037]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[0]},{"t":81.0000032991976,"s":[10]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.982]},"o":{"x":[0.48],"y":[0.04]},"t":67.3,"s":[0]},{"t":103.000004195276,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[48.222,150.111],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 15","np":3,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1.269,21.028],[-1.269,-21.028]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[0]},{"t":48.0000019550801,"s":[10]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.982]},"o":{"x":[0.48],"y":[0.04]},"t":34.3,"s":[0]},{"t":70.0000028511585,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[61.565,197.805],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 16","np":3,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-32.13,48.222],[2.092,29.555],[1.945,-0.334],[27.426,-8.001],[32.13,-48.223]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25.4,"s":[0]},{"t":39.4000016047949,"s":[10]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.982]},"o":{"x":[0.48],"y":[0.04]},"t":25,"s":[0]},{"t":60.7000024723617,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[58.204,147.222],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 17","np":3,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-136.222,23.259],[-45.555,-69.482],[-0.074,-23.26],[45.259,-68.889],[136.222,23.111],[90.74,68.888],[44.667,23.999],[-0.667,68.592],[-45.852,23.111],[-91.185,69.481]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.982]},"o":{"x":[0.48],"y":[0.04]},"t":0,"s":[0]},{"t":35.7000014540908,"s":[100]}],"ix":2},"o":{"a":0,"k":90,"ix":3},"m":1,"ix":3,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[147.111,156.703],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 18","np":3,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1079.00004394857,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Povorot","refId":"comp_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[6]},{"t":1.00000004073083,"s":[100]}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.94]},"t":0,"s":[89]},{"t":60.0000024438501,"s":[0]}],"ix":10},"p":{"a":0,"k":[500,500,0],"ix":2,"l":2},"a":{"a":0,"k":[500,500,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1000,"h":1000,"ip":0,"op":1079.00004394857,"st":0,"bm":0}],"markers":[]} ================================================ FILE: src/app/ui-kit/components/CryptoAnimation/animation_usdt.json ================================================ {"v":"5.7.4","fr":29.9700012207031,"ip":0,"op":134.000005457932,"w":1000,"h":1000,"nm":"Bitcoin","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Tether_logo","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[500,500,0],"ix":2,"l":2},"a":{"a":0,"k":[500,500,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1000,"h":1000,"ip":0,"op":1079.00004394857,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Кривые Tether_logo","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[100]},{"t":60.0000024438501,"s":[30]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[500.001,513.722,0],"ix":2,"l":2},"a":{"a":0,"k":[144.889,154.222,0],"ix":1,"l":2},"s":{"a":0,"k":[255,255,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-9.849],[60.547,0],[0,12.93],[-40.332,3.458]],"o":[[40.336,3.457],[0,12.93],[-60.546,0],[0,-9.849],[0,0]],"v":[[40.811,-22.573],[109.63,-0.838],[-0.001,22.573],[-109.63,-0.838],[-40.816,-22.573]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.528]},"t":27,"s":[0]},{"t":60.0000024438501,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[144.889,142.787],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-23.25,48.982],[-23.25,-4.42],[-87.187,-4.42],[-87.187,-48.982],[87.187,-48.982],[87.187,-4.42],[23.25,-4.42],[23.25,48.982]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.448]},"t":0,"s":[0]},{"t":28.0000011404634,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[144.889,95.51],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[23.25,-46.764],[23.25,46.764],[-23.25,46.764],[-23.25,-46.236]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.448]},"t":0,"s":[0]},{"t":28.0000011404634,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[144.889,211.596],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 3","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1079.00004394857,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Слой-фигура 17","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[512,490,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[872,872],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"t":60.0000024438501,"s":[30]}],"ix":4},"w":{"a":0,"k":30,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-12,10],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.94]},"t":0,"s":[-195]},{"t":58.8000023949731,"s":[0]}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.94]},"t":0,"s":[0]},{"t":58.8000023949731,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":1079.00004394857,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Povorot","refId":"comp_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[6]},{"t":1.00000004073083,"s":[100]}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.32],"y":[0.94]},"t":0,"s":[89]},{"t":60.0000024438501,"s":[0]}],"ix":10},"p":{"a":0,"k":[500,500,0],"ix":2,"l":2},"a":{"a":0,"k":[500,500,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1000,"h":1000,"ip":0,"op":1079.00004394857,"st":0,"bm":0}],"markers":[]} ================================================ FILE: src/app/ui-kit/components/LogoTitle/LogoTitle.tsx ================================================ /* eslint-disable */ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" export const LogoTitle: React.FC = () => (
) ================================================ FILE: src/app/ui-kit/components/MysteriumVPN2Toast/MysteriumVPN2Toast.tsx ================================================ /* eslint-disable */ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useEffect } from "react"; import icon from "./icon.png"; import { toast } from "react-hot-toast"; import { dismissibleToast } from "../dismissibleToast"; import { shell } from "electron"; import styled from "styled-components"; import { useStores } from "../../../store"; const Container = styled.div` cursor: pointer; `; export const MysteriumVPN2Toast: React.FC = () => { const root = useStores() const { config } = root useEffect(() => { if (config.vpn2Offered) { return } let link: string if (root.isWindows) { link = "https://www.mysteriumvpn.com/mysterium-vpn-v2?utm_source=MysteriumDark&utm_medium=Windows&utm_campaign=Banner" } else if (root.isMacOS) { link = "https://www.mysteriumvpn.com/mysterium-vpn-v2?utm_source=MysteriumDark&utm_medium=Mac&utm_campaign=Banner" } else { link = "https://www.mysteriumvpn.com/mysterium-vpn-v2?utm_source=MysteriumDark&utm_medium=Other&utm_campaign=Banner" } const toastID = toast(dismissibleToast( { shell.openExternal(link); config.setVpn2Offered() toast.dismiss(toastID) }}> MysteriumVPN 2.0 for Desktop is available
Download the new app to use Mysterium VPN on Android, iOS, Mac and Windows
), { duration: Infinity, icon: , style: { maxWidth: 400, } }); }); return <>; }; ================================================ FILE: src/app/ui-kit/components/Prompt/Prompt.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { FormEventHandler, PropsWithChildren } from "react" import styled from "styled-components" import { OutlineButton } from "../Button/OutlineButton" import { darkBlue } from "../../colors" import { Heading2 } from "../../typography" import { BrandButton } from "../Button/BrandButton" const Background = styled.div` position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.4); display: flex; align-items: center; justify-content: center; ` const Box = styled.div` box-sizing: border-box; width: 320px; background: #fff; color: ${darkBlue}; padding: 15px; border-radius: 10px; display: flex; flex-direction: column; ` const PromptTitle = styled(Heading2)` text-align: center; margin-bottom: 15px; ` const PromptButtons = styled.div` margin-top: auto; display: flex; justify-content: space-between; & > button { width: 140px; } ` const PromptButtonOK = styled(BrandButton)` box-shadow: none; ` export interface PromptProps { visible: boolean title?: string onSubmit?: () => void onCancel?: () => void submitText?: string } export const Prompt: React.FC> = ({ visible, title, onSubmit, onCancel, submitText = "OK", children, }) => { if (!visible) { return <> } const handleOnSubmit: FormEventHandler = (evt) => { evt.preventDefault() onSubmit?.() } const handleCancel = () => { onCancel?.() } return (
{title} {children} {submitText} Cancel
) } ================================================ FILE: src/app/ui-kit/components/QR/QR.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import QRCode from "qrcode.react" export interface QRProps { text?: string size?: number } export const QR: React.FC = ({ text, size = 128 }) => (
{text && }
) ================================================ FILE: src/app/ui-kit/components/SectionTitle/SectionTitle.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import styled from "styled-components" import { textCaption } from "../../typography" export const SectionTitle = styled.div` ${textCaption} color: #777; display: flex; align-items: center; margin-bottom: 16px; ` ================================================ FILE: src/app/ui-kit/components/Spinner/Spinner.tsx ================================================ /** * Copyright (c) 2022 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import Lottie from "react-lottie-player" import styled from "styled-components" import animationSpinner from "./animation_spinner.json" export interface SpinnerProps { className?: string } const Container = styled.div` width: 80px; ` export const Spinner: React.FC = ({ className }) => ( ) ================================================ FILE: src/app/ui-kit/components/Spinner/animation_spinner.json ================================================ {"v":"4.6.0","fr":29.9700012207031,"ip":0,"op":49.0000019958109,"w":200,"h":200,"nm":"loading_ring_medium","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"green ring 1","ks":{"o":{"a":0,"k":100},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[0],"e":[360]},{"t":49.0000019958109}]},"p":{"a":0,"k":[100,100,0]},"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[200,200,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[54,54]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"st","c":{"a":0,"k":[0.7333333333333333,0.6235294117647059,0.7294117647058823,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"mn":"ADBE Vector Group"},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.644],"y":[0]},"n":["0p667_1_0p644_0"],"t":10,"s":[0],"e":[100]},{"t":50.0000020365418}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":-1,"s":[0],"e":[100]},{"t":37.0000015070409}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim"}],"ip":0,"op":50.0000020365418,"st":-1.00000004073083,"bm":0,"sr":1},{"ddd":0,"ind":2,"ty":4,"nm":"flamingo ring 3","parent":1,"ks":{"o":{"a":0,"k":100},"r":{"a":1,"k":[{"i":{"x":[0.785],"y":[1]},"o":{"x":[1],"y":[0]},"n":["0p785_1_1_0"],"t":17,"s":[14.2],"e":[360]},{"t":50.0000020365418}]},"p":{"a":0,"k":[0,0,0]},"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[54,54]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"st","c":{"a":0,"k":[0.9019607843137255,0.9764705882352941,0.9607843137254902,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"mn":"ADBE Vector Group"},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":42,"s":[0],"e":[1]},{"t":44.0000017921567}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p833_1_0p333_0"],"t":20,"s":[0],"e":[1]},{"t":44.0000017921567}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim"}],"ip":17.0000006924242,"op":44.0000017921567,"st":-1.00000004073083,"bm":0,"sr":1},{"ddd":0,"ind":3,"ty":4,"nm":"flamingo ring 2","parent":1,"ks":{"o":{"a":0,"k":100},"r":{"a":1,"k":[{"i":{"x":[0.612],"y":[1]},"o":{"x":[1],"y":[0]},"n":["0p612_1_1_0"],"t":17,"s":[14.2],"e":[360]},{"t":50.0000020365418}]},"p":{"a":0,"k":[0,0,0]},"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[54,54]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"st","c":{"a":0,"k":[0.9019607843137255,0.9764705882352941,0.9607843137254902,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"mn":"ADBE Vector Group"},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":42,"s":[0],"e":[13.7]},{"t":44.0000017921567}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p833_1_0p333_0"],"t":20,"s":[0],"e":[13.7]},{"t":44.0000017921567}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim"}],"ip":17.0000006924242,"op":44.0000017921567,"st":-1.00000004073083,"bm":0,"sr":1},{"ddd":0,"ind":4,"ty":4,"nm":"flaming ring 1","parent":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[0,0,0]},"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[54,54]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"st","c":{"a":0,"k":[0.9019607843137255,0.9764705882352941,0.9607843137254902,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"mn":"ADBE Vector Group"},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[1],"y":[0]},"n":["0p667_1_1_0"],"t":8,"s":[0],"e":[100]},{"t":48.0000019550801}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[1],"y":[0]},"n":["0p667_1_1_0"],"t":-1,"s":[0],"e":[100]},{"t":37.0000015070409}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim"}],"ip":15.0000006109625,"op":44.0000017921567,"st":-1.00000004073083,"bm":0,"sr":1}]} ================================================ FILE: src/app/ui-kit/components/StepProgressBar/StepProgressBar.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { brand } from "../../colors" export const StepProgressBar: React.FC<{ step: number }> = ({ step }) => { let barWidth = 36 if (step > 2) { barWidth = 212 } else if (step > 1) { barWidth = 172 } else if (step > 0) { barWidth = 106 } return ( 0 ? brand : "transparent"} /> 0 ? "#fff" : "transparent"} /> 1 ? brand : "transparent"} /> 1 ? "#fff" : "transparent"} /> 2 ? brand : "transparent"} /> 2 ? "#fff" : "transparent"} /> ) } ================================================ FILE: src/app/ui-kit/components/Toggle/Toggle.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { RefObject } from "react" import styled from "styled-components" import { brand, darkBlue } from "../../colors" export interface ToggleProps { children: React.ReactNode active: boolean height?: string justify?: string textColor?: string hoverColor?: string activeColor?: string inactiveColor?: string activeTextColor?: string activeShadowColor?: string paddingX?: string onClick?: () => void className?: string innerRef?: RefObject } const defaultProps = { height: "25px", justify: "flex-start", textColor: darkBlue, hoverColor: `${brand}1A`, activeColor: brand, inactiveColor: "transparent", activeTextColor: "#fff", activeShadowColor: "none", paddingX: "12px", } const Highlight = styled.div` padding: 0 ${(props) => props.paddingX}; height: ${(props) => props.height}; min-height: 25px; line-height: 25px; border-radius: 5px; display: flex; flex-direction: row; align-items: center; justify-content: ${(props) => props.justify}; overflow: hidden; color: ${(props) => (props.active ? props.activeTextColor : props.textColor)}; background: ${(props) => (props.active ? props.activeColor : props.inactiveColor)}; box-shadow: ${(props) => (props.active ? props.activeShadowColor : "none")}; ` const Container = styled.div` box-sizing: border-box; width: calc(100%); height: 30px; min-height: 30px; padding: 3px 0 0 2px; &:hover ${Highlight} { background: ${(props) => (props.active ? props.activeColor : props.hoverColor)}; } ` export const Toggle: React.FC = ({ onClick, children, active, height = defaultProps.height, justify = defaultProps.justify, textColor = defaultProps.textColor, hoverColor = defaultProps.hoverColor, activeColor = defaultProps.activeColor, inactiveColor = defaultProps.inactiveColor, activeTextColor = defaultProps.activeTextColor, activeShadowColor = defaultProps.activeShadowColor, paddingX = defaultProps.paddingX, className, innerRef, }: ToggleProps) => { const styles = { height, justify, textColor, hoverColor, activeColor, inactiveColor, activeTextColor, activeShadowColor, paddingX, } return ( {children} ) } ================================================ FILE: src/app/ui-kit/components/dismissibleToast.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import toast, { Toast } from "react-hot-toast" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { faTimes } from "@fortawesome/free-solid-svg-icons" import styled from "styled-components" const Container = styled.div` display: flex; ` const Dismiss = styled.div` width: 22px; display: flex; align-items: start; justify-content: flex-end; font-size: 18px; color: #ccc; &:hover { color: #aaa; } ` export const dismissibleToast = (message: JSX.Element | string | null): ((t: Toast) => JSX.Element) => { return function dismissibleToast(t: Toast): JSX.Element { return (
{message}
toast.dismiss(t.id)}>
) } } ================================================ FILE: src/app/ui-kit/form-components/Checkbox/Checkbox.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import styled from "styled-components" import React from "react" import { uniqueId } from "lodash" const Container = styled.div` height: 24px; font-size: 13px; display: flex; -webkit-app-region: no-drag; ` const Input = styled.input` margin-right: 8px; border-radius: 2px; height: 18px; width: 18px; -webkit-appearance: none; background-repeat: no-repeat; background-image: url('data:image/svg+xml;charset=utf-8,'); &:checked { background-image: url('data:image/svg+xml;charset=utf-8,'); } ` as React.FC, HTMLInputElement>> const Label = styled.label` display: inline; line-height: 24px; ` export type CheckboxProps = React.DetailedHTMLProps, HTMLInputElement> & { children?: React.ReactNode } export const Checkbox: React.FC = ({ children, ...rest }) => { const inputId = uniqueId("checkbox") return ( ) } ================================================ FILE: src/app/ui-kit/form-components/Search.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { ChangeEvent } from "react" import styled from "styled-components" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { faSearch } from "@fortawesome/free-solid-svg-icons" export interface SearchProps { onChange: (text?: string) => void } const Icon = styled(FontAwesomeIcon)` position: relative; z-index: 1; left: 24px; top: -24px; color: #fff; opacity: 0.2; ` const SearchInput = styled.input` background: #703a74; height: 35px; width: 100%; padding: 10px 45px; box-sizing: border-box; border: 0; border-radius: 10px; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.2); color: #fff; ::placeholder { color: #fff; } ` export const Search: React.FC = ({ onChange, ...rest }) => { const handleChange = (evt: ChangeEvent): void => onChange(evt.target.value) return ( <> ) } ================================================ FILE: src/app/ui-kit/form-components/Select.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import styled from "styled-components" export const Select = styled.select` box-sizing: border-box; height: 35px; width: 100%; padding: 0 12px; border: 1px solid #ffffff4c; border-radius: 5px; background: #5a2058; color: #fff; ::placeholder { color: #fff; } font-family: inherit; font-size: 12px; line-height: 14px; ` ================================================ FILE: src/app/ui-kit/form-components/TextArea.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import styled from "styled-components" export const TextArea = styled.textarea` box-sizing: border-box; margin-bottom: 15px; width: 100%; padding: 12px; border: 1px solid #ffffff4c; border-radius: 5px; background: #ffffff18; color: #fff; ::placeholder { color: #fff; } font-family: inherit; font-size: 12px; line-height: 14px; ` ================================================ FILE: src/app/ui-kit/form-components/TextInput.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import styled from "styled-components" export const TextInput = styled.input` box-sizing: border-box; height: 35px; margin-bottom: 15px; width: 100%; padding: 12px; border: 1px solid #ffffff4c; border-radius: 5px; background: #ffffff18; color: #fff; ::placeholder { color: #fff; } font-family: inherit; font-size: 12px; line-height: 14px; ` as React.FC, HTMLInputElement>> ================================================ FILE: src/app/ui-kit/icons/IconBrowsing.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { IconProps } from "./Props" export const IconBrowsing: React.FC = ({ color }) => ( ) ================================================ FILE: src/app/ui-kit/icons/IconCloudDownload.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { IconProps } from "./Props" export const IconCloudDownload: React.FC = ({ color }) => ( ) ================================================ FILE: src/app/ui-kit/icons/IconCopy.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { IconProps } from "./Props" export const IconCopy: React.FC = ({ color }) => ( ) ================================================ FILE: src/app/ui-kit/icons/IconDocument.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { IconProps } from "./Props" export const IconDocument: React.FC = ({ color }) => ( ) ================================================ FILE: src/app/ui-kit/icons/IconDownload.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { IconProps } from "./Props" export const IconDownload: React.FC = ({ color }) => ( ) ================================================ FILE: src/app/ui-kit/icons/IconDuration.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { IconProps } from "./Props" export const IconDuration: React.FC = ({ color }) => ( ) ================================================ FILE: src/app/ui-kit/icons/IconGlobe.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { IconProps } from "./Props" export const IconGlobe: React.FC = ({ color }) => ( ) ================================================ FILE: src/app/ui-kit/icons/IconIdentity.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { IconProps } from "./Props" export const IconIdentity: React.FC = ({ color }) => ( ) ================================================ FILE: src/app/ui-kit/icons/IconMedia.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { IconProps } from "./Props" export const IconMedia: React.FC = ({ color }) => ( ) ================================================ FILE: src/app/ui-kit/icons/IconMusic.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { IconProps } from "./Props" export const IconMusic: React.FC = ({ color }) => ( ) ================================================ FILE: src/app/ui-kit/icons/IconMystToken.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { IconProps } from "./Props" export interface MystTokenProps { color?: string } export const IconMystToken: React.FC = ({ color }) => { return ( ) } ================================================ FILE: src/app/ui-kit/icons/IconNoPreset.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { IconProps } from "./Props" export const IconNoPreset: React.FC = ({ color }) => ( ) ================================================ FILE: src/app/ui-kit/icons/IconPaid.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { IconProps } from "./Props" export const IconPaid: React.FC = ({ color }) => ( ) ================================================ FILE: src/app/ui-kit/icons/IconPerson.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { IconProps } from "./Props" export const IconPerson: React.FC = ({ color }) => ( ) ================================================ FILE: src/app/ui-kit/icons/IconPlay.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { IconProps } from "./Props" export const IconPlay: React.FC = ({ color }) => ( ) ================================================ FILE: src/app/ui-kit/icons/IconPriceTier.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import React from "react" import { faDollarSign } from "@fortawesome/free-solid-svg-icons" import styled from "styled-components" const Container = styled.div` width: 33px; font-size: 12px; overflow: hidden; ` const Dollar = styled(FontAwesomeIcon)` &:not(:last-child) { padding-right: 6px; } ` export interface IconPriceTierProps { tier: number } export const IconPriceTier: React.FC = (props) => { return ( 0 ? 1 : 0.2} /> 1 ? 1 : 0.2} /> 2 ? 1 : 0.2} /> ) } ================================================ FILE: src/app/ui-kit/icons/IconReceived.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { IconProps } from "./Props" export const IconReceived: React.FC = ({ color }) => ( ) ================================================ FILE: src/app/ui-kit/icons/IconSent.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { IconProps } from "./Props" export const IconSent: React.FC = ({ color }) => ( ) ================================================ FILE: src/app/ui-kit/icons/IconSettings.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { IconProps } from "./Props" export const IconSettings: React.FC = ({ color }) => ( ) ================================================ FILE: src/app/ui-kit/icons/IconWallet.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { IconProps } from "./Props" export const IconWallet: React.FC = ({ color }) => ( ) ================================================ FILE: src/app/ui-kit/icons/Props.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ export interface IconProps { color?: string } ================================================ FILE: src/app/ui-kit/typography.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import styled from "styled-components" export const textSmall = "font-size: 12px;" export const textRegular = "font-size: 14px;" export const textHuge = "font-size: 24px;" export const textCaption = "font-size: 12px; text-transform: uppercase;" export const Heading1 = styled.div` font-size: 24px; line-height: 28px; font-weight: 900; ` export const Heading2 = styled.div` font-size: 18px; line-height: 21px; font-weight: bold; ` export const Paragraph = styled.div` font-size: 14px; line-height: 20px; ` export const Small = styled.div` font-size: 12px; line-height: 14px; ` ================================================ FILE: src/app/views/common/AcceptTerms/AcceptTermsView.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useState } from "react" import { observer } from "mobx-react-lite" import ReactMarkdown from "react-markdown" import { TermsEndUser } from "@mysteriumnetwork/terms" import * as termsPackageJson from "@mysteriumnetwork/terms/package.json" import styled from "styled-components" import { shell } from "electron" import { Step, useStores } from "../../../store" import { BrandButton } from "../../../ui-kit/components/Button/BrandButton" import { Checkbox } from "../../../ui-kit/form-components/Checkbox/Checkbox" import { Heading1 } from "../../../ui-kit/typography" import { bg1, brand } from "../../../ui-kit/colors" import { Anchor } from "../../../ui-kit/components/Anchor" const Container = styled.div` background: ${bg1}; height: 100%; display: flex; flex-direction: column; justify-content: flex-start; -webkit-app-region: drag; padding-top: 72px; color: #fff; text-align: center; ` const Title = styled(Heading1)` margin-bottom: 6px; ` const TermsMeta = styled.div` color: ${brand}; margin-bottom: 10px; ` const Terms = styled.div` width: 500px; height: 250px; margin: 0 auto; padding: 12px; word-wrap: break-word; overflow-y: scroll; font-size: 13px; user-select: text; -webkit-app-region: no-drag; > ul { padding-inline-start: 20px; } color: #fff; opacity: 0.7; text-align: left; border: 1px solid #ffffff4c; border-radius: 5px; ` const TermsAgree = styled.div` width: 300px; margin: 0 auto; margin-top: 15px; input { margin-left: auto; } label { margin-right: auto; } ` const Actions = styled.div` margin-top: auto; display: flex; flex-direction: row; align-items: center; justify-content: center; margin-bottom: 57px; ` export const AcceptTermsView: React.FC = observer(function AcceptTermsView() { const root = useStores() const { config } = root const [agree, setAgree] = useState(false) const onAgreeToTerms = async () => { await config.agreeToTerms() return root.startupSequence(Step.TERMS_DONE) } return ( Terms and Conditions Version: {termsPackageJson.version} / Last updated: {termsPackageJson.updatedAt ?? ""} ( shell.openExternal(props.href as string)}> {props.href as string} ), }} > {TermsEndUser} { setAgree(!agree) }} > I agree to all Terms of Service Continue ) }) ================================================ FILE: src/app/views/common/Help/HelpContentReportIssue.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useRef } from "react" import styled from "styled-components" import { observer } from "mobx-react-lite" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { faBug } from "@fortawesome/free-solid-svg-icons" import toast from "react-hot-toast" import { Heading2, Small } from "../../../ui-kit/typography" import { TextInput } from "../../../ui-kit/form-components/TextInput" import { TextArea } from "../../../ui-kit/form-components/TextArea" import { useStores } from "../../../store" import { LightButton } from "../../../ui-kit/components/Button/LightButton" const Title = styled(Heading2)` margin: 15px 0; ` const Explanation = styled(Small)` opacity: 0.5; margin-bottom: 15px; ` const DescriptionTextArea = styled(TextArea)` height: 140px; resize: none; ` const SendButton = styled(LightButton)` margin-top: auto; width: 120px; ` export const HelpContentReportIssue: React.FC = observer(function HelpContentReportIssue() { const { feedback } = useStores() const email = useRef(null) const description = useRef(null) const clearInputs = () => { if (email.current) { email.current.value = "" } if (description.current) { description.current.value = "" } } const submit = async () => { const res = feedback.reportIssue({ email: email.current?.value, description: description.current?.value ?? "", }) await toast.promise(res, { loading: "Sending report...", success: function successToast(issueId) { return ( Report #{issueId} submitted
Thanks for the feedback!
) }, error: function errorToast(reason) { return ( Could not submit the report 😶
{reason}
) }, }) clearInputs() } return ( <> Bug report Describe the problem you got while using the application. We will try to solve it. Also leave your email so that we can contact you if needed. Description and application logs will be attached to the issue. Logs may include sensitive information, such as IP address and location. It will be only accessible and used by the dev team to address the issue you are having. Send ) }) ================================================ FILE: src/app/views/common/Help/HelpContentTermsAndConditions.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import styled from "styled-components" import { observer } from "mobx-react-lite" import { TermsEndUser } from "@mysteriumnetwork/terms" import ReactMarkdown from "react-markdown" import * as termsPackageJson from "@mysteriumnetwork/terms/package.json" import { shell } from "electron" import { Heading2, Small } from "../../../ui-kit/typography" import { brand } from "../../../ui-kit/colors" import { Anchor } from "../../../ui-kit/components/Anchor" const Title = styled(Heading2)` margin-bottom: 6px; ` const TermsMeta = styled.div` color: ${brand}; margin-bottom: 10px; ` const Terms = styled.div` width: 325px; box-sizing: border-box; margin: 0 auto; padding: 0 6px; word-wrap: break-word; overflow-y: scroll; font-size: 13px; color: #fff; opacity: 0.7; user-select: text; -webkit-app-region: no-drag; ul { padding-inline-start: 20px; } ` export const HelpContentTermsAndConditions: React.FC = observer(function HelpContentTermsAndConditions() { return ( <> Terms & Conditions Version: {termsPackageJson.version} / Last updated: {termsPackageJson.updatedAt ?? ""} ( shell.openExternal(props.href as string)}> {props.href as string} ), }} > {TermsEndUser} ) }) ================================================ FILE: src/app/views/common/Help/HelpView.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import styled from "styled-components" import { useNavigate, useLocation, Outlet } from "react-router-dom" import { observer } from "mobx-react-lite" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { faDiscord, faFacebookSquare, faReddit, faTwitter } from "@fortawesome/free-brands-svg-icons" import { shell } from "electron" import { faBook, faBug, faComments, faFileContract } from "@fortawesome/free-solid-svg-icons" import { ViewContainer } from "../../../navigation/components/ViewContainer/ViewContainer" import { ViewNavBar } from "../../../navigation/components/ViewNavBar/ViewNavBar" import { ViewSplit } from "../../../navigation/components/ViewSplit/ViewSplit" import { ViewSidebar } from "../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewContent } from "../../../navigation/components/ViewContent/ViewContent" import { IconPerson } from "../../../ui-kit/icons/IconPerson" import { brandLight, darkBlue, greyBlue1, lightBlue } from "../../../ui-kit/colors" import { Heading2, Small } from "../../../ui-kit/typography" import { locations } from "../../../navigation/locations" import { useStores } from "../../../store" import { AppVersion } from "../../../daemon/components/AppVersion" const SideTop = styled.div` box-sizing: border-box; height: 136px; padding: 20px; overflow: hidden; text-align: center; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 20px; flex: 1 0 auto; display: flex; flex-direction: column; ` const Title = styled(Heading2)` margin: 15px 0; ` const Content = styled(ViewContent)` padding: 20px 26px; ` const SocialButtons = styled.div` display: flex; justify-content: space-between; margin-top: auto; ` const Version = styled(AppVersion)` margin-top: auto; ` interface NavButtonProps { active: boolean } const NavButton = styled.button>` min-width: 40px; height: 40px; margin-bottom: 10px; border-radius: 5px; border: none; &:hover { background: ${(props) => (props.active ? greyBlue1 : "#aeaedb33")}; color: ${(props) => (props.active ? "#fff" : "inherit")}; } background: ${(props) => (props.active ? greyBlue1 : lightBlue)}; color: ${(props) => (props.active ? "#fff" : greyBlue1)}; svg { width: 40px !important; } text-align: left; font-size: 13px; line-height: 13px; ` const IconButton = styled.button>` min-width: 40px; height: 40px; margin-bottom: 10px; border-radius: 5px; border: none; &:hover { background: ${(props) => (props.active ? greyBlue1 : "#aeaedb33")}; color: ${(props) => (props.active ? "#fff" : "inherit")}; } background: ${(props) => (props.active ? greyBlue1 : lightBlue)}; color: ${(props) => (props.active ? "#fff" : greyBlue1)}; ` const SupportChatButton = styled.button` height: 40px; margin-bottom: 10px; border-radius: 5px; border: none; background: ${darkBlue}; color: #fff; &:enabled:hover { filter: brightness(115%); } & svg { width: 40px !important; } text-align: left; ` export const HelpView: React.FC = observer(function HelpView() { const { navigation } = useStores() const navigate = useNavigate() const location = useLocation() const isBugReportActive = location.pathname.includes(locations.helpBugReport) const isTermsAndConditionsActive = location.pathname.includes(locations.helpTermsAndConditions) return ( Get help Help using Mysterium VPN navigation.openChat()}> Support chat navigate(locations.helpBugReport)}> Bug report navigate(locations.helpTermsAndConditions)} > Terms & Conditions shell.openExternal("https://docs.mysterium.network")}> Documentation { shell.openExternal("https://discordapp.com/invite/n3vtSwc") }} > { shell.openExternal("https://www.reddit.com/r/MysteriumNetwork/") }} > { shell.openExternal("https://twitter.com/MysteriumNet") }} /> { shell.openExternal("https://www.facebook.com/MysteriumNet") }} /> ) }) ================================================ FILE: src/app/views/common/Loading/LoadingView.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useState } from "react" import styled from "styled-components" import { observer } from "mobx-react-lite" import Lottie from "react-lottie-player" import { bg1 } from "../../../ui-kit/colors" import { Spinner } from "../../../ui-kit/components/Spinner/Spinner" import animationLoadingStart from "./animation_loading_start.json" import animationLoadingLoop from "./animation_loading_loop.json" const Container = styled.div` background: ${bg1}; width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; flex-direction: column; -webkit-app-region: drag; padding-top: 50px; ` const Status = styled.div` margin-top: 50px; color: #fff; ` export interface LoadingViewProps { status: string } export const LoadingView: React.FC = observer(({ status }) => { // eslint-disable-next-line @typescript-eslint/ban-types const [anim, setAnim] = useState<{ src: object; loop: boolean; onComplete?: () => void }>({ src: animationLoadingStart, loop: false, onComplete: () => { setAnim({ src: animationLoadingLoop, loop: true, }) }, }) return ( {status} ) }) ================================================ FILE: src/app/views/common/Loading/animation_loading_loop.json ================================================ {"v":"5.7.4","fr":29.9700012207031,"ip":119.000004846969,"op":240.0000097754,"w":640,"h":560,"nm":"Logo","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Кривые MN_logo 4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":192,"s":[49]},{"t":240.0000097754,"s":[20]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[317.833,283.833,0],"ix":2,"l":2},"a":{"a":0,"k":[82.334,44.333,0],"ix":1,"l":2},"s":{"a":0,"k":[350,350,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.73,1.388],[0,0],[-1.19,0.031],[0,0],[-0.45,-0.455],[0,0],[0.895,-0.904],[0,0]],"o":[[0,0],[-0.555,-1.053],[0,0],[0.64,-0.017],[0,0],[0.895,0.904],[0,0],[-1.103,1.113]],"v":[[62.785,18.9],[51.628,-2.295],[53.007,-4.648],[54.795,-4.697],[56.505,-4.01],[71.501,11.128],[71.501,14.393],[66.487,19.454]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.908,0.917],[0,0],[-0.703,0.92],[0,0],[-0.79,-1.5],[0,0],[0.712,-0.72],[0,0]],"o":[[0,0],[-0.815,-0.823],[0,0],[1.029,-1.348],[0,0],[0.472,0.897],[0,0],[-0.908,0.916]],"v":[[48.899,33.873],[44.076,29.005],[43.88,25.964],[52.484,14.682],[56.384,15.007],[60.624,23.063],[60.219,25.779],[52.197,33.874]],"c":true},"ix":2},"nm":"Контур 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0.908,0.915],[0,0],[-0.447,0.891],[0,0],[-1.129,-0.485],[0,0],[-0.145,-0.755],[0,0],[0.541,-0.545],[0,0]],"o":[[0,0],[-0.702,-0.707],[0,0],[0.55,-1.099],[0,0],[0.706,0.303],[0,0],[0.146,0.754],[0,0],[-0.907,0.916]],"v":[[-1.651,33.865],[-14.049,21.356],[-14.476,18.682],[-13.653,17.042],[-10.662,15.949],[4.92,22.641],[6.282,24.333],[6.836,27.192],[6.205,29.268],[1.645,33.865]],"c":true},"ix":2},"nm":"Контур 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0.608,0.613],[0,0],[-1.313,0.763],[0,0],[-0.042,-1.765],[0,0],[0.297,-0.3]],"o":[[0,0],[-1.069,-1.079],[0,0],[1.526,-0.887],[0,0],[0.009,0.423],[-0.608,0.613]],"v":[[-51.652,34.417],[-61.718,24.259],[-61.236,20.619],[-52.857,15.749],[-49.37,17.701],[-48.995,33.286],[-49.445,34.417]],"c":true},"ix":2},"nm":"Контур 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[-0.357,0.113],[0,0],[-0.037,-1.547],[0,0],[0.732,-0.426],[0,0],[0.744,0.751],[0,0],[-0.896,0.905],[0,0]],"o":[[0,0],[1.475,-0.47],[0,0],[0.02,0.847],[0,0],[-0.914,0.531],[0,0],[-0.896,-0.904],[0,0],[0.263,-0.267]],"v":[[-60.731,0.628],[-52.814,-1.895],[-49.789,0.26],[-49.603,8.01],[-50.757,10.074],[-65.081,18.398],[-67.896,18.025],[-71.501,14.387],[-71.501,11.12],[-61.675,1.206]],"c":true},"ix":2},"nm":"Контур 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[-0.908,-0.916],[0,0],[-0.1,-0.409],[0,0],[1.757,0.732],[0,0],[-0.134,1.037],[0,0],[-0.359,0.361],[0,0]],"o":[[0,0],[0.296,0.299],[0,0],[0.452,1.849],[0,0],[-0.965,-0.403],[0,0],[0.066,-0.505],[0,0],[0.909,-0.917]],"v":[[-23.625,-33.868],[-21.761,-31.988],[-21.155,-30.906],[-15.706,-8.596],[-18.854,-5.904],[-29.96,-10.536],[-31.368,-12.976],[-29.036,-31.057],[-28.382,-32.393],[-26.922,-33.868]],"c":true},"ix":2},"nm":"Контур 6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":6,"ty":"sh","ix":7,"ks":{"a":0,"k":{"i":[[-0.908,-0.916],[0,0],[-0.104,-0.393],[0,0],[0.602,-0.583],[0,0],[0.514,1.653],[0,0],[-0.605,0.61],[0,0]],"o":[[0,0],[0.286,0.289],[0,0],[0.214,0.811],[0,0],[-1.241,1.205],[0,0],[-0.254,-0.82],[0,0],[0.908,-0.916]],"v":[[26.922,-33.872],[27.678,-33.107],[28.273,-32.068],[29.882,-25.984],[29.254,-23.725],[20.585,-15.312],[16.753,-16.288],[14.644,-23.059],[15.212,-25.383],[23.624,-33.872]],"c":true},"ix":2},"nm":"Контур 7","mn":"ADBE Vector Shape - Group","hd":false},{"ind":7,"ty":"sh","ix":8,"ks":{"a":0,"k":{"i":[[0.275,1.041],[0,0],[-1.253,-1.265],[0,0],[2.032,-0.054],[0,0]],"o":[[0,0],[-0.455,-1.72],[0,0],[1.43,1.444],[0,0],[-1.077,0.028]],"v":[[38.119,-9.896],[35.212,-20.893],[38.127,-22.561],[48.303,-12.288],[46.716,-8.336],[40.425,-8.169]],"c":true},"ix":2},"nm":"Контур 8","mn":"ADBE Vector Shape - Group","hd":false},{"ind":8,"ty":"sh","ix":9,"ks":{"a":0,"k":{"i":[[-1.122,0.03],[0,0],[-0.413,-0.782],[0,0],[0.548,-0.719],[0,0],[0.992,1.001],[0,0],[-0.111,0.727],[0,0]],"o":[[0,0],[0.883,-0.023],[0,0],[0.421,0.8],[0,0],[-0.854,1.12],[0,0],[-0.518,-0.523],[0,0],[0.17,-1.11]],"v":[[40.714,-4.323],[44.689,-4.428],[46.805,-3.189],[52.021,6.721],[51.813,9.212],[41.534,22.688],[38.04,22.914],[35.887,20.74],[35.241,18.755],[38.481,-2.355]],"c":true},"ix":2},"nm":"Контур 9","mn":"ADBE Vector Shape - Group","hd":false},{"ind":9,"ty":"sh","ix":10,"ks":{"a":0,"k":{"i":[[-1.06,0.398],[0,0],[-0.643,-0.663],[0,0],[0.89,-0.898],[0,0],[0.355,1.831],[0,0]],"o":[[0,0],[0.866,-0.324],[0,0],[0.879,0.908],[0,0],[-1.313,1.325],[0,0],[-0.215,-1.113]],"v":[[8.733,6.549],[13.058,4.926],[15.541,5.486],[21,11.122],[20.98,14.37],[13.444,21.968],[9.517,20.775],[7.27,9.165]],"c":true},"ix":2},"nm":"Контур 10","mn":"ADBE Vector Shape - Group","hd":false},{"ind":10,"ty":"sh","ix":11,"ks":{"a":0,"k":{"i":[[-1.126,-0.47],[0,0],[-0.148,-0.763],[0,0],[1.366,0.587],[0,0],[-0.598,1.194],[0,0]],"o":[[0,0],[0.718,0.299],[0,0],[0.282,1.46],[0,0],[-1.227,-0.527],[0,0],[0.546,-1.09]],"v":[[-4.773,4.143],[1.853,6.909],[3.239,8.609],[4.499,15.118],[1.949,17.173],[-8.682,12.607],[-9.841,9.434],[-7.741,5.245]],"c":true},"ix":2},"nm":"Контур 11","mn":"ADBE Vector Shape - Group","hd":false},{"ind":11,"ty":"sh","ix":12,"ks":{"a":0,"k":{"i":[[1.457,0.608],[0,0],[0.176,0.716],[0,0],[-1.251,-1.261],[0,0],[0.053,-0.674],[0,0]],"o":[[0,0],[-0.681,-0.284],[0,0],[-0.422,-1.725],[0,0],[0.476,0.479],[0,0],[-0.124,1.574]],"v":[[-5.947,-0.52],[-9.118,-1.842],[-10.48,-3.434],[-14.548,-20.09],[-11.601,-21.74],[-2.736,-12.797],[-2.07,-10.98],[-2.74,-2.48]],"c":true},"ix":2},"nm":"Контур 12","mn":"ADBE Vector Shape - Group","hd":false},{"ind":12,"ty":"sh","ix":13,"ks":{"a":0,"k":{"i":[[1.151,-0.432],[0,0],[0.544,0.226],[0,0],[-0.079,1.001],[0,0],[-0.386,0.389],[0,0],[-0.52,-1.671],[0,0]],"o":[[0,0],[-0.553,0.208],[0,0],[-0.927,-0.386],[0,0],[0.043,-0.548],[0,0],[1.232,-1.243],[0,0],[0.366,1.175]],"v":[[15.468,-0.09],[5.596,3.613],[3.887,3.583],[2.302,2.921],[0.881,0.596],[1.8,-11.068],[2.465,-12.52],[8.442,-18.551],[12.306,-17.607],[16.868,-2.952]],"c":true},"ix":2},"nm":"Контур 13","mn":"ADBE Vector Shape - Group","hd":false},{"ind":13,"ty":"sh","ix":14,"ks":{"a":0,"k":{"i":[[1.116,-0.419],[0,0],[0.397,1.274],[0,0],[-0.627,0.61],[0,0],[-0.274,-1.033],[0,0]],"o":[[0,0],[-1.249,0.469],[0,0],[-0.261,-0.835],[0,0],[0.767,-0.744],[0,0],[0.305,1.152]],"v":[[32.844,-6.607],[23.434,-3.079],[20.403,-4.561],[19.583,-7.198],[20.182,-9.553],[29.643,-18.734],[31.969,-18.089],[34.272,-9.374]],"c":true},"ix":2},"nm":"Контур 14","mn":"ADBE Vector Shape - Group","hd":false},{"ind":14,"ty":"sh","ix":15,"ks":{"a":0,"k":{"i":[[-1.871,-0.781],[0,0],[0.603,-1.202],[0,0],[1.118,1.128],[0,0],[0.115,0.312],[0,0]],"o":[[0,0],[1.242,0.517],[0,0],[-0.711,1.419],[0,0],[-0.234,-0.235],[0,0],[-0.702,-1.902]],"v":[[-25.436,-4.477],[-12.631,0.865],[-11.449,4.046],[-16.636,14.398],[-20.36,14.992],[-23.261,12.064],[-23.79,11.234],[-28.507,-1.531]],"c":true},"ix":2},"nm":"Контур 15","mn":"ADBE Vector Shape - Group","hd":false},{"ind":15,"ty":"sh","ix":16,"ks":{"a":0,"k":{"i":[[-1.526,-0.509],[0,0],[1.211,-1.221],[0,0],[0.03,1.258],[0,0]],"o":[[0,0],[1.632,0.544],[0,0],[-0.885,0.894],[0,0],[-0.038,-1.607]],"v":[[-42.615,9.008],[-32.37,12.428],[-31.456,16.264],[-42.857,27.77],[-45.297,26.798],[-45.671,11.266]],"c":true},"ix":2},"nm":"Контур 16","mn":"ADBE Vector Shape - Group","hd":false},{"ind":16,"ty":"sh","ix":17,"ks":{"a":0,"k":{"i":[[-0.43,-1.164],[0,0],[1.442,0.482],[0,0],[0.023,0.977],[0,0],[-0.982,0.313],[0,0]],"o":[[0,0],[0.527,1.426],[0,0],[-0.928,-0.309],[0,0],[-0.025,-1.031],[0,0],[1.182,-0.377]],"v":[[-34.093,-5.534],[-29.785,6.124],[-32.059,8.471],[-44.302,4.385],[-45.887,2.24],[-45.997,-2.314],[-44.381,-4.581],[-36.974,-6.941]],"c":true},"ix":2},"nm":"Контур 17","mn":"ADBE Vector Shape - Group","hd":false},{"ind":17,"ty":"sh","ix":18,"ks":{"a":0,"k":{"i":[[0.859,-0.274],[0,0],[-0.951,0.96],[0,0],[0.188,-1.456],[0,0]],"o":[[0,0],[-1.288,0.41],[0,0],[1.034,-1.043],[0,0],[-0.115,0.894]],"v":[[-36.853,-11.021],[-50.404,-6.704],[-51.715,-8.846],[-36.593,-24.107],[-33.98,-22.831],[-35.256,-12.936]],"c":true},"ix":2},"nm":"Контур 18","mn":"ADBE Vector Shape - Group","hd":false},{"ind":18,"ty":"sh","ix":19,"ks":{"a":0,"k":{"i":[[0,0.001],[0,0],[-1.565,0.587],[0,0],[0.27,-1.753],[0,0],[1.342,1.355],[0,0]],"o":[[0,0],[-1.163,-1.202],[0,0],[1.66,-0.623],[0,0],[-0.29,1.885],[0,0],[0,0]],"v":[[26.646,11.415],[20.88,5.462],[21.731,1.674],[31.004,-1.805],[34.112,0.721],[32.389,11.951],[28.446,13.232],[26.647,11.417]],"c":true},"ix":2},"nm":"Контур 19","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Объединить контуры 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[81.992,44.532],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":21,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":119,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":133,"s":[12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":226,"s":[12]},{"t":240.0000097754,"s":[0]}],"ix":1},"e":{"a":0,"k":0,"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":119,"s":[0]},{"t":240.0000097754,"s":[360]}],"ix":3},"m":2,"ix":2,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":26.0000010590017,"op":3922.00015974634,"st":26.0000010590017,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Кривые MN_logo 3","td":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[100]},{"t":177.000007209358,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[317.833,283.833,0],"ix":2,"l":2},"a":{"a":0,"k":[82.334,44.333,0],"ix":1,"l":2},"s":{"a":0,"k":[350,350,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.73,1.388],[0,0],[-1.19,0.031],[0,0],[-0.45,-0.455],[0,0],[0.895,-0.904],[0,0]],"o":[[0,0],[-0.555,-1.053],[0,0],[0.64,-0.017],[0,0],[0.895,0.904],[0,0],[-1.103,1.113]],"v":[[62.785,18.9],[51.628,-2.295],[53.007,-4.648],[54.795,-4.697],[56.505,-4.01],[71.501,11.128],[71.501,14.393],[66.487,19.454]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.908,0.917],[0,0],[-0.703,0.92],[0,0],[-0.79,-1.5],[0,0],[0.712,-0.72],[0,0]],"o":[[0,0],[-0.815,-0.823],[0,0],[1.029,-1.348],[0,0],[0.472,0.897],[0,0],[-0.908,0.916]],"v":[[48.899,33.873],[44.076,29.005],[43.88,25.964],[52.484,14.682],[56.384,15.007],[60.624,23.063],[60.219,25.779],[52.197,33.874]],"c":true},"ix":2},"nm":"Контур 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0.908,0.915],[0,0],[-0.447,0.891],[0,0],[-1.129,-0.485],[0,0],[-0.145,-0.755],[0,0],[0.541,-0.545],[0,0]],"o":[[0,0],[-0.702,-0.707],[0,0],[0.55,-1.099],[0,0],[0.706,0.303],[0,0],[0.146,0.754],[0,0],[-0.907,0.916]],"v":[[-1.651,33.865],[-14.049,21.356],[-14.476,18.682],[-13.653,17.042],[-10.662,15.949],[4.92,22.641],[6.282,24.333],[6.836,27.192],[6.205,29.268],[1.645,33.865]],"c":true},"ix":2},"nm":"Контур 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0.608,0.613],[0,0],[-1.313,0.763],[0,0],[-0.042,-1.765],[0,0],[0.297,-0.3]],"o":[[0,0],[-1.069,-1.079],[0,0],[1.526,-0.887],[0,0],[0.009,0.423],[-0.608,0.613]],"v":[[-51.652,34.417],[-61.718,24.259],[-61.236,20.619],[-52.857,15.749],[-49.37,17.701],[-48.995,33.286],[-49.445,34.417]],"c":true},"ix":2},"nm":"Контур 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[-0.357,0.113],[0,0],[-0.037,-1.547],[0,0],[0.732,-0.426],[0,0],[0.744,0.751],[0,0],[-0.896,0.905],[0,0]],"o":[[0,0],[1.475,-0.47],[0,0],[0.02,0.847],[0,0],[-0.914,0.531],[0,0],[-0.896,-0.904],[0,0],[0.263,-0.267]],"v":[[-60.731,0.628],[-52.814,-1.895],[-49.789,0.26],[-49.603,8.01],[-50.757,10.074],[-65.081,18.398],[-67.896,18.025],[-71.501,14.387],[-71.501,11.12],[-61.675,1.206]],"c":true},"ix":2},"nm":"Контур 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[-0.908,-0.916],[0,0],[-0.1,-0.409],[0,0],[1.757,0.732],[0,0],[-0.134,1.037],[0,0],[-0.359,0.361],[0,0]],"o":[[0,0],[0.296,0.299],[0,0],[0.452,1.849],[0,0],[-0.965,-0.403],[0,0],[0.066,-0.505],[0,0],[0.909,-0.917]],"v":[[-23.625,-33.868],[-21.761,-31.988],[-21.155,-30.906],[-15.706,-8.596],[-18.854,-5.904],[-29.96,-10.536],[-31.368,-12.976],[-29.036,-31.057],[-28.382,-32.393],[-26.922,-33.868]],"c":true},"ix":2},"nm":"Контур 6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":6,"ty":"sh","ix":7,"ks":{"a":0,"k":{"i":[[-0.908,-0.916],[0,0],[-0.104,-0.393],[0,0],[0.602,-0.583],[0,0],[0.514,1.653],[0,0],[-0.605,0.61],[0,0]],"o":[[0,0],[0.286,0.289],[0,0],[0.214,0.811],[0,0],[-1.241,1.205],[0,0],[-0.254,-0.82],[0,0],[0.908,-0.916]],"v":[[26.922,-33.872],[27.678,-33.107],[28.273,-32.068],[29.882,-25.984],[29.254,-23.725],[20.585,-15.312],[16.753,-16.288],[14.644,-23.059],[15.212,-25.383],[23.624,-33.872]],"c":true},"ix":2},"nm":"Контур 7","mn":"ADBE Vector Shape - Group","hd":false},{"ind":7,"ty":"sh","ix":8,"ks":{"a":0,"k":{"i":[[0.275,1.041],[0,0],[-1.253,-1.265],[0,0],[2.032,-0.054],[0,0]],"o":[[0,0],[-0.455,-1.72],[0,0],[1.43,1.444],[0,0],[-1.077,0.028]],"v":[[38.119,-9.896],[35.212,-20.893],[38.127,-22.561],[48.303,-12.288],[46.716,-8.336],[40.425,-8.169]],"c":true},"ix":2},"nm":"Контур 8","mn":"ADBE Vector Shape - Group","hd":false},{"ind":8,"ty":"sh","ix":9,"ks":{"a":0,"k":{"i":[[-1.122,0.03],[0,0],[-0.413,-0.782],[0,0],[0.548,-0.719],[0,0],[0.992,1.001],[0,0],[-0.111,0.727],[0,0]],"o":[[0,0],[0.883,-0.023],[0,0],[0.421,0.8],[0,0],[-0.854,1.12],[0,0],[-0.518,-0.523],[0,0],[0.17,-1.11]],"v":[[40.714,-4.323],[44.689,-4.428],[46.805,-3.189],[52.021,6.721],[51.813,9.212],[41.534,22.688],[38.04,22.914],[35.887,20.74],[35.241,18.755],[38.481,-2.355]],"c":true},"ix":2},"nm":"Контур 9","mn":"ADBE Vector Shape - Group","hd":false},{"ind":9,"ty":"sh","ix":10,"ks":{"a":0,"k":{"i":[[-1.06,0.398],[0,0],[-0.643,-0.663],[0,0],[0.89,-0.898],[0,0],[0.355,1.831],[0,0]],"o":[[0,0],[0.866,-0.324],[0,0],[0.879,0.908],[0,0],[-1.313,1.325],[0,0],[-0.215,-1.113]],"v":[[8.733,6.549],[13.058,4.926],[15.541,5.486],[21,11.122],[20.98,14.37],[13.444,21.968],[9.517,20.775],[7.27,9.165]],"c":true},"ix":2},"nm":"Контур 10","mn":"ADBE Vector Shape - Group","hd":false},{"ind":10,"ty":"sh","ix":11,"ks":{"a":0,"k":{"i":[[-1.126,-0.47],[0,0],[-0.148,-0.763],[0,0],[1.366,0.587],[0,0],[-0.598,1.194],[0,0]],"o":[[0,0],[0.718,0.299],[0,0],[0.282,1.46],[0,0],[-1.227,-0.527],[0,0],[0.546,-1.09]],"v":[[-4.773,4.143],[1.853,6.909],[3.239,8.609],[4.499,15.118],[1.949,17.173],[-8.682,12.607],[-9.841,9.434],[-7.741,5.245]],"c":true},"ix":2},"nm":"Контур 11","mn":"ADBE Vector Shape - Group","hd":false},{"ind":11,"ty":"sh","ix":12,"ks":{"a":0,"k":{"i":[[1.457,0.608],[0,0],[0.176,0.716],[0,0],[-1.251,-1.261],[0,0],[0.053,-0.674],[0,0]],"o":[[0,0],[-0.681,-0.284],[0,0],[-0.422,-1.725],[0,0],[0.476,0.479],[0,0],[-0.124,1.574]],"v":[[-5.947,-0.52],[-9.118,-1.842],[-10.48,-3.434],[-14.548,-20.09],[-11.601,-21.74],[-2.736,-12.797],[-2.07,-10.98],[-2.74,-2.48]],"c":true},"ix":2},"nm":"Контур 12","mn":"ADBE Vector Shape - Group","hd":false},{"ind":12,"ty":"sh","ix":13,"ks":{"a":0,"k":{"i":[[1.151,-0.432],[0,0],[0.544,0.226],[0,0],[-0.079,1.001],[0,0],[-0.386,0.389],[0,0],[-0.52,-1.671],[0,0]],"o":[[0,0],[-0.553,0.208],[0,0],[-0.927,-0.386],[0,0],[0.043,-0.548],[0,0],[1.232,-1.243],[0,0],[0.366,1.175]],"v":[[15.468,-0.09],[5.596,3.613],[3.887,3.583],[2.302,2.921],[0.881,0.596],[1.8,-11.068],[2.465,-12.52],[8.442,-18.551],[12.306,-17.607],[16.868,-2.952]],"c":true},"ix":2},"nm":"Контур 13","mn":"ADBE Vector Shape - Group","hd":false},{"ind":13,"ty":"sh","ix":14,"ks":{"a":0,"k":{"i":[[1.116,-0.419],[0,0],[0.397,1.274],[0,0],[-0.627,0.61],[0,0],[-0.274,-1.033],[0,0]],"o":[[0,0],[-1.249,0.469],[0,0],[-0.261,-0.835],[0,0],[0.767,-0.744],[0,0],[0.305,1.152]],"v":[[32.844,-6.607],[23.434,-3.079],[20.403,-4.561],[19.583,-7.198],[20.182,-9.553],[29.643,-18.734],[31.969,-18.089],[34.272,-9.374]],"c":true},"ix":2},"nm":"Контур 14","mn":"ADBE Vector Shape - Group","hd":false},{"ind":14,"ty":"sh","ix":15,"ks":{"a":0,"k":{"i":[[-1.871,-0.781],[0,0],[0.603,-1.202],[0,0],[1.118,1.128],[0,0],[0.115,0.312],[0,0]],"o":[[0,0],[1.242,0.517],[0,0],[-0.711,1.419],[0,0],[-0.234,-0.235],[0,0],[-0.702,-1.902]],"v":[[-25.436,-4.477],[-12.631,0.865],[-11.449,4.046],[-16.636,14.398],[-20.36,14.992],[-23.261,12.064],[-23.79,11.234],[-28.507,-1.531]],"c":true},"ix":2},"nm":"Контур 15","mn":"ADBE Vector Shape - Group","hd":false},{"ind":15,"ty":"sh","ix":16,"ks":{"a":0,"k":{"i":[[-1.526,-0.509],[0,0],[1.211,-1.221],[0,0],[0.03,1.258],[0,0]],"o":[[0,0],[1.632,0.544],[0,0],[-0.885,0.894],[0,0],[-0.038,-1.607]],"v":[[-42.615,9.008],[-32.37,12.428],[-31.456,16.264],[-42.857,27.77],[-45.297,26.798],[-45.671,11.266]],"c":true},"ix":2},"nm":"Контур 16","mn":"ADBE Vector Shape - Group","hd":false},{"ind":16,"ty":"sh","ix":17,"ks":{"a":0,"k":{"i":[[-0.43,-1.164],[0,0],[1.442,0.482],[0,0],[0.023,0.977],[0,0],[-0.982,0.313],[0,0]],"o":[[0,0],[0.527,1.426],[0,0],[-0.928,-0.309],[0,0],[-0.025,-1.031],[0,0],[1.182,-0.377]],"v":[[-34.093,-5.534],[-29.785,6.124],[-32.059,8.471],[-44.302,4.385],[-45.887,2.24],[-45.997,-2.314],[-44.381,-4.581],[-36.974,-6.941]],"c":true},"ix":2},"nm":"Контур 17","mn":"ADBE Vector Shape - Group","hd":false},{"ind":17,"ty":"sh","ix":18,"ks":{"a":0,"k":{"i":[[0.859,-0.274],[0,0],[-0.951,0.96],[0,0],[0.188,-1.456],[0,0]],"o":[[0,0],[-1.288,0.41],[0,0],[1.034,-1.043],[0,0],[-0.115,0.894]],"v":[[-36.853,-11.021],[-50.404,-6.704],[-51.715,-8.846],[-36.593,-24.107],[-33.98,-22.831],[-35.256,-12.936]],"c":true},"ix":2},"nm":"Контур 18","mn":"ADBE Vector Shape - Group","hd":false},{"ind":18,"ty":"sh","ix":19,"ks":{"a":0,"k":{"i":[[0,0.001],[0,0],[-1.565,0.587],[0,0],[0.27,-1.753],[0,0],[1.342,1.355],[0,0]],"o":[[0,0],[-1.163,-1.202],[0,0],[1.66,-0.623],[0,0],[-0.29,1.885],[0,0],[0,0]],"v":[[26.646,11.415],[20.88,5.462],[21.731,1.674],[31.004,-1.805],[34.112,0.721],[32.389,11.951],[28.446,13.232],[26.647,11.417]],"c":true},"ix":2},"nm":"Контур 19","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Объединить контуры 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[81.992,44.532],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":21,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":73,"s":[0]},{"t":120.0000048877,"s":[100]}],"ix":1},"e":{"a":0,"k":0,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":26.0000010590017,"op":3922.00015974634,"st":26.0000010590017,"bm":0},{"ddd":0,"ind":3,"ty":0,"nm":"Предварительная композиция 1","tt":2,"refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":0,"s":[-90]},{"t":20.0000008146167,"s":[0]}],"ix":10},"p":{"a":0,"k":[320,237.813,0],"ix":2,"l":2},"a":{"a":0,"k":[320,237.813,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.825,0.825,0.825],"y":[0.583,0.583,-11.513]},"o":{"x":[0.568,0.568,0.568],"y":[0,0,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.271,0.271,0.271],"y":[1,1,1]},"o":{"x":[0.225,0.225,0.225],"y":[0.964,0.964,67.503]},"t":10,"s":[30,30,100]},{"t":52.0000021180034,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"w":640,"h":560,"ip":0,"op":3896.00015868733,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Слой-фигура 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-90,"ix":10},"p":{"a":0,"k":[332.507,345.169,0],"ix":2,"l":2},"a":{"a":0,"k":[-195.669,62.007,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[174,314],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":8,"ix":4},"nm":"Контур прямоугольника 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.976471007104,0.989758001589,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-135,3.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[79.589,84.121],"ix":3},"r":{"a":0,"k":45,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Слой-фигура 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":14,"s":[334.5,135,0],"to":[-14.792,14.792,0],"ti":[14.792,-14.792,0]},{"t":44.0000017921567,"s":[245.75,223.75,0]}],"ix":2,"l":2},"a":{"a":0,"k":[-74.25,-57.25,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[174,314],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":8,"ix":4},"nm":"Контур прямоугольника 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.976471007104,0.989758001589,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-135,3.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[79.589,84.121],"ix":3},"r":{"a":0,"k":45,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Слой-фигура 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-90,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":14,"s":[319,151,0],"to":[14.25,14.833,0],"ti":[-14.25,-14.833,0]},{"t":44.0000017921567,"s":[404.5,240,0]}],"ix":2,"l":2},"a":{"a":0,"k":[-90.5,-41,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[174,314],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":8,"ix":4},"nm":"Контур прямоугольника 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.976471007104,0.989758001589,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-135,3.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[79.589,84.121],"ix":3},"r":{"a":0,"k":45,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Предварительная композиция 2","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[322,280,0],"ix":2,"l":2},"a":{"a":0,"k":[320,280,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":22,"s":[85,85,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":63,"s":[112,112,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":119,"s":[100,100,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":149,"s":[105,105,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":180,"s":[100,100,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":210,"s":[105,105,100]},{"t":240.0000097754,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"w":640,"h":560,"ip":0,"op":3896.00015868733,"st":0,"bm":0}],"markers":[]} ================================================ FILE: src/app/views/common/Loading/animation_loading_start.json ================================================ {"v":"5.7.4","fr":29.9700012207031,"ip":0,"op":119.000004846969,"w":640,"h":560,"nm":"Logo","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Кривые MN_logo 4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":192,"s":[49]},{"t":240.0000097754,"s":[20]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[317.833,283.833,0],"ix":2,"l":2},"a":{"a":0,"k":[82.334,44.333,0],"ix":1,"l":2},"s":{"a":0,"k":[350,350,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.73,1.388],[0,0],[-1.19,0.031],[0,0],[-0.45,-0.455],[0,0],[0.895,-0.904],[0,0]],"o":[[0,0],[-0.555,-1.053],[0,0],[0.64,-0.017],[0,0],[0.895,0.904],[0,0],[-1.103,1.113]],"v":[[62.785,18.9],[51.628,-2.295],[53.007,-4.648],[54.795,-4.697],[56.505,-4.01],[71.501,11.128],[71.501,14.393],[66.487,19.454]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.908,0.917],[0,0],[-0.703,0.92],[0,0],[-0.79,-1.5],[0,0],[0.712,-0.72],[0,0]],"o":[[0,0],[-0.815,-0.823],[0,0],[1.029,-1.348],[0,0],[0.472,0.897],[0,0],[-0.908,0.916]],"v":[[48.899,33.873],[44.076,29.005],[43.88,25.964],[52.484,14.682],[56.384,15.007],[60.624,23.063],[60.219,25.779],[52.197,33.874]],"c":true},"ix":2},"nm":"Контур 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0.908,0.915],[0,0],[-0.447,0.891],[0,0],[-1.129,-0.485],[0,0],[-0.145,-0.755],[0,0],[0.541,-0.545],[0,0]],"o":[[0,0],[-0.702,-0.707],[0,0],[0.55,-1.099],[0,0],[0.706,0.303],[0,0],[0.146,0.754],[0,0],[-0.907,0.916]],"v":[[-1.651,33.865],[-14.049,21.356],[-14.476,18.682],[-13.653,17.042],[-10.662,15.949],[4.92,22.641],[6.282,24.333],[6.836,27.192],[6.205,29.268],[1.645,33.865]],"c":true},"ix":2},"nm":"Контур 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0.608,0.613],[0,0],[-1.313,0.763],[0,0],[-0.042,-1.765],[0,0],[0.297,-0.3]],"o":[[0,0],[-1.069,-1.079],[0,0],[1.526,-0.887],[0,0],[0.009,0.423],[-0.608,0.613]],"v":[[-51.652,34.417],[-61.718,24.259],[-61.236,20.619],[-52.857,15.749],[-49.37,17.701],[-48.995,33.286],[-49.445,34.417]],"c":true},"ix":2},"nm":"Контур 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[-0.357,0.113],[0,0],[-0.037,-1.547],[0,0],[0.732,-0.426],[0,0],[0.744,0.751],[0,0],[-0.896,0.905],[0,0]],"o":[[0,0],[1.475,-0.47],[0,0],[0.02,0.847],[0,0],[-0.914,0.531],[0,0],[-0.896,-0.904],[0,0],[0.263,-0.267]],"v":[[-60.731,0.628],[-52.814,-1.895],[-49.789,0.26],[-49.603,8.01],[-50.757,10.074],[-65.081,18.398],[-67.896,18.025],[-71.501,14.387],[-71.501,11.12],[-61.675,1.206]],"c":true},"ix":2},"nm":"Контур 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[-0.908,-0.916],[0,0],[-0.1,-0.409],[0,0],[1.757,0.732],[0,0],[-0.134,1.037],[0,0],[-0.359,0.361],[0,0]],"o":[[0,0],[0.296,0.299],[0,0],[0.452,1.849],[0,0],[-0.965,-0.403],[0,0],[0.066,-0.505],[0,0],[0.909,-0.917]],"v":[[-23.625,-33.868],[-21.761,-31.988],[-21.155,-30.906],[-15.706,-8.596],[-18.854,-5.904],[-29.96,-10.536],[-31.368,-12.976],[-29.036,-31.057],[-28.382,-32.393],[-26.922,-33.868]],"c":true},"ix":2},"nm":"Контур 6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":6,"ty":"sh","ix":7,"ks":{"a":0,"k":{"i":[[-0.908,-0.916],[0,0],[-0.104,-0.393],[0,0],[0.602,-0.583],[0,0],[0.514,1.653],[0,0],[-0.605,0.61],[0,0]],"o":[[0,0],[0.286,0.289],[0,0],[0.214,0.811],[0,0],[-1.241,1.205],[0,0],[-0.254,-0.82],[0,0],[0.908,-0.916]],"v":[[26.922,-33.872],[27.678,-33.107],[28.273,-32.068],[29.882,-25.984],[29.254,-23.725],[20.585,-15.312],[16.753,-16.288],[14.644,-23.059],[15.212,-25.383],[23.624,-33.872]],"c":true},"ix":2},"nm":"Контур 7","mn":"ADBE Vector Shape - Group","hd":false},{"ind":7,"ty":"sh","ix":8,"ks":{"a":0,"k":{"i":[[0.275,1.041],[0,0],[-1.253,-1.265],[0,0],[2.032,-0.054],[0,0]],"o":[[0,0],[-0.455,-1.72],[0,0],[1.43,1.444],[0,0],[-1.077,0.028]],"v":[[38.119,-9.896],[35.212,-20.893],[38.127,-22.561],[48.303,-12.288],[46.716,-8.336],[40.425,-8.169]],"c":true},"ix":2},"nm":"Контур 8","mn":"ADBE Vector Shape - Group","hd":false},{"ind":8,"ty":"sh","ix":9,"ks":{"a":0,"k":{"i":[[-1.122,0.03],[0,0],[-0.413,-0.782],[0,0],[0.548,-0.719],[0,0],[0.992,1.001],[0,0],[-0.111,0.727],[0,0]],"o":[[0,0],[0.883,-0.023],[0,0],[0.421,0.8],[0,0],[-0.854,1.12],[0,0],[-0.518,-0.523],[0,0],[0.17,-1.11]],"v":[[40.714,-4.323],[44.689,-4.428],[46.805,-3.189],[52.021,6.721],[51.813,9.212],[41.534,22.688],[38.04,22.914],[35.887,20.74],[35.241,18.755],[38.481,-2.355]],"c":true},"ix":2},"nm":"Контур 9","mn":"ADBE Vector Shape - Group","hd":false},{"ind":9,"ty":"sh","ix":10,"ks":{"a":0,"k":{"i":[[-1.06,0.398],[0,0],[-0.643,-0.663],[0,0],[0.89,-0.898],[0,0],[0.355,1.831],[0,0]],"o":[[0,0],[0.866,-0.324],[0,0],[0.879,0.908],[0,0],[-1.313,1.325],[0,0],[-0.215,-1.113]],"v":[[8.733,6.549],[13.058,4.926],[15.541,5.486],[21,11.122],[20.98,14.37],[13.444,21.968],[9.517,20.775],[7.27,9.165]],"c":true},"ix":2},"nm":"Контур 10","mn":"ADBE Vector Shape - Group","hd":false},{"ind":10,"ty":"sh","ix":11,"ks":{"a":0,"k":{"i":[[-1.126,-0.47],[0,0],[-0.148,-0.763],[0,0],[1.366,0.587],[0,0],[-0.598,1.194],[0,0]],"o":[[0,0],[0.718,0.299],[0,0],[0.282,1.46],[0,0],[-1.227,-0.527],[0,0],[0.546,-1.09]],"v":[[-4.773,4.143],[1.853,6.909],[3.239,8.609],[4.499,15.118],[1.949,17.173],[-8.682,12.607],[-9.841,9.434],[-7.741,5.245]],"c":true},"ix":2},"nm":"Контур 11","mn":"ADBE Vector Shape - Group","hd":false},{"ind":11,"ty":"sh","ix":12,"ks":{"a":0,"k":{"i":[[1.457,0.608],[0,0],[0.176,0.716],[0,0],[-1.251,-1.261],[0,0],[0.053,-0.674],[0,0]],"o":[[0,0],[-0.681,-0.284],[0,0],[-0.422,-1.725],[0,0],[0.476,0.479],[0,0],[-0.124,1.574]],"v":[[-5.947,-0.52],[-9.118,-1.842],[-10.48,-3.434],[-14.548,-20.09],[-11.601,-21.74],[-2.736,-12.797],[-2.07,-10.98],[-2.74,-2.48]],"c":true},"ix":2},"nm":"Контур 12","mn":"ADBE Vector Shape - Group","hd":false},{"ind":12,"ty":"sh","ix":13,"ks":{"a":0,"k":{"i":[[1.151,-0.432],[0,0],[0.544,0.226],[0,0],[-0.079,1.001],[0,0],[-0.386,0.389],[0,0],[-0.52,-1.671],[0,0]],"o":[[0,0],[-0.553,0.208],[0,0],[-0.927,-0.386],[0,0],[0.043,-0.548],[0,0],[1.232,-1.243],[0,0],[0.366,1.175]],"v":[[15.468,-0.09],[5.596,3.613],[3.887,3.583],[2.302,2.921],[0.881,0.596],[1.8,-11.068],[2.465,-12.52],[8.442,-18.551],[12.306,-17.607],[16.868,-2.952]],"c":true},"ix":2},"nm":"Контур 13","mn":"ADBE Vector Shape - Group","hd":false},{"ind":13,"ty":"sh","ix":14,"ks":{"a":0,"k":{"i":[[1.116,-0.419],[0,0],[0.397,1.274],[0,0],[-0.627,0.61],[0,0],[-0.274,-1.033],[0,0]],"o":[[0,0],[-1.249,0.469],[0,0],[-0.261,-0.835],[0,0],[0.767,-0.744],[0,0],[0.305,1.152]],"v":[[32.844,-6.607],[23.434,-3.079],[20.403,-4.561],[19.583,-7.198],[20.182,-9.553],[29.643,-18.734],[31.969,-18.089],[34.272,-9.374]],"c":true},"ix":2},"nm":"Контур 14","mn":"ADBE Vector Shape - Group","hd":false},{"ind":14,"ty":"sh","ix":15,"ks":{"a":0,"k":{"i":[[-1.871,-0.781],[0,0],[0.603,-1.202],[0,0],[1.118,1.128],[0,0],[0.115,0.312],[0,0]],"o":[[0,0],[1.242,0.517],[0,0],[-0.711,1.419],[0,0],[-0.234,-0.235],[0,0],[-0.702,-1.902]],"v":[[-25.436,-4.477],[-12.631,0.865],[-11.449,4.046],[-16.636,14.398],[-20.36,14.992],[-23.261,12.064],[-23.79,11.234],[-28.507,-1.531]],"c":true},"ix":2},"nm":"Контур 15","mn":"ADBE Vector Shape - Group","hd":false},{"ind":15,"ty":"sh","ix":16,"ks":{"a":0,"k":{"i":[[-1.526,-0.509],[0,0],[1.211,-1.221],[0,0],[0.03,1.258],[0,0]],"o":[[0,0],[1.632,0.544],[0,0],[-0.885,0.894],[0,0],[-0.038,-1.607]],"v":[[-42.615,9.008],[-32.37,12.428],[-31.456,16.264],[-42.857,27.77],[-45.297,26.798],[-45.671,11.266]],"c":true},"ix":2},"nm":"Контур 16","mn":"ADBE Vector Shape - Group","hd":false},{"ind":16,"ty":"sh","ix":17,"ks":{"a":0,"k":{"i":[[-0.43,-1.164],[0,0],[1.442,0.482],[0,0],[0.023,0.977],[0,0],[-0.982,0.313],[0,0]],"o":[[0,0],[0.527,1.426],[0,0],[-0.928,-0.309],[0,0],[-0.025,-1.031],[0,0],[1.182,-0.377]],"v":[[-34.093,-5.534],[-29.785,6.124],[-32.059,8.471],[-44.302,4.385],[-45.887,2.24],[-45.997,-2.314],[-44.381,-4.581],[-36.974,-6.941]],"c":true},"ix":2},"nm":"Контур 17","mn":"ADBE Vector Shape - Group","hd":false},{"ind":17,"ty":"sh","ix":18,"ks":{"a":0,"k":{"i":[[0.859,-0.274],[0,0],[-0.951,0.96],[0,0],[0.188,-1.456],[0,0]],"o":[[0,0],[-1.288,0.41],[0,0],[1.034,-1.043],[0,0],[-0.115,0.894]],"v":[[-36.853,-11.021],[-50.404,-6.704],[-51.715,-8.846],[-36.593,-24.107],[-33.98,-22.831],[-35.256,-12.936]],"c":true},"ix":2},"nm":"Контур 18","mn":"ADBE Vector Shape - Group","hd":false},{"ind":18,"ty":"sh","ix":19,"ks":{"a":0,"k":{"i":[[0,0.001],[0,0],[-1.565,0.587],[0,0],[0.27,-1.753],[0,0],[1.342,1.355],[0,0]],"o":[[0,0],[-1.163,-1.202],[0,0],[1.66,-0.623],[0,0],[-0.29,1.885],[0,0],[0,0]],"v":[[26.646,11.415],[20.88,5.462],[21.731,1.674],[31.004,-1.805],[34.112,0.721],[32.389,11.951],[28.446,13.232],[26.647,11.417]],"c":true},"ix":2},"nm":"Контур 19","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Объединить контуры 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[81.992,44.532],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":21,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":119,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":133,"s":[12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":226,"s":[12]},{"t":240.0000097754,"s":[0]}],"ix":1},"e":{"a":0,"k":0,"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":119,"s":[0]},{"t":240.0000097754,"s":[360]}],"ix":3},"m":2,"ix":2,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":26.0000010590017,"op":3922.00015974634,"st":26.0000010590017,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Кривые MN_logo 3","td":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[100]},{"t":177.000007209358,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[317.833,283.833,0],"ix":2,"l":2},"a":{"a":0,"k":[82.334,44.333,0],"ix":1,"l":2},"s":{"a":0,"k":[350,350,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.73,1.388],[0,0],[-1.19,0.031],[0,0],[-0.45,-0.455],[0,0],[0.895,-0.904],[0,0]],"o":[[0,0],[-0.555,-1.053],[0,0],[0.64,-0.017],[0,0],[0.895,0.904],[0,0],[-1.103,1.113]],"v":[[62.785,18.9],[51.628,-2.295],[53.007,-4.648],[54.795,-4.697],[56.505,-4.01],[71.501,11.128],[71.501,14.393],[66.487,19.454]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.908,0.917],[0,0],[-0.703,0.92],[0,0],[-0.79,-1.5],[0,0],[0.712,-0.72],[0,0]],"o":[[0,0],[-0.815,-0.823],[0,0],[1.029,-1.348],[0,0],[0.472,0.897],[0,0],[-0.908,0.916]],"v":[[48.899,33.873],[44.076,29.005],[43.88,25.964],[52.484,14.682],[56.384,15.007],[60.624,23.063],[60.219,25.779],[52.197,33.874]],"c":true},"ix":2},"nm":"Контур 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0.908,0.915],[0,0],[-0.447,0.891],[0,0],[-1.129,-0.485],[0,0],[-0.145,-0.755],[0,0],[0.541,-0.545],[0,0]],"o":[[0,0],[-0.702,-0.707],[0,0],[0.55,-1.099],[0,0],[0.706,0.303],[0,0],[0.146,0.754],[0,0],[-0.907,0.916]],"v":[[-1.651,33.865],[-14.049,21.356],[-14.476,18.682],[-13.653,17.042],[-10.662,15.949],[4.92,22.641],[6.282,24.333],[6.836,27.192],[6.205,29.268],[1.645,33.865]],"c":true},"ix":2},"nm":"Контур 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0.608,0.613],[0,0],[-1.313,0.763],[0,0],[-0.042,-1.765],[0,0],[0.297,-0.3]],"o":[[0,0],[-1.069,-1.079],[0,0],[1.526,-0.887],[0,0],[0.009,0.423],[-0.608,0.613]],"v":[[-51.652,34.417],[-61.718,24.259],[-61.236,20.619],[-52.857,15.749],[-49.37,17.701],[-48.995,33.286],[-49.445,34.417]],"c":true},"ix":2},"nm":"Контур 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[-0.357,0.113],[0,0],[-0.037,-1.547],[0,0],[0.732,-0.426],[0,0],[0.744,0.751],[0,0],[-0.896,0.905],[0,0]],"o":[[0,0],[1.475,-0.47],[0,0],[0.02,0.847],[0,0],[-0.914,0.531],[0,0],[-0.896,-0.904],[0,0],[0.263,-0.267]],"v":[[-60.731,0.628],[-52.814,-1.895],[-49.789,0.26],[-49.603,8.01],[-50.757,10.074],[-65.081,18.398],[-67.896,18.025],[-71.501,14.387],[-71.501,11.12],[-61.675,1.206]],"c":true},"ix":2},"nm":"Контур 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[-0.908,-0.916],[0,0],[-0.1,-0.409],[0,0],[1.757,0.732],[0,0],[-0.134,1.037],[0,0],[-0.359,0.361],[0,0]],"o":[[0,0],[0.296,0.299],[0,0],[0.452,1.849],[0,0],[-0.965,-0.403],[0,0],[0.066,-0.505],[0,0],[0.909,-0.917]],"v":[[-23.625,-33.868],[-21.761,-31.988],[-21.155,-30.906],[-15.706,-8.596],[-18.854,-5.904],[-29.96,-10.536],[-31.368,-12.976],[-29.036,-31.057],[-28.382,-32.393],[-26.922,-33.868]],"c":true},"ix":2},"nm":"Контур 6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":6,"ty":"sh","ix":7,"ks":{"a":0,"k":{"i":[[-0.908,-0.916],[0,0],[-0.104,-0.393],[0,0],[0.602,-0.583],[0,0],[0.514,1.653],[0,0],[-0.605,0.61],[0,0]],"o":[[0,0],[0.286,0.289],[0,0],[0.214,0.811],[0,0],[-1.241,1.205],[0,0],[-0.254,-0.82],[0,0],[0.908,-0.916]],"v":[[26.922,-33.872],[27.678,-33.107],[28.273,-32.068],[29.882,-25.984],[29.254,-23.725],[20.585,-15.312],[16.753,-16.288],[14.644,-23.059],[15.212,-25.383],[23.624,-33.872]],"c":true},"ix":2},"nm":"Контур 7","mn":"ADBE Vector Shape - Group","hd":false},{"ind":7,"ty":"sh","ix":8,"ks":{"a":0,"k":{"i":[[0.275,1.041],[0,0],[-1.253,-1.265],[0,0],[2.032,-0.054],[0,0]],"o":[[0,0],[-0.455,-1.72],[0,0],[1.43,1.444],[0,0],[-1.077,0.028]],"v":[[38.119,-9.896],[35.212,-20.893],[38.127,-22.561],[48.303,-12.288],[46.716,-8.336],[40.425,-8.169]],"c":true},"ix":2},"nm":"Контур 8","mn":"ADBE Vector Shape - Group","hd":false},{"ind":8,"ty":"sh","ix":9,"ks":{"a":0,"k":{"i":[[-1.122,0.03],[0,0],[-0.413,-0.782],[0,0],[0.548,-0.719],[0,0],[0.992,1.001],[0,0],[-0.111,0.727],[0,0]],"o":[[0,0],[0.883,-0.023],[0,0],[0.421,0.8],[0,0],[-0.854,1.12],[0,0],[-0.518,-0.523],[0,0],[0.17,-1.11]],"v":[[40.714,-4.323],[44.689,-4.428],[46.805,-3.189],[52.021,6.721],[51.813,9.212],[41.534,22.688],[38.04,22.914],[35.887,20.74],[35.241,18.755],[38.481,-2.355]],"c":true},"ix":2},"nm":"Контур 9","mn":"ADBE Vector Shape - Group","hd":false},{"ind":9,"ty":"sh","ix":10,"ks":{"a":0,"k":{"i":[[-1.06,0.398],[0,0],[-0.643,-0.663],[0,0],[0.89,-0.898],[0,0],[0.355,1.831],[0,0]],"o":[[0,0],[0.866,-0.324],[0,0],[0.879,0.908],[0,0],[-1.313,1.325],[0,0],[-0.215,-1.113]],"v":[[8.733,6.549],[13.058,4.926],[15.541,5.486],[21,11.122],[20.98,14.37],[13.444,21.968],[9.517,20.775],[7.27,9.165]],"c":true},"ix":2},"nm":"Контур 10","mn":"ADBE Vector Shape - Group","hd":false},{"ind":10,"ty":"sh","ix":11,"ks":{"a":0,"k":{"i":[[-1.126,-0.47],[0,0],[-0.148,-0.763],[0,0],[1.366,0.587],[0,0],[-0.598,1.194],[0,0]],"o":[[0,0],[0.718,0.299],[0,0],[0.282,1.46],[0,0],[-1.227,-0.527],[0,0],[0.546,-1.09]],"v":[[-4.773,4.143],[1.853,6.909],[3.239,8.609],[4.499,15.118],[1.949,17.173],[-8.682,12.607],[-9.841,9.434],[-7.741,5.245]],"c":true},"ix":2},"nm":"Контур 11","mn":"ADBE Vector Shape - Group","hd":false},{"ind":11,"ty":"sh","ix":12,"ks":{"a":0,"k":{"i":[[1.457,0.608],[0,0],[0.176,0.716],[0,0],[-1.251,-1.261],[0,0],[0.053,-0.674],[0,0]],"o":[[0,0],[-0.681,-0.284],[0,0],[-0.422,-1.725],[0,0],[0.476,0.479],[0,0],[-0.124,1.574]],"v":[[-5.947,-0.52],[-9.118,-1.842],[-10.48,-3.434],[-14.548,-20.09],[-11.601,-21.74],[-2.736,-12.797],[-2.07,-10.98],[-2.74,-2.48]],"c":true},"ix":2},"nm":"Контур 12","mn":"ADBE Vector Shape - Group","hd":false},{"ind":12,"ty":"sh","ix":13,"ks":{"a":0,"k":{"i":[[1.151,-0.432],[0,0],[0.544,0.226],[0,0],[-0.079,1.001],[0,0],[-0.386,0.389],[0,0],[-0.52,-1.671],[0,0]],"o":[[0,0],[-0.553,0.208],[0,0],[-0.927,-0.386],[0,0],[0.043,-0.548],[0,0],[1.232,-1.243],[0,0],[0.366,1.175]],"v":[[15.468,-0.09],[5.596,3.613],[3.887,3.583],[2.302,2.921],[0.881,0.596],[1.8,-11.068],[2.465,-12.52],[8.442,-18.551],[12.306,-17.607],[16.868,-2.952]],"c":true},"ix":2},"nm":"Контур 13","mn":"ADBE Vector Shape - Group","hd":false},{"ind":13,"ty":"sh","ix":14,"ks":{"a":0,"k":{"i":[[1.116,-0.419],[0,0],[0.397,1.274],[0,0],[-0.627,0.61],[0,0],[-0.274,-1.033],[0,0]],"o":[[0,0],[-1.249,0.469],[0,0],[-0.261,-0.835],[0,0],[0.767,-0.744],[0,0],[0.305,1.152]],"v":[[32.844,-6.607],[23.434,-3.079],[20.403,-4.561],[19.583,-7.198],[20.182,-9.553],[29.643,-18.734],[31.969,-18.089],[34.272,-9.374]],"c":true},"ix":2},"nm":"Контур 14","mn":"ADBE Vector Shape - Group","hd":false},{"ind":14,"ty":"sh","ix":15,"ks":{"a":0,"k":{"i":[[-1.871,-0.781],[0,0],[0.603,-1.202],[0,0],[1.118,1.128],[0,0],[0.115,0.312],[0,0]],"o":[[0,0],[1.242,0.517],[0,0],[-0.711,1.419],[0,0],[-0.234,-0.235],[0,0],[-0.702,-1.902]],"v":[[-25.436,-4.477],[-12.631,0.865],[-11.449,4.046],[-16.636,14.398],[-20.36,14.992],[-23.261,12.064],[-23.79,11.234],[-28.507,-1.531]],"c":true},"ix":2},"nm":"Контур 15","mn":"ADBE Vector Shape - Group","hd":false},{"ind":15,"ty":"sh","ix":16,"ks":{"a":0,"k":{"i":[[-1.526,-0.509],[0,0],[1.211,-1.221],[0,0],[0.03,1.258],[0,0]],"o":[[0,0],[1.632,0.544],[0,0],[-0.885,0.894],[0,0],[-0.038,-1.607]],"v":[[-42.615,9.008],[-32.37,12.428],[-31.456,16.264],[-42.857,27.77],[-45.297,26.798],[-45.671,11.266]],"c":true},"ix":2},"nm":"Контур 16","mn":"ADBE Vector Shape - Group","hd":false},{"ind":16,"ty":"sh","ix":17,"ks":{"a":0,"k":{"i":[[-0.43,-1.164],[0,0],[1.442,0.482],[0,0],[0.023,0.977],[0,0],[-0.982,0.313],[0,0]],"o":[[0,0],[0.527,1.426],[0,0],[-0.928,-0.309],[0,0],[-0.025,-1.031],[0,0],[1.182,-0.377]],"v":[[-34.093,-5.534],[-29.785,6.124],[-32.059,8.471],[-44.302,4.385],[-45.887,2.24],[-45.997,-2.314],[-44.381,-4.581],[-36.974,-6.941]],"c":true},"ix":2},"nm":"Контур 17","mn":"ADBE Vector Shape - Group","hd":false},{"ind":17,"ty":"sh","ix":18,"ks":{"a":0,"k":{"i":[[0.859,-0.274],[0,0],[-0.951,0.96],[0,0],[0.188,-1.456],[0,0]],"o":[[0,0],[-1.288,0.41],[0,0],[1.034,-1.043],[0,0],[-0.115,0.894]],"v":[[-36.853,-11.021],[-50.404,-6.704],[-51.715,-8.846],[-36.593,-24.107],[-33.98,-22.831],[-35.256,-12.936]],"c":true},"ix":2},"nm":"Контур 18","mn":"ADBE Vector Shape - Group","hd":false},{"ind":18,"ty":"sh","ix":19,"ks":{"a":0,"k":{"i":[[0,0.001],[0,0],[-1.565,0.587],[0,0],[0.27,-1.753],[0,0],[1.342,1.355],[0,0]],"o":[[0,0],[-1.163,-1.202],[0,0],[1.66,-0.623],[0,0],[-0.29,1.885],[0,0],[0,0]],"v":[[26.646,11.415],[20.88,5.462],[21.731,1.674],[31.004,-1.805],[34.112,0.721],[32.389,11.951],[28.446,13.232],[26.647,11.417]],"c":true},"ix":2},"nm":"Контур 19","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Объединить контуры 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[81.992,44.532],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":21,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":73,"s":[0]},{"t":120.0000048877,"s":[100]}],"ix":1},"e":{"a":0,"k":0,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":26.0000010590017,"op":3922.00015974634,"st":26.0000010590017,"bm":0},{"ddd":0,"ind":3,"ty":0,"nm":"Предварительная композиция 1","tt":2,"refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":0,"s":[-90]},{"t":20.0000008146167,"s":[0]}],"ix":10},"p":{"a":0,"k":[320,237.813,0],"ix":2,"l":2},"a":{"a":0,"k":[320,237.813,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.825,0.825,0.825],"y":[0.583,0.583,-11.513]},"o":{"x":[0.568,0.568,0.568],"y":[0,0,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.271,0.271,0.271],"y":[1,1,1]},"o":{"x":[0.225,0.225,0.225],"y":[0.964,0.964,67.503]},"t":10,"s":[30,30,100]},{"t":52.0000021180034,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"w":640,"h":560,"ip":0,"op":3896.00015868733,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Слой-фигура 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-90,"ix":10},"p":{"a":0,"k":[332.507,345.169,0],"ix":2,"l":2},"a":{"a":0,"k":[-195.669,62.007,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[174,314],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":8,"ix":4},"nm":"Контур прямоугольника 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.976471007104,0.989758001589,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-135,3.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[79.589,84.121],"ix":3},"r":{"a":0,"k":45,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Слой-фигура 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":14,"s":[334.5,135,0],"to":[-14.792,14.792,0],"ti":[14.792,-14.792,0]},{"t":44.0000017921567,"s":[245.75,223.75,0]}],"ix":2,"l":2},"a":{"a":0,"k":[-74.25,-57.25,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[174,314],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":8,"ix":4},"nm":"Контур прямоугольника 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.976471007104,0.989758001589,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-135,3.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[79.589,84.121],"ix":3},"r":{"a":0,"k":45,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Слой-фигура 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-90,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":14,"s":[319,151,0],"to":[14.25,14.833,0],"ti":[-14.25,-14.833,0]},{"t":44.0000017921567,"s":[404.5,240,0]}],"ix":2,"l":2},"a":{"a":0,"k":[-90.5,-41,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[174,314],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":8,"ix":4},"nm":"Контур прямоугольника 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.976471007104,0.989758001589,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-135,3.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[79.589,84.121],"ix":3},"r":{"a":0,"k":45,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Предварительная композиция 2","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[322,280,0],"ix":2,"l":2},"a":{"a":0,"k":[320,280,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":22,"s":[85,85,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":63,"s":[112,112,100]},{"t":119.000004846969,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"w":640,"h":560,"ip":0,"op":3896.00015868733,"st":0,"bm":0}],"markers":[]} ================================================ FILE: src/app/views/common/Settings/ExportIdentityPrompt.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useEffect } from "react" import { SubmitHandler, useForm } from "react-hook-form" import styled from "styled-components" import { Prompt } from "../../../ui-kit/components/Prompt/Prompt" import { Small } from "../../../ui-kit/typography" import { TextInput } from "../../../ui-kit/form-components/TextInput" import { darkBlue, greyBlue1 } from "../../../ui-kit/colors" const PromptExplanation = styled(Small)` opacity: 0.7; margin-bottom: 15px; ` const PromptInput = styled(TextInput)` border: 1px solid ${greyBlue1}; color: ${darkBlue}; ::placeholder { opacity: 0.7; color: ${darkBlue}; } margin-bottom: 0; ` const PromptValidation = styled(Small)` margin: 5px 0 10px; color: red; height: 15px; ` export interface ExportIdentityPromptProps { visible: boolean onSubmit: SubmitHandler onCancel: () => void } export interface ExportIdentityFormFields { passphrase: string confirmPassphrase: string } export const ExportIdentityPrompt: React.FC = ({ visible, onSubmit, onCancel }) => { const { register, handleSubmit, getValues, reset, formState: { errors }, } = useForm() useEffect(() => { if (!visible) { reset() } }, [visible]) return ( Used to encrypt the exported file. Min. length: 12 {errors.passphrase?.message} { const { passphrase } = getValues() return value === passphrase || "Passphrases do not match!" }, }, })} /> {errors.confirmPassphrase?.message} ) } ================================================ FILE: src/app/views/common/Settings/ImportIdentityPrompt.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useEffect } from "react" import { SubmitHandler, useForm } from "react-hook-form" import styled from "styled-components" import { Prompt } from "../../../ui-kit/components/Prompt/Prompt" import { Small } from "../../../ui-kit/typography" import { TextInput } from "../../../ui-kit/form-components/TextInput" import { darkBlue, greyBlue1 } from "../../../ui-kit/colors" const PromptExplanation = styled(Small)` opacity: 0.7; margin-bottom: 15px; ` const PromptInput = styled(TextInput)` border: 1px solid ${greyBlue1}; color: ${darkBlue}; ::placeholder { opacity: 0.7; color: ${darkBlue}; } margin-bottom: 0; ` const PromptValidation = styled(Small)` margin: 5px 0 10px; color: red; height: 15px; ` export interface ImportIdentityPromptProps { visible: boolean onSubmit: SubmitHandler onCancel: () => void } export interface ImportIdentityFormFields { passphrase: string } export const ImportIdentityPrompt: React.FC = ({ visible, onSubmit, onCancel }) => { const { register, handleSubmit, reset, formState: { errors }, } = useForm() useEffect(() => { if (!visible) { reset() } }, [visible]) return ( Used to decrypt the selected file. {errors.passphrase?.message} ) } ================================================ FILE: src/app/views/common/Settings/SettingsConnection.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { observer } from "mobx-react-lite" import React from "react" import styled from "styled-components" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { faQuestionCircle } from "@fortawesome/free-solid-svg-icons" import ReactTooltip from "react-tooltip" import { ViewContent } from "../../../navigation/components/ViewContent/ViewContent" import { useStores } from "../../../store" import { Select } from "../../../ui-kit/form-components/Select" import { Checkbox } from "../../../ui-kit/form-components/Checkbox/Checkbox" const Section = styled(ViewContent)` padding: 20px; margin-bottom: 10px; ` const FormRow = styled.div` width: 100%; height: 45px; display: flex; flex-direction: row; ` const FormLabel = styled.div` font-weight: bold; width: 50%; display: flex; align-items: center; ` const FormValue = styled.div` flex: 1; display: flex; align-items: center; ` const Tooltip = styled(ReactTooltip).attrs({ effect: "solid", })` width: 200px; ` const TooltipIcon = styled(FontAwesomeIcon).attrs({ icon: faQuestionCircle, })` margin-left: 10px; ` export const SettingsConnection: React.FC = observer(function SettingsConnection() { const { config } = useStores() const onDnsOptionChange = (event: React.ChangeEvent) => { const val = event.target.value config.setDnsOption(val) } return ( <>
Domain Name System (DNS) is used to resolve internet addresses.
Provider - maximum privacy
Automatic - maximum reliability

You will need to re-connect for the change to apply.
DNS server
Use automatic NAT type detection to filter out incompatible providers.
It increases your chances of successfully connecting to provider nodes.
Disable to see all provider nodes.
NAT type detection { const val = event.target.checked config.setAutoNATCompatibility(val) }} />
If you lose your VPN connection, a kill switch can automatically disconnect your device from your internet connection to ensure your privacy remains intact until your VPN connection is restored. Kill switch { const val = event.target.checked config.setKillSwitch(val) }} />
) }) ================================================ FILE: src/app/views/common/Settings/SettingsFilters.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { observer } from "mobx-react-lite" import React from "react" import styled from "styled-components" import { Heading2 } from "../../../ui-kit/typography" import { ViewContent } from "../../../navigation/components/ViewContent/ViewContent" import { QualityFilter } from "../../../proposals/components/QualityFilter/QualityFilter" import { ProposalQuality } from "../../../proposals/components/ProposalQuality/ProposalQuality" const Title = styled(Heading2)` margin-bottom: 15px; ` const Section = styled(ViewContent)` padding: 20px; margin-bottom: 10px; ` const SectionIconWrap = styled.div` margin-bottom: 15px; ` export const SettingsFilters: React.FC = observer(function SettingsFilters() { return ( <>
Quality
) }) ================================================ FILE: src/app/views/common/Settings/SettingsMysteriumId.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { observer } from "mobx-react-lite" import React, { useState } from "react" import styled from "styled-components" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { faFileExport, faIdBadge } from "@fortawesome/free-solid-svg-icons" import toast from "react-hot-toast" import { Heading2, Small } from "../../../ui-kit/typography" import { ViewContent } from "../../../navigation/components/ViewContent/ViewContent" import { useStores } from "../../../store" import { LightButton } from "../../../ui-kit/components/Button/LightButton" import { TextInput } from "../../../ui-kit/form-components/TextInput" import { ExportIdentityFormFields, ExportIdentityPrompt } from "./ExportIdentityPrompt" import { ImportIdentityFormFields, ImportIdentityPrompt } from "./ImportIdentityPrompt" const Title = styled(Heading2)` margin-bottom: 15px; ` const Section = styled(ViewContent)` padding: 20px; margin-bottom: 10px; ` const SectionIcon = styled(FontAwesomeIcon)` margin-bottom: 15px; ` const Explanation = styled(Small)` opacity: 0.5; margin-bottom: 15px; ` export const SettingsMysteriumId: React.FC = observer(function SettingsMysteriumId() { const { payment, identity } = useStores() // Export const [exportPrompt, setExportPrompt] = useState(false) const handleExportInitiate = () => { setExportPrompt(true) } const handleExportSubmit = ({ passphrase }: ExportIdentityFormFields) => { setExportPrompt(false) const res = identity.exportIdentity({ id: identity.identity?.id ?? "", passphrase }) toast.promise(res, { loading: "Creating backup...", success: function successToast(filename) { return ( Identity backed up!
{filename}
) }, error: function errorToast(reason) { return ( Identity backup failed 😶
Error: {reason}
) }, }) } const handleExportCancel = () => { setExportPrompt(false) } // Import const [importPrompt, setImportPrompt] = useState(false) const [importFilename, setImportFilename] = useState("") const handleImportInitiate = async () => { const filename = await identity.importIdentityChooseFile() if (!filename) { return } setImportFilename(filename) setImportPrompt(true) } const handleImportSubmit = async ({ passphrase }: ImportIdentityFormFields) => { setImportPrompt(false) const res = identity.importIdentity({ filename: importFilename, passphrase }) toast.promise(res, { loading: "Importing identity...", success: function successToast() { return ( Mysterium ID imported! ) }, error: function errorToast(reason) { return ( Mysterium ID import failed 😶
Error: {reason}
) }, }) } const handleImportCancel = () => { setImportPrompt(false) } return ( <>
Identity ({identity.identity?.registrationStatus}) Identity is your Mysterium internal user ID. Never send ether or any kind of ERC20 tokens there.
Backup/Restore We don't store any account data. Make sure to back up your private key to keep your{" "} {payment.appCurrency}s safe.
Backup Restore from backup
) }) ================================================ FILE: src/app/views/common/Settings/SettingsView.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import styled from "styled-components" import { observer } from "mobx-react-lite" import React from "react" import { useNavigate, useLocation, Outlet } from "react-router-dom" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { faGlobe, faSlidersH, faUserAlt } from "@fortawesome/free-solid-svg-icons" import { Heading2 } from "../../../ui-kit/typography" import { ViewContent } from "../../../navigation/components/ViewContent/ViewContent" import { ViewNavBar } from "../../../navigation/components/ViewNavBar/ViewNavBar" import { brandLight, greyBlue1, lightBlue } from "../../../ui-kit/colors" import { ViewSidebar } from "../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewSplit } from "../../../navigation/components/ViewSplit/ViewSplit" import { ViewContainer } from "../../../navigation/components/ViewContainer/ViewContainer" import { locations } from "../../../navigation/locations" import { IconSettings } from "../../../ui-kit/icons/IconSettings" import { AppVersion } from "../../../daemon/components/AppVersion" const SideTop = styled.div` box-sizing: border-box; height: 136px; padding: 20px; overflow: hidden; text-align: center; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 20px; flex: 1 0 auto; display: flex; flex-direction: column; ` const Title = styled(Heading2)` margin: 15px 0; ` const Content = styled(ViewContent)` background: none; ` const Version = styled(AppVersion)` margin-top: auto; ` interface NavButtonProps { active: boolean } const NavButton = styled.button>` min-width: 40px; height: 40px; margin-bottom: 10px; border-radius: 5px; border: none; &:hover { background: ${(props) => (props.active ? greyBlue1 : "#aeaedb33")}; color: ${(props) => (props.active ? "#fff" : "inherit")}; } background: ${(props) => (props.active ? greyBlue1 : lightBlue)}; color: ${(props) => (props.active ? "#fff" : greyBlue1)}; svg { width: 40px !important; } text-align: left; font-size: 13px; line-height: 13px; display: flex; align-items: center; ` export const SettingsView: React.FC = observer(function SettingsView() { const navigate = useNavigate() const location = useLocation() const isFilterTabActive = location.pathname == locations.settingsFilters const isConnectionTabActive = location.pathname == locations.settingsConnection const isMysteriumIdTabActive = location.pathname == locations.settingsMysteriumId return ( Settings navigate(locations.settingsFilters)}> Default filters navigate(locations.settingsConnection)} > Connection navigate(locations.settingsMysteriumId)} > Mysterium ID ) }) ================================================ FILE: src/app/views/consumer/Connected/ConnectedView.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useEffect, useState } from "react" import { observer } from "mobx-react-lite" import { ConnectionStatus } from "mysterium-vpn-js" import styled from "styled-components" import Lottie from "react-lottie-player" import { useStores } from "../../../store" import { Flag } from "../../../location/components/Flag/Flag" import { DisconnectButton } from "../../../connection/components/DisconnectButton/DisconnectButton" import { countryName } from "../../../location/countries" import { ViewNavBar } from "../../../navigation/components/ViewNavBar/ViewNavBar" import { ViewContainer } from "../../../navigation/components/ViewContainer/ViewContainer" import { ViewSplit } from "../../../navigation/components/ViewSplit/ViewSplit" import { ViewSidebar } from "../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewContent } from "../../../navigation/components/ViewContent/ViewContent" import animationConnectingStart from "./animation_connecting_start.json" import animationConnectingLoop from "./animation_connecting_loop.json" import animationConnectedLoop from "./animation_connected_loop.json" import { ConnectionStatistics } from "./ConnectionStatistics" import { ConnectionProposal } from "./ConnectionProposal" const SideTop = styled.div` height: 156px; padding: 17px 37px; overflow: hidden; ` const Status = styled.div` text-align: center; font-size: 18px; line-height: 21px; font-weight: 500; margin-bottom: 18px; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 20px; height: 330px; flex: 1 0 auto; display: flex; flex-direction: column; justify-content: space-between; ` const Action = styled.div` display: flex; button { flex: 1; } ` const Animation = styled.div`` const LocationVisual = styled.div` position: absolute; z-index: 1; width: 378px; color: #fff; ` const LocationFlag = styled(Flag).attrs({ size: 35, })`` const LocationCountry = styled.div` margin-top: 20px; text-align: center; font-size: 18px; height: 30px; ` const LocationIP = styled.div` color: #ffffff88; text-align: center; height: 20px; ` const ConnectionLocation = styled.div` width: 100%; ` const ConnectionLocationFlag = styled.div` position: absolute; top: 88px; left: 171px; ` const OriginalLocationFlag = styled.div` position: absolute; top: 360px; left: 171px; ` const OriginalLocation = styled.div` position: absolute; width: 100%; top: 400px; ` export const ConnectedView: React.FC = observer(function ConnectedView() { const { connection: { location, originalLocation, status, proposal }, } = useStores() let statusText: string switch (status) { case ConnectionStatus.CONNECTING: statusText = "Connecting..." break case ConnectionStatus.CONNECTED: statusText = "Connected" break case ConnectionStatus.ON_HOLD: statusText = "Connection lost" break case ConnectionStatus.DISCONNECTING: statusText = "Disconnecting..." break case ConnectionStatus.NOT_CONNECTED: statusText = "Disconnected" break default: statusText = "Working on it..." } // eslint-disable-next-line @typescript-eslint/ban-types const [anim, setAnim] = useState<{ src: object; loop: boolean; onComplete?: () => void }>({ src: animationConnectingStart, loop: false, onComplete: () => { setAnim({ src: animationConnectingLoop, loop: true, }) }, }) useEffect(() => { if (status === ConnectionStatus.CONNECTED) { setAnim({ src: animationConnectedLoop, loop: true, }) } }, [status]) return ( {statusText} {countryName(proposal?.country)} {location?.ip} {countryName(originalLocation?.country)} {originalLocation?.ip} ) }) ================================================ FILE: src/app/views/consumer/Connected/ConnectionProposal.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { observer } from "mobx-react-lite" import styled from "styled-components" import { useStores } from "../../../store" import { displayTokens4 } from "../../../payment/display" const MetadataRow = styled.div` display: flex; justify-content: space-between; ` const Metadata = styled.div` margin-bottom: 20px; user-select: text; ` export const ConnectionProposal: React.FC = observer(function ConnectionProposal() { const { connection: { proposal }, } = useStores() return ( <> Node {proposal?.shortId} Price {displayTokens4(proposal?.price.perHourTokens)}/h {displayTokens4(proposal?.price.perGibTokens)}/GiB Type {proposal?.ipType} ) }) ================================================ FILE: src/app/views/consumer/Connected/ConnectionStatistics.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { observer } from "mobx-react-lite" import byteSize from "byte-size" import * as _ from "lodash" import { ConnectionStatus, Currency } from "mysterium-vpn-js" import styled from "styled-components" import { useStores } from "../../../store" import { IconDuration } from "../../../ui-kit/icons/IconDuration" import { IconReceived } from "../../../ui-kit/icons/IconReceived" import { IconSent } from "../../../ui-kit/icons/IconSent" import { IconPaid } from "../../../ui-kit/icons/IconPaid" import { brandLight, darkBlue, greyBlue1 } from "../../../ui-kit/colors" const toClock = (duration: number): string => { const secs = Math.floor(duration % 60) const mins = Math.floor((duration % (60 * 60)) / 60) const hours = Math.floor(duration / (60 * 60)) return [hours, mins, secs].map((n) => _.padStart(String(n), 2, "0")).join(":") } const Metrics = styled.div` border-radius: 10px; box-sizing: border-box; height: 238px; overflow: hidden; color: #8387a4; display: flex; flex-direction: row; flex-wrap: wrap; justify-content: space-between; ` const Metric = styled.div` width: 88px; height: 115px; box-sizing: border-box; padding: 15px 0; background: #f8f8fd; border-radius: 10px; text-align: center; display: flex; flex-direction: column; overflow: hidden; ` const MetricIcon = styled.div`` const MetricValue = styled.div` color: ${darkBlue}; font-size: 15px; font-weight: bold; ` const MetricLabel = styled.div` margin-top: auto; ` const MetricUnit = styled.div`` const MetricPlaceholder = () => (
) export const ConnectionStatistics: React.FC = observer(function ConnectionStatistics() { const { connection: { statistics: { duration, bytesReceived, bytesSent, spentTokens } = {}, status }, } = useStores() const clock = duration ? toClock(duration) : "" const down = bytesReceived ? byteSize(bytesReceived, { units: "iec" }) : undefined const up = bytesSent ? byteSize(bytesSent, { units: "iec" }) : undefined const paid = spentTokens?.human ?? 0 const connected = status == ConnectionStatus.CONNECTED const iconColor = connected ? brandLight : greyBlue1 return ( Received {connected ? down?.value : } {down?.unit} Sent {connected ? up?.value : } {up?.unit} Duration {connected ? clock : } hh:mm:ss Paid {connected ? paid : } {Currency.MYST} ) }) ================================================ FILE: src/app/views/consumer/Connected/animation_connected_loop.json ================================================ {"v":"5.7.4","fr":29.9700012207031,"ip":120.0000048877,"op":249.000010141978,"w":1492,"h":1920,"nm":"2","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Слой-фигура 9","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[746,467,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-0.5,91.5],[-1,90.25]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,0,0.564705882353,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"штрих","v":{"a":0,"k":50,"ix":1}},{"n":"o","nm":"смещение","v":{"a":0,"k":200,"ix":7}}],"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Фигура 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Слой-фигура 8","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[746,960,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-0.5,399.5],[1,-418.045]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[0.494209885597,0.807843148708,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":179,"s":[0.494209885597,0.807843148708,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":181,"s":[0.780392169952,0,0.550864994526,1]},{"t":240.0000097754,"s":[0.780392169952,0,0.550864994526,1]}],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":19,"ix":5},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"штрих","v":{"a":0,"k":15,"ix":1}},{"n":"g","nm":"пробел","v":{"a":0,"k":135,"ix":2}},{"n":"o","nm":"смещение","v":{"a":1,"k":[{"i":{"x":[0.538],"y":[0.966]},"o":{"x":[0.491],"y":[0.018]},"t":120,"s":[-33]},{"i":{"x":[0.538],"y":[54.607]},"o":{"x":[0.167],"y":[-19.359]},"t":153,"s":[-940.492]},{"i":{"x":[0.52],"y":[1]},"o":{"x":[0.167],"y":[-0.011]},"t":210,"s":[-940.492]},{"t":240.0000097754,"s":[0]}],"ix":7}}],"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Фигура 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.96]},"o":{"x":[0.48],"y":[0.04]},"t":120,"s":[0]},{"i":{"x":[0.52],"y":[-5.909]},"o":{"x":[0.48],"y":[0]},"t":153,"s":[100]},{"i":{"x":[0.52],"y":[1]},"o":{"x":[0.48],"y":[0]},"t":210,"s":[100]},{"t":240.0000097754,"s":[0]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.959]},"o":{"x":[0.48],"y":[0.041]},"t":152,"s":[0]},{"i":{"x":[0.52],"y":[1]},"o":{"x":[0.48],"y":[0]},"t":181,"s":[100]},{"t":216.00000879786,"s":[0]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Слой-фигура 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[746,960,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Кривые Слой 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[748.456,958.758,0],"ix":2,"l":2},"a":{"a":0,"k":[876.999,459.241,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.125,7.826],[0,0],[-6.747,0],[0,0],[-2.622,-2.609],[0,0],[5.062,-5.032],[0,0]],"o":[[0,0],[-3.186,-5.963],[0,0],[3.562,-0.187],[0,0],[5.062,5.032],[0,0],[-6.37,6.336]],"v":[[794.225,334.294],[730.687,214.292],[738.561,201.062],[748.68,200.876],[758.426,204.789],[843.704,290.318],[843.704,308.766],[815.216,337.275]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[5.247,5.216],[0,0],[-3.935,5.218],[0,0],[-4.498,-8.572],[0,0],[3.934,-3.913],[0,0]],"o":[[0,0],[-4.689,-4.659],[0,0],[5.808,-7.639],[0,0],[2.622,5.031],[0,0],[-5.248,5.216]],"v":[[715.13,418.894],[687.768,391.314],[686.641,374.17],[735.562,310.442],[757.676,312.306],[781.857,357.773],[779.608,373.053],[734.063,418.894]],"c":true},"ix":2},"nm":"Контур 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[5.248,5.216],[0,0],[-2.436,5.032],[0,0],[-6.372,-2.794],[0,0],[-0.75,-4.287],[0,0],[2.999,-3.17],[0,0]],"o":[[0,0],[-3.937,-3.913],[0,0],[3.186,-6.15],[0,0],[3.934,1.676],[0,0],[0.75,4.286],[0,0],[-5.437,5.216]],"v":[[427.615,418.894],[357.144,348.083],[354.707,332.989],[359.393,323.673],[376.449,317.523],[465.104,355.351],[472.788,364.854],[475.972,381.065],[472.411,392.806],[446.547,418.894]],"c":true},"ix":2},"nm":"Контур 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[3.374,3.356],[0,0],[-7.497,4.286],[0,0],[-0.188,-9.876],[0,0],[1.687,-1.678]],"o":[[0,0],[-5.998,-6.149],[0,0],[8.622,-5.031],[0,0],[0,2.424],[-3.561,3.356]],"v":[[143.288,422.059],[86.123,364.667],[88.934,344.17],[136.541,316.592],[156.409,327.586],[158.47,415.724],[155.846,422.059]],"c":true},"ix":2},"nm":"Контур 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[-2.062,0.559],[0,0],[-0.188,-8.758],[0,0],[4.124,-2.422],[0,0],[4.123,4.099],[0,0],[-5.061,5.032],[0,0]],"o":[[0,0],[8.434,-2.609],[0,0],[0.188,4.845],[0,0],[-5.248,2.981],[0,0],[-5.061,-5.032],[0,0],[1.312,-1.677]],"v":[[91.558,230.876],[136.541,216.528],[153.785,228.64],[154.909,272.429],[148.349,284.169],[66.818,331.313],[50.887,329.263],[30.457,308.766],[30.457,290.318],[86.31,234.23]],"c":true},"ix":2},"nm":"Контур 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[-5.061,-5.217],[0,0],[-0.563,-2.422],[0,0],[10.121,4.1],[0,0],[-0.75,5.777],[0,0],[-2.062,2.049],[0,0]],"o":[[0,0],[1.686,1.677],[0,0],[2.623,10.435],[0,0],[-5.436,-2.236],[0,0],[0.375,-2.795],[0,0],[5.248,-5.031]],"v":[[302.602,35.779],[313.286,46.401],[316.66,52.55],[347.585,178.701],[329.592,193.981],[266.616,167.707],[258.557,153.918],[271.864,51.618],[275.613,43.979],[283.86,35.593]],"c":true},"ix":2},"nm":"Контур 6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":6,"ty":"sh","ix":7,"ks":{"a":0,"k":{"i":[[-5.062,-5.217],[0,0],[-0.563,-2.235],[0,0],[3.371,-3.354],[0,0],[2.809,9.503],[0,0],[-3.376,3.54],[0,0]],"o":[[0,0],[1.687,1.678],[0,0],[1.309,4.658],[0,0],[-7.124,6.894],[0,0],[-1.499,-4.658],[0,0],[5.248,-5.031]],"v":[[590.117,35.779],[594.428,40.065],[597.8,46.028],[606.987,80.501],[603.425,93.358],[554.131,140.875],[532.39,135.285],[520.395,96.898],[523.58,83.669],[571.374,35.593]],"c":true},"ix":2},"nm":"Контур 7","mn":"ADBE Vector Shape - Group","hd":false},{"ind":7,"ty":"sh","ix":8,"ks":{"a":0,"k":{"i":[[1.499,5.777],[0,0],[-7.12,-7.081],[0,0],[11.618,-0.373],[0,0]],"o":[[0,0],[-2.622,-9.69],[0,0],[8.061,8.198],[0,0],[-6.183,0.186]],"v":[[653.841,171.434],[637.348,109.197],[653.841,99.694],[711.758,157.832],[702.762,180.192],[666.962,181.124]],"c":true},"ix":2},"nm":"Контур 8","mn":"ADBE Vector Shape - Group","hd":false},{"ind":8,"ty":"sh","ix":9,"ks":{"a":0,"k":{"i":[[-6.371,0.186],[0,0],[-2.249,-4.472],[0,0],[2.998,-4.099],[0,0],[5.621,5.59],[0,0],[-0.56,4.1],[0,0]],"o":[[0,0],[5.061,-0.186],[0,0],[2.435,4.472],[0,0],[-4.871,6.336],[0,0],[-2.999,-2.981],[0,0],[0.936,-6.522]],"v":[[668.649,202.925],[691.326,202.366],[703.321,209.447],[732.936,265.535],[731.814,279.697],[673.333,355.909],[653.468,357.214],[641.283,344.915],[637.535,333.735],[655.904,214.292]],"c":true},"ix":2},"nm":"Контур 9","mn":"ADBE Vector Shape - Group","hd":false},{"ind":9,"ty":"sh","ix":10,"ks":{"a":0,"k":{"i":[[-5.998,2.236],[0,0],[-3.562,-3.728],[0,0],[5.057,-5.218],[0,0],[2.063,10.249],[0,0]],"o":[[0,0],[4.875,-1.864],[0,0],[5.062,5.218],[0,0],[-7.497,7.454],[0,0],[-1.122,-6.709]],"v":[[486.655,264.417],[511.208,255.287],[525.266,258.455],[556.38,290.318],[556.194,308.766],[513.271,351.81],[490.966,345.102],[478.221,279.511]],"c":true},"ix":2},"nm":"Контур 10","mn":"ADBE Vector Shape - Group","hd":false},{"ind":10,"ty":"sh","ix":11,"ks":{"a":0,"k":{"i":[[-6.375,-2.796],[0,0],[-0.75,-4.471],[0,0],[7.684,3.353],[0,0],[-3.373,6.708],[0,0]],"o":[[0,0],[4.125,1.677],[0,0],[1.685,8.198],[0,0],[-6.935,-2.981],[0,0],[3.184,-6.335]],"v":[[409.813,250.815],[447.484,266.467],[455.358,276.156],[462.478,313.052],[448.047,324.605],[387.507,298.703],[380.947,280.815],[392.943,257.15]],"c":true},"ix":2},"nm":"Контур 11","mn":"ADBE Vector Shape - Group","hd":false},{"ind":11,"ty":"sh","ix":12,"ks":{"a":0,"k":{"i":[[8.247,3.54],[0,0],[0.936,3.913],[0,0],[-7.122,-7.08],[0,0],[0.377,-3.726],[0,0]],"o":[[0,0],[-3.936,-1.676],[0,0],[-2.436,-9.689],[0,0],[2.626,2.795],[0,0],[-0.75,9.131]],"v":[[403.251,224.355],[385.258,216.9],[377.574,207.957],[354.332,113.669],[371.013,104.352],[421.431,154.85],[425.179,165.098],[421.431,213.174]],"c":true},"ix":2},"nm":"Контур 12","mn":"ADBE Vector Shape - Group","hd":false},{"ind":12,"ty":"sh","ix":13,"ks":{"a":0,"k":{"i":[[6.371,-2.422],[0,0],[3.185,1.304],[0,0],[-0.376,5.777],[0,0],[-2.249,2.237],[0,0],[-2.999,-9.504],[0,0]],"o":[[0,0],[-3.189,1.118],[0,0],[-5.248,-2.236],[0,0],[0.187,-3.168],[0,0],[6.934,-7.081],[0,0],[2.249,6.708]],"v":[[525.079,226.777],[468.852,247.647],[459.106,247.461],[450.11,243.733],[442.049,230.503],[447.297,164.54],[451.046,156.34],[484.969,122.241],[506.901,127.645],[532.763,210.565]],"c":true},"ix":2},"nm":"Контур 13","mn":"ADBE Vector Shape - Group","hd":false},{"ind":13,"ty":"sh","ix":14,"ks":{"a":0,"k":{"i":[[6.375,-2.235],[0,0],[2.249,7.267],[0,0],[-3.562,3.354],[0,0],[-1.685,-5.963],[0,0]],"o":[[0,0],[-7.12,2.608],[0,0],[-1.499,-4.658],[0,0],[4.307,-4.286],[0,0],[1.686,6.522]],"v":[[623.853,189.881],[570.247,209.82],[553.005,201.435],[548.32,186.527],[551.696,173.297],[605.488,121.309],[618.791,125.036],[631.913,174.229]],"c":true},"ix":2},"nm":"Контур 14","mn":"ADBE Vector Shape - Group","hd":false},{"ind":14,"ty":"sh","ix":15,"ks":{"a":0,"k":{"i":[[-10.682,-4.472],[0,0],[3.374,-6.895],[0,0],[6.372,6.335],[0,0],[0.561,1.678],[0,0]],"o":[[0,0],[7.122,2.982],[0,0],[-4.123,8.012],[0,0],[-1.312,-1.305],[0,0],[-4.123,-10.807]],"v":[[292.293,201.994],[365.204,232.18],[371.951,250.255],[342.524,308.766],[321.345,312.12],[304.851,295.536],[301.853,290.877],[275.05,218.764]],"c":true},"ix":2},"nm":"Контур 15","mn":"ADBE Vector Shape - Group","hd":false},{"ind":15,"ty":"sh","ix":16,"ks":{"a":0,"k":{"i":[[-8.809,-2.795],[0,0],[6.747,-6.894],[0,0],[0.187,7.08],[0,0]],"o":[[0,0],[9.371,3.167],[0,0],[-5.06,5.03],[0,0],[-0.187,-9.317]],"v":[[194.644,278.206],[252.934,297.586],[258.182,319.2],[193.144,384.419],[179.275,379.016],[177.213,291.25]],"c":true},"ix":2},"nm":"Контур 16","mn":"ADBE Vector Shape - Group","hd":false},{"ind":16,"ty":"sh","ix":17,"ks":{"a":0,"k":{"i":[[-2.436,-6.522],[0,0],[8.247,2.795],[0,0],[0.187,5.59],[0,0],[-5.622,1.863],[0,0]],"o":[[0,0],[2.999,8.012],[0,0],[-5.247,-1.678],[0,0],[-0.188,-5.776],[0,0],[6.748,-2.05]],"v":[[243,196.031],[267.553,261.995],[254.621,275.225],[184.897,252.119],[175.901,240.007],[175.339,214.292],[184.522,201.435],[226.694,188.018]],"c":true},"ix":2},"nm":"Контур 17","mn":"ADBE Vector Shape - Group","hd":false},{"ind":17,"ty":"sh","ix":18,"ks":{"a":0,"k":{"i":[[4.873,-1.491],[0,0],[-5.435,5.404],[0,0],[1.125,-8.199],[0,0]],"o":[[0,0],[-7.31,2.236],[0,0],[5.81,-5.963],[0,0],[-0.562,5.217]],"v":[[227.444,164.912],[150.411,189.323],[142.913,177.211],[228.943,90.936],[243.749,98.203],[236.44,154.105]],"c":true},"ix":2},"nm":"Контур 18","mn":"ADBE Vector Shape - Group","hd":false},{"ind":18,"ty":"sh","ix":19,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-8.996,3.355],[0,0],[1.686,-10.062],[0,0],[7.686,7.639]],"o":[[0,0],[-6.561,-6.708],[0,0],[9.373,-3.54],[0,0],[-1.69,10.621],[0,0]],"v":[[588.618,291.809],[555.817,258.082],[560.692,236.652],[613.358,216.9],[630.977,231.249],[621.231,294.79],[598.737,302.058]],"c":true},"ix":2},"nm":"Контур 19","mn":"ADBE Vector Shape - Group","hd":false},{"ind":19,"ty":"sh","ix":20,"ks":{"a":0,"k":{"i":[[9.369,9.317],[0,0],[2.999,0],[2.063,-2.049],[0,0],[5.248,5.218],[0,0],[4.124,-4.099],[0,0],[-9.371,-9.317],[0,0],[-4.123,4.099],[0,0],[-5.248,-5.216],[0,0],[-2.998,0],[-2.063,2.048],[0,0],[-5.248,-5.216],[0,0],[-2.999,0],[-2.063,2.047],[0,0]],"o":[[0,0],[-2.063,-2.049],[-2.999,0],[0,0],[-5.252,5.218],[0,0],[-4.123,-4.099],[0,0],[-9.371,9.317],[0,0],[4.123,4.099],[0,0],[5.248,-5.216],[0,0],[2.062,2.048],[2.999,0],[0,0],[5.248,-5.216],[0,0],[2.058,2.047],[2.998,0],[0,0],[9.183,-9.13]],"v":[[866.95,282.678],[588.618,3.17],[580.744,0.002],[572.873,3.17],[446.362,130.253],[427.615,130.253],[301.103,3.17],[285.546,3.17],[7.028,282.492],[7.028,316.219],[141.602,451.316],[157.158,451.316],[283.672,324.231],[302.414,324.231],[429.115,451.13],[436.988,454.296],[444.862,451.13],[571.561,324.231],[590.303,324.231],[716.82,451.316],[724.69,454.482],[732.563,451.316],[867.136,316.219]],"c":true},"ix":2},"nm":"Контур 20","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[437,227.242],"ix":2},"a":{"a":0,"k":[437,227.242],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 2","np":20,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[436.999,227.242],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Слой-фигура 11","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[745.956,1492,0],"ix":2,"l":2},"a":{"a":0,"k":[-125.5,-624,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":118,"s":[100,100,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":131,"s":[90,90,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":150,"s":[100,100,100]},{"i":{"x":[0.563,0.563,0.563],"y":[1,1,1]},"o":{"x":[0.186,0.186,0.186],"y":[0,0,0]},"t":214,"s":[100,100,100]},{"i":{"x":[0.842,0.842,0.842],"y":[1,1,1]},"o":{"x":[0.371,0.371,0.371],"y":[0,0,0]},"t":228,"s":[30,30,100]},{"t":240.0000097754,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[240,240],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-126,-624],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Слой-фигура 10","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[745.956,416,0],"ix":2,"l":2},"a":{"a":0,"k":[-125.5,-624,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.563,0.563,0.563],"y":[1,1,1]},"o":{"x":[0.186,0.186,0.186],"y":[0,0,0]},"t":158,"s":[100,100,100]},{"i":{"x":[0.842,0.842,0.842],"y":[1,1,1]},"o":{"x":[0.371,0.371,0.371],"y":[0,0,0]},"t":171,"s":[30,30,100]},{"i":{"x":[0.842,0.842,0.842],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":182,"s":[100,100,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":186,"s":[100,100,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":199,"s":[90,90,100]},{"t":216.00000879786,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[240,240],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-126,-624],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Слой-фигура 13","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[746,960,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-79],[0,-540]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":18,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":4,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Фигура 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Слой-фигура 12","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[746,960,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,538],[-1,209]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":18,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":4,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Фигура 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":3,"ty":4,"nm":"Слой-фигура 16","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[758,985,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[103.488,102.602,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[230,230],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":16,"ix":4},"nm":"Контур прямоугольника 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.780392216701,0,0.549019607843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-11.663,34.355],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":45,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":0,"nm":"Lines","tt":2,"refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[746,960,0],"ix":2,"l":2},"a":{"a":0,"k":[746,960,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1492,"h":1920,"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":0,"nm":"All","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":49,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[746,960,0],"ix":2,"l":2},"a":{"a":0,"k":[746,960,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1492,"h":1920,"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Слой-фигура 15","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[746.16,1493,0],"ix":2,"l":2},"a":{"a":0,"k":[-125.5,-624,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":208,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":228,"s":[70,70,100]},{"t":249.000010141978,"s":[0,0,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[322,322],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.780392216701,0,0.549019607843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-126,-624],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Слой-фигура 14","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[745.751,416,0],"ix":2,"l":2},"a":{"a":0,"k":[-125.5,-624,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":150,"s":[0,0,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":170,"s":[70,70,100]},{"t":191.000007779589,"s":[0,0,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[322,322],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.494209887935,0.807843137255,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-126,-624],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0}],"markers":[]} ================================================ FILE: src/app/views/consumer/Connected/animation_connecting_loop.json ================================================ {"v":"5.7.4","fr":29.9700012207031,"ip":89.0000036250443,"op":271.000011038056,"w":1492,"h":1920,"nm":"1","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Слой-фигура 31","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[620,1091,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":178,"s":[0,0]},{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":194.355,"s":[24,24]},{"t":210.000008553475,"s":[0,0]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-189.5,-165.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":60.0000024438501,"op":3956.00016113118,"st":60.0000024438501,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Слой-фигура 30","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[778,1187,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":213,"s":[0,0]},{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":229.355,"s":[24,24]},{"t":245.000009979055,"s":[0,0]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-189.5,-165.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":95.0000038694293,"op":3991.00016255676,"st":95.0000038694293,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Слой-фигура 29","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[853,1097,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":183,"s":[0,0]},{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":199.355,"s":[24,24]},{"t":215.00000875713,"s":[0,0]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-189.5,-165.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":65.0000026475043,"op":3961.00016133484,"st":65.0000026475043,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Слой-фигура 28","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1124,968,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":171,"s":[0,0]},{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":187.355,"s":[24,24]},{"t":203.000008268359,"s":[0,0]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-189.5,-165.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":53.0000021587343,"op":3949.00016084607,"st":53.0000021587343,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Слой-фигура 27","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1246,1180,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":225,"s":[0,0]},{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":241.355,"s":[24,24]},{"t":257.000010467825,"s":[0,0]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-189.5,-165.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":107.000004358199,"op":4003.00016304553,"st":107.000004358199,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Слой-фигура 26","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1141,1092,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":187,"s":[0,0]},{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":203.355,"s":[24,24]},{"t":219.000008920053,"s":[0,0]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-189.5,-165.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":69.0000028104276,"op":3965.00016149776,"st":69.0000028104276,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Слой-фигура 25","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[674,1298,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":282,"s":[0,0]},{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":298.355,"s":[24,24]},{"t":314.000012789482,"s":[0,0]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-189.5,-165.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":164.000006679857,"op":4060.00016536719,"st":164.000006679857,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Слой-фигура 24","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[969,1229,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":183,"s":[0,0]},{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":199.355,"s":[24,24]},{"t":215.00000875713,"s":[0,0]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-189.5,-165.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":65.0000026475043,"op":3961.00016133484,"st":65.0000026475043,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Слой-фигура 23","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[746,960,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":236,"s":[0,0]},{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":252.355,"s":[24,24]},{"t":268.000010915864,"s":[0,0]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-189.5,-165.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":118.000004806239,"op":4014.00016349357,"st":118.000004806239,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Слой-фигура 22","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[620,1091,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":303,"s":[0,0]},{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":319.355,"s":[24,24]},{"t":335.00001364483,"s":[0,0]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-189.5,-165.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":185.000007535204,"op":4081.00016622254,"st":185.000007535204,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"Слой-фигура 21","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[778,1187,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":300,"s":[0,0]},{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":316.355,"s":[24,24]},{"t":332.000013522637,"s":[0,0]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-189.5,-165.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":182.000007413012,"op":4078.00016610035,"st":182.000007413012,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"Слой-фигура 20","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[853,1097,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":215,"s":[0,0]},{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":231.355,"s":[24,24]},{"t":247.000010060516,"s":[0,0]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-189.5,-165.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":97.000003950891,"op":3993.00016263822,"st":97.000003950891,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"Слой-фигура 19","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1124,968,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":256,"s":[0,0]},{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":272.355,"s":[24,24]},{"t":288.00001173048,"s":[0,0]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-189.5,-165.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":138.000005620855,"op":4034.00016430819,"st":138.000005620855,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"Слой-фигура 18","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1246,1180,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":225,"s":[0,0]},{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":241.355,"s":[24,24]},{"t":257.000010467825,"s":[0,0]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-189.5,-165.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":107.000004358199,"op":4003.00016304553,"st":107.000004358199,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"Слой-фигура 17","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1141,1092,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":312,"s":[0,0]},{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":328.355,"s":[24,24]},{"t":344.000014011407,"s":[0,0]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-189.5,-165.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":194.000007901782,"op":4090.00016658912,"st":194.000007901782,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"Слой-фигура 16","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[674,1298,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":160,"s":[0,0]},{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":176.355,"s":[24,24]},{"t":192.00000782032,"s":[0,0]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-189.5,-165.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":42.0000017106951,"op":3938.00016039803,"st":42.0000017106951,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"Слой-фигура 15","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[969,1229,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":227,"s":[0,0]},{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":243.355,"s":[24,24]},{"t":259.000010549286,"s":[0,0]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-189.5,-165.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":109.000004439661,"op":4005.00016312699,"st":109.000004439661,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"Слой-фигура 14","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[746,960,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":118,"s":[0,0]},{"i":{"x":[0.34,0.34],"y":[1,1]},"o":{"x":[0.66,0.66],"y":[0,0]},"t":134.355,"s":[24,24]},{"t":150.000006109625,"s":[0,0]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-189.5,-165.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Слой-фигура 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":0,"s":[0]},{"t":15.0000006109625,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[745.956,1492,0],"ix":2,"l":2},"a":{"a":0,"k":[-125.5,-624,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":15,"s":[100,100,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":30,"s":[95,95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":45,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":60,"s":[95,95,100]},{"t":90.0000036657751,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[240,240],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-126,-624],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Слой-фигура 8","sr":1,"ks":{"o":{"a":0,"k":50,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[745.956,416,0],"ix":2,"l":2},"a":{"a":0,"k":[-125.5,-624,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":86,"s":[16,16,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":107,"s":[93,93,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":131.165,"s":[53,53,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":151.876,"s":[93,93,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":176.041,"s":[53,53,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":197.959,"s":[93,93,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":222.124,"s":[53,53,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":242.835,"s":[93,93,100]},{"t":267.000010875133,"s":[53,53,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[322,322],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-126,-624],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Слой-фигура 1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":76,"s":[100]},{"t":90.0000036657751,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[745.956,416,0],"ix":2,"l":2},"a":{"a":0,"k":[-125.5,-624,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":76,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":90,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":103,"s":[90,90,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":114.459,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":124.771,"s":[90,90,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":136.229,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":146.541,"s":[90,90,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":158,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":168.313,"s":[90,90,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":179.771,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":191.229,"s":[90,90,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":202.688,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":213,"s":[90,90,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":224.459,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":234.771,"s":[90,90,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":246.229,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":256.541,"s":[90,90,100]},{"t":268.000010915864,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[240,240],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-126,-624],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Слой-фигура 7","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[746,960,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0,538],[-1,209],[-145,67.5],[-267,186.5],[-275,-36],[-191,-63],[26.75,28.25],[52.75,154.75],[144,67],[188,107.5],[208.5,-38.5],[112,-5.5],[68,-146],[0,-79],[0,-540]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":18,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.96]},"o":{"x":[0.48],"y":[0.04]},"t":22,"s":[0]},{"t":85.000003462121,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":4,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Фигура 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Слой-фигура 6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[746,960,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0,538],[-1,209],[-145,67.5],[-267,186.5],[-275,-36],[-191,-63],[26.75,28.25],[52.75,154.75],[144,67],[188,107.5],[208.5,-38.5],[112,-5.5],[68,-146],[0,-79],[0,-540]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,0,0.517646789551,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":17,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.96]},"o":{"x":[0.48],"y":[0.04]},"t":20,"s":[0]},{"t":83.0000033806593,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":4,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Фигура 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Слой-фигура 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[746,960,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0,538],[-1,209],[-145,67.5],[-267,186.5],[-275,-36],[-191,-63],[26.75,28.25],[52.75,154.75],[144,67],[188,107.5],[208.5,-38.5],[112,-5.5],[68,-146],[0,-79],[0,-540]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":18,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.96]},"o":{"x":[0.48],"y":[0.04]},"t":15,"s":[0]},{"t":78.0000031770051,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":4,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Фигура 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Слой-фигура 5","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":52,"s":[762,1512,0],"to":[0,-89.167,0],"ti":[0,89.167,0]},{"t":90.0000036657751,"s":[762,977,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[1016,588],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Контур прямоугольника 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":18,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-18,-6],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Кривые Слой 3","tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[748.456,958.758,0],"ix":2,"l":2},"a":{"a":0,"k":[876.999,459.241,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.125,7.826],[0,0],[-6.747,0],[0,0],[-2.622,-2.609],[0,0],[5.062,-5.032],[0,0]],"o":[[0,0],[-3.186,-5.963],[0,0],[3.562,-0.187],[0,0],[5.062,5.032],[0,0],[-6.37,6.336]],"v":[[794.225,334.294],[730.687,214.292],[738.561,201.062],[748.68,200.876],[758.426,204.789],[843.704,290.318],[843.704,308.766],[815.216,337.275]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[5.247,5.216],[0,0],[-3.935,5.218],[0,0],[-4.498,-8.572],[0,0],[3.934,-3.913],[0,0]],"o":[[0,0],[-4.689,-4.659],[0,0],[5.808,-7.639],[0,0],[2.622,5.031],[0,0],[-5.248,5.216]],"v":[[715.13,418.894],[687.768,391.314],[686.641,374.17],[735.562,310.442],[757.676,312.306],[781.857,357.773],[779.608,373.053],[734.063,418.894]],"c":true},"ix":2},"nm":"Контур 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[5.248,5.216],[0,0],[-2.436,5.032],[0,0],[-6.372,-2.794],[0,0],[-0.75,-4.287],[0,0],[2.999,-3.17],[0,0]],"o":[[0,0],[-3.937,-3.913],[0,0],[3.186,-6.15],[0,0],[3.934,1.676],[0,0],[0.75,4.286],[0,0],[-5.437,5.216]],"v":[[427.615,418.894],[357.144,348.083],[354.707,332.989],[359.393,323.673],[376.449,317.523],[465.104,355.351],[472.788,364.854],[475.972,381.065],[472.411,392.806],[446.547,418.894]],"c":true},"ix":2},"nm":"Контур 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[3.374,3.356],[0,0],[-7.497,4.286],[0,0],[-0.188,-9.876],[0,0],[1.687,-1.678]],"o":[[0,0],[-5.998,-6.149],[0,0],[8.622,-5.031],[0,0],[0,2.424],[-3.561,3.356]],"v":[[143.288,422.059],[86.123,364.667],[88.934,344.17],[136.541,316.592],[156.409,327.586],[158.47,415.724],[155.846,422.059]],"c":true},"ix":2},"nm":"Контур 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[-2.062,0.559],[0,0],[-0.188,-8.758],[0,0],[4.124,-2.422],[0,0],[4.123,4.099],[0,0],[-5.061,5.032],[0,0]],"o":[[0,0],[8.434,-2.609],[0,0],[0.188,4.845],[0,0],[-5.248,2.981],[0,0],[-5.061,-5.032],[0,0],[1.312,-1.677]],"v":[[91.558,230.876],[136.541,216.528],[153.785,228.64],[154.909,272.429],[148.349,284.169],[66.818,331.313],[50.887,329.263],[30.457,308.766],[30.457,290.318],[86.31,234.23]],"c":true},"ix":2},"nm":"Контур 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[-5.061,-5.217],[0,0],[-0.563,-2.422],[0,0],[10.121,4.1],[0,0],[-0.75,5.777],[0,0],[-2.062,2.049],[0,0]],"o":[[0,0],[1.686,1.677],[0,0],[2.623,10.435],[0,0],[-5.436,-2.236],[0,0],[0.375,-2.795],[0,0],[5.248,-5.031]],"v":[[302.602,35.779],[313.286,46.401],[316.66,52.55],[347.585,178.701],[329.592,193.981],[266.616,167.707],[258.557,153.918],[271.864,51.618],[275.613,43.979],[283.86,35.593]],"c":true},"ix":2},"nm":"Контур 6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":6,"ty":"sh","ix":7,"ks":{"a":0,"k":{"i":[[-5.062,-5.217],[0,0],[-0.563,-2.235],[0,0],[3.371,-3.354],[0,0],[2.809,9.503],[0,0],[-3.376,3.54],[0,0]],"o":[[0,0],[1.687,1.678],[0,0],[1.309,4.658],[0,0],[-7.124,6.894],[0,0],[-1.499,-4.658],[0,0],[5.248,-5.031]],"v":[[590.117,35.779],[594.428,40.065],[597.8,46.028],[606.987,80.501],[603.425,93.358],[554.131,140.875],[532.39,135.285],[520.395,96.898],[523.58,83.669],[571.374,35.593]],"c":true},"ix":2},"nm":"Контур 7","mn":"ADBE Vector Shape - Group","hd":false},{"ind":7,"ty":"sh","ix":8,"ks":{"a":0,"k":{"i":[[1.499,5.777],[0,0],[-7.12,-7.081],[0,0],[11.618,-0.373],[0,0]],"o":[[0,0],[-2.622,-9.69],[0,0],[8.061,8.198],[0,0],[-6.183,0.186]],"v":[[653.841,171.434],[637.348,109.197],[653.841,99.694],[711.758,157.832],[702.762,180.192],[666.962,181.124]],"c":true},"ix":2},"nm":"Контур 8","mn":"ADBE Vector Shape - Group","hd":false},{"ind":8,"ty":"sh","ix":9,"ks":{"a":0,"k":{"i":[[-6.371,0.186],[0,0],[-2.249,-4.472],[0,0],[2.998,-4.099],[0,0],[5.621,5.59],[0,0],[-0.56,4.1],[0,0]],"o":[[0,0],[5.061,-0.186],[0,0],[2.435,4.472],[0,0],[-4.871,6.336],[0,0],[-2.999,-2.981],[0,0],[0.936,-6.522]],"v":[[668.649,202.925],[691.326,202.366],[703.321,209.447],[732.936,265.535],[731.814,279.697],[673.333,355.909],[653.468,357.214],[641.283,344.915],[637.535,333.735],[655.904,214.292]],"c":true},"ix":2},"nm":"Контур 9","mn":"ADBE Vector Shape - Group","hd":false},{"ind":9,"ty":"sh","ix":10,"ks":{"a":0,"k":{"i":[[-5.998,2.236],[0,0],[-3.562,-3.728],[0,0],[5.057,-5.218],[0,0],[2.063,10.249],[0,0]],"o":[[0,0],[4.875,-1.864],[0,0],[5.062,5.218],[0,0],[-7.497,7.454],[0,0],[-1.122,-6.709]],"v":[[486.655,264.417],[511.208,255.287],[525.266,258.455],[556.38,290.318],[556.194,308.766],[513.271,351.81],[490.966,345.102],[478.221,279.511]],"c":true},"ix":2},"nm":"Контур 10","mn":"ADBE Vector Shape - Group","hd":false},{"ind":10,"ty":"sh","ix":11,"ks":{"a":0,"k":{"i":[[-6.375,-2.796],[0,0],[-0.75,-4.471],[0,0],[7.684,3.353],[0,0],[-3.373,6.708],[0,0]],"o":[[0,0],[4.125,1.677],[0,0],[1.685,8.198],[0,0],[-6.935,-2.981],[0,0],[3.184,-6.335]],"v":[[409.813,250.815],[447.484,266.467],[455.358,276.156],[462.478,313.052],[448.047,324.605],[387.507,298.703],[380.947,280.815],[392.943,257.15]],"c":true},"ix":2},"nm":"Контур 11","mn":"ADBE Vector Shape - Group","hd":false},{"ind":11,"ty":"sh","ix":12,"ks":{"a":0,"k":{"i":[[8.247,3.54],[0,0],[0.936,3.913],[0,0],[-7.122,-7.08],[0,0],[0.377,-3.726],[0,0]],"o":[[0,0],[-3.936,-1.676],[0,0],[-2.436,-9.689],[0,0],[2.626,2.795],[0,0],[-0.75,9.131]],"v":[[403.251,224.355],[385.258,216.9],[377.574,207.957],[354.332,113.669],[371.013,104.352],[421.431,154.85],[425.179,165.098],[421.431,213.174]],"c":true},"ix":2},"nm":"Контур 12","mn":"ADBE Vector Shape - Group","hd":false},{"ind":12,"ty":"sh","ix":13,"ks":{"a":0,"k":{"i":[[6.371,-2.422],[0,0],[3.185,1.304],[0,0],[-0.376,5.777],[0,0],[-2.249,2.237],[0,0],[-2.999,-9.504],[0,0]],"o":[[0,0],[-3.189,1.118],[0,0],[-5.248,-2.236],[0,0],[0.187,-3.168],[0,0],[6.934,-7.081],[0,0],[2.249,6.708]],"v":[[525.079,226.777],[468.852,247.647],[459.106,247.461],[450.11,243.733],[442.049,230.503],[447.297,164.54],[451.046,156.34],[484.969,122.241],[506.901,127.645],[532.763,210.565]],"c":true},"ix":2},"nm":"Контур 13","mn":"ADBE Vector Shape - Group","hd":false},{"ind":13,"ty":"sh","ix":14,"ks":{"a":0,"k":{"i":[[6.375,-2.235],[0,0],[2.249,7.267],[0,0],[-3.562,3.354],[0,0],[-1.685,-5.963],[0,0]],"o":[[0,0],[-7.12,2.608],[0,0],[-1.499,-4.658],[0,0],[4.307,-4.286],[0,0],[1.686,6.522]],"v":[[623.853,189.881],[570.247,209.82],[553.005,201.435],[548.32,186.527],[551.696,173.297],[605.488,121.309],[618.791,125.036],[631.913,174.229]],"c":true},"ix":2},"nm":"Контур 14","mn":"ADBE Vector Shape - Group","hd":false},{"ind":14,"ty":"sh","ix":15,"ks":{"a":0,"k":{"i":[[-10.682,-4.472],[0,0],[3.374,-6.895],[0,0],[6.372,6.335],[0,0],[0.561,1.678],[0,0]],"o":[[0,0],[7.122,2.982],[0,0],[-4.123,8.012],[0,0],[-1.312,-1.305],[0,0],[-4.123,-10.807]],"v":[[292.293,201.994],[365.204,232.18],[371.951,250.255],[342.524,308.766],[321.345,312.12],[304.851,295.536],[301.853,290.877],[275.05,218.764]],"c":true},"ix":2},"nm":"Контур 15","mn":"ADBE Vector Shape - Group","hd":false},{"ind":15,"ty":"sh","ix":16,"ks":{"a":0,"k":{"i":[[-8.809,-2.795],[0,0],[6.747,-6.894],[0,0],[0.187,7.08],[0,0]],"o":[[0,0],[9.371,3.167],[0,0],[-5.06,5.03],[0,0],[-0.187,-9.317]],"v":[[194.644,278.206],[252.934,297.586],[258.182,319.2],[193.144,384.419],[179.275,379.016],[177.213,291.25]],"c":true},"ix":2},"nm":"Контур 16","mn":"ADBE Vector Shape - Group","hd":false},{"ind":16,"ty":"sh","ix":17,"ks":{"a":0,"k":{"i":[[-2.436,-6.522],[0,0],[8.247,2.795],[0,0],[0.187,5.59],[0,0],[-5.622,1.863],[0,0]],"o":[[0,0],[2.999,8.012],[0,0],[-5.247,-1.678],[0,0],[-0.188,-5.776],[0,0],[6.748,-2.05]],"v":[[243,196.031],[267.553,261.995],[254.621,275.225],[184.897,252.119],[175.901,240.007],[175.339,214.292],[184.522,201.435],[226.694,188.018]],"c":true},"ix":2},"nm":"Контур 17","mn":"ADBE Vector Shape - Group","hd":false},{"ind":17,"ty":"sh","ix":18,"ks":{"a":0,"k":{"i":[[4.873,-1.491],[0,0],[-5.435,5.404],[0,0],[1.125,-8.199],[0,0]],"o":[[0,0],[-7.31,2.236],[0,0],[5.81,-5.963],[0,0],[-0.562,5.217]],"v":[[227.444,164.912],[150.411,189.323],[142.913,177.211],[228.943,90.936],[243.749,98.203],[236.44,154.105]],"c":true},"ix":2},"nm":"Контур 18","mn":"ADBE Vector Shape - Group","hd":false},{"ind":18,"ty":"sh","ix":19,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-8.996,3.355],[0,0],[1.686,-10.062],[0,0],[7.686,7.639]],"o":[[0,0],[-6.561,-6.708],[0,0],[9.373,-3.54],[0,0],[-1.69,10.621],[0,0]],"v":[[588.618,291.809],[555.817,258.082],[560.692,236.652],[613.358,216.9],[630.977,231.249],[621.231,294.79],[598.737,302.058]],"c":true},"ix":2},"nm":"Контур 19","mn":"ADBE Vector Shape - Group","hd":false},{"ind":19,"ty":"sh","ix":20,"ks":{"a":0,"k":{"i":[[9.369,9.317],[0,0],[2.999,0],[2.063,-2.049],[0,0],[5.248,5.218],[0,0],[4.124,-4.099],[0,0],[-9.371,-9.317],[0,0],[-4.123,4.099],[0,0],[-5.248,-5.216],[0,0],[-2.998,0],[-2.063,2.048],[0,0],[-5.248,-5.216],[0,0],[-2.999,0],[-2.063,2.047],[0,0]],"o":[[0,0],[-2.063,-2.049],[-2.999,0],[0,0],[-5.252,5.218],[0,0],[-4.123,-4.099],[0,0],[-9.371,9.317],[0,0],[4.123,4.099],[0,0],[5.248,-5.216],[0,0],[2.062,2.048],[2.999,0],[0,0],[5.248,-5.216],[0,0],[2.058,2.047],[2.998,0],[0,0],[9.183,-9.13]],"v":[[866.95,282.678],[588.618,3.17],[580.744,0.002],[572.873,3.17],[446.362,130.253],[427.615,130.253],[301.103,3.17],[285.546,3.17],[7.028,282.492],[7.028,316.219],[141.602,451.316],[157.158,451.316],[283.672,324.231],[302.414,324.231],[429.115,451.13],[436.988,454.296],[444.862,451.13],[571.561,324.231],[590.303,324.231],[716.82,451.316],[724.69,454.482],[732.563,451.316],[867.136,316.219]],"c":true},"ix":2},"nm":"Контур 20","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[437,227.242],"ix":2},"a":{"a":0,"k":[437,227.242],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 2","np":20,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[436.999,227.242],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Кривые Слой 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[50]},{"t":90.0000036657751,"s":[70]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[748.456,958.758,0],"ix":2,"l":2},"a":{"a":0,"k":[876.999,459.241,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.125,7.826],[0,0],[-6.747,0],[0,0],[-2.622,-2.609],[0,0],[5.062,-5.032],[0,0]],"o":[[0,0],[-3.186,-5.963],[0,0],[3.562,-0.187],[0,0],[5.062,5.032],[0,0],[-6.37,6.336]],"v":[[794.225,334.294],[730.687,214.292],[738.561,201.062],[748.68,200.876],[758.426,204.789],[843.704,290.318],[843.704,308.766],[815.216,337.275]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[5.247,5.216],[0,0],[-3.935,5.218],[0,0],[-4.498,-8.572],[0,0],[3.934,-3.913],[0,0]],"o":[[0,0],[-4.689,-4.659],[0,0],[5.808,-7.639],[0,0],[2.622,5.031],[0,0],[-5.248,5.216]],"v":[[715.13,418.894],[687.768,391.314],[686.641,374.17],[735.562,310.442],[757.676,312.306],[781.857,357.773],[779.608,373.053],[734.063,418.894]],"c":true},"ix":2},"nm":"Контур 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[5.248,5.216],[0,0],[-2.436,5.032],[0,0],[-6.372,-2.794],[0,0],[-0.75,-4.287],[0,0],[2.999,-3.17],[0,0]],"o":[[0,0],[-3.937,-3.913],[0,0],[3.186,-6.15],[0,0],[3.934,1.676],[0,0],[0.75,4.286],[0,0],[-5.437,5.216]],"v":[[427.615,418.894],[357.144,348.083],[354.707,332.989],[359.393,323.673],[376.449,317.523],[465.104,355.351],[472.788,364.854],[475.972,381.065],[472.411,392.806],[446.547,418.894]],"c":true},"ix":2},"nm":"Контур 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[3.374,3.356],[0,0],[-7.497,4.286],[0,0],[-0.188,-9.876],[0,0],[1.687,-1.678]],"o":[[0,0],[-5.998,-6.149],[0,0],[8.622,-5.031],[0,0],[0,2.424],[-3.561,3.356]],"v":[[143.288,422.059],[86.123,364.667],[88.934,344.17],[136.541,316.592],[156.409,327.586],[158.47,415.724],[155.846,422.059]],"c":true},"ix":2},"nm":"Контур 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[-2.062,0.559],[0,0],[-0.188,-8.758],[0,0],[4.124,-2.422],[0,0],[4.123,4.099],[0,0],[-5.061,5.032],[0,0]],"o":[[0,0],[8.434,-2.609],[0,0],[0.188,4.845],[0,0],[-5.248,2.981],[0,0],[-5.061,-5.032],[0,0],[1.312,-1.677]],"v":[[91.558,230.876],[136.541,216.528],[153.785,228.64],[154.909,272.429],[148.349,284.169],[66.818,331.313],[50.887,329.263],[30.457,308.766],[30.457,290.318],[86.31,234.23]],"c":true},"ix":2},"nm":"Контур 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[-5.061,-5.217],[0,0],[-0.563,-2.422],[0,0],[10.121,4.1],[0,0],[-0.75,5.777],[0,0],[-2.062,2.049],[0,0]],"o":[[0,0],[1.686,1.677],[0,0],[2.623,10.435],[0,0],[-5.436,-2.236],[0,0],[0.375,-2.795],[0,0],[5.248,-5.031]],"v":[[302.602,35.779],[313.286,46.401],[316.66,52.55],[347.585,178.701],[329.592,193.981],[266.616,167.707],[258.557,153.918],[271.864,51.618],[275.613,43.979],[283.86,35.593]],"c":true},"ix":2},"nm":"Контур 6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":6,"ty":"sh","ix":7,"ks":{"a":0,"k":{"i":[[-5.062,-5.217],[0,0],[-0.563,-2.235],[0,0],[3.371,-3.354],[0,0],[2.809,9.503],[0,0],[-3.376,3.54],[0,0]],"o":[[0,0],[1.687,1.678],[0,0],[1.309,4.658],[0,0],[-7.124,6.894],[0,0],[-1.499,-4.658],[0,0],[5.248,-5.031]],"v":[[590.117,35.779],[594.428,40.065],[597.8,46.028],[606.987,80.501],[603.425,93.358],[554.131,140.875],[532.39,135.285],[520.395,96.898],[523.58,83.669],[571.374,35.593]],"c":true},"ix":2},"nm":"Контур 7","mn":"ADBE Vector Shape - Group","hd":false},{"ind":7,"ty":"sh","ix":8,"ks":{"a":0,"k":{"i":[[1.499,5.777],[0,0],[-7.12,-7.081],[0,0],[11.618,-0.373],[0,0]],"o":[[0,0],[-2.622,-9.69],[0,0],[8.061,8.198],[0,0],[-6.183,0.186]],"v":[[653.841,171.434],[637.348,109.197],[653.841,99.694],[711.758,157.832],[702.762,180.192],[666.962,181.124]],"c":true},"ix":2},"nm":"Контур 8","mn":"ADBE Vector Shape - Group","hd":false},{"ind":8,"ty":"sh","ix":9,"ks":{"a":0,"k":{"i":[[-6.371,0.186],[0,0],[-2.249,-4.472],[0,0],[2.998,-4.099],[0,0],[5.621,5.59],[0,0],[-0.56,4.1],[0,0]],"o":[[0,0],[5.061,-0.186],[0,0],[2.435,4.472],[0,0],[-4.871,6.336],[0,0],[-2.999,-2.981],[0,0],[0.936,-6.522]],"v":[[668.649,202.925],[691.326,202.366],[703.321,209.447],[732.936,265.535],[731.814,279.697],[673.333,355.909],[653.468,357.214],[641.283,344.915],[637.535,333.735],[655.904,214.292]],"c":true},"ix":2},"nm":"Контур 9","mn":"ADBE Vector Shape - Group","hd":false},{"ind":9,"ty":"sh","ix":10,"ks":{"a":0,"k":{"i":[[-5.998,2.236],[0,0],[-3.562,-3.728],[0,0],[5.057,-5.218],[0,0],[2.063,10.249],[0,0]],"o":[[0,0],[4.875,-1.864],[0,0],[5.062,5.218],[0,0],[-7.497,7.454],[0,0],[-1.122,-6.709]],"v":[[486.655,264.417],[511.208,255.287],[525.266,258.455],[556.38,290.318],[556.194,308.766],[513.271,351.81],[490.966,345.102],[478.221,279.511]],"c":true},"ix":2},"nm":"Контур 10","mn":"ADBE Vector Shape - Group","hd":false},{"ind":10,"ty":"sh","ix":11,"ks":{"a":0,"k":{"i":[[-6.375,-2.796],[0,0],[-0.75,-4.471],[0,0],[7.684,3.353],[0,0],[-3.373,6.708],[0,0]],"o":[[0,0],[4.125,1.677],[0,0],[1.685,8.198],[0,0],[-6.935,-2.981],[0,0],[3.184,-6.335]],"v":[[409.813,250.815],[447.484,266.467],[455.358,276.156],[462.478,313.052],[448.047,324.605],[387.507,298.703],[380.947,280.815],[392.943,257.15]],"c":true},"ix":2},"nm":"Контур 11","mn":"ADBE Vector Shape - Group","hd":false},{"ind":11,"ty":"sh","ix":12,"ks":{"a":0,"k":{"i":[[8.247,3.54],[0,0],[0.936,3.913],[0,0],[-7.122,-7.08],[0,0],[0.377,-3.726],[0,0]],"o":[[0,0],[-3.936,-1.676],[0,0],[-2.436,-9.689],[0,0],[2.626,2.795],[0,0],[-0.75,9.131]],"v":[[403.251,224.355],[385.258,216.9],[377.574,207.957],[354.332,113.669],[371.013,104.352],[421.431,154.85],[425.179,165.098],[421.431,213.174]],"c":true},"ix":2},"nm":"Контур 12","mn":"ADBE Vector Shape - Group","hd":false},{"ind":12,"ty":"sh","ix":13,"ks":{"a":0,"k":{"i":[[6.371,-2.422],[0,0],[3.185,1.304],[0,0],[-0.376,5.777],[0,0],[-2.249,2.237],[0,0],[-2.999,-9.504],[0,0]],"o":[[0,0],[-3.189,1.118],[0,0],[-5.248,-2.236],[0,0],[0.187,-3.168],[0,0],[6.934,-7.081],[0,0],[2.249,6.708]],"v":[[525.079,226.777],[468.852,247.647],[459.106,247.461],[450.11,243.733],[442.049,230.503],[447.297,164.54],[451.046,156.34],[484.969,122.241],[506.901,127.645],[532.763,210.565]],"c":true},"ix":2},"nm":"Контур 13","mn":"ADBE Vector Shape - Group","hd":false},{"ind":13,"ty":"sh","ix":14,"ks":{"a":0,"k":{"i":[[6.375,-2.235],[0,0],[2.249,7.267],[0,0],[-3.562,3.354],[0,0],[-1.685,-5.963],[0,0]],"o":[[0,0],[-7.12,2.608],[0,0],[-1.499,-4.658],[0,0],[4.307,-4.286],[0,0],[1.686,6.522]],"v":[[623.853,189.881],[570.247,209.82],[553.005,201.435],[548.32,186.527],[551.696,173.297],[605.488,121.309],[618.791,125.036],[631.913,174.229]],"c":true},"ix":2},"nm":"Контур 14","mn":"ADBE Vector Shape - Group","hd":false},{"ind":14,"ty":"sh","ix":15,"ks":{"a":0,"k":{"i":[[-10.682,-4.472],[0,0],[3.374,-6.895],[0,0],[6.372,6.335],[0,0],[0.561,1.678],[0,0]],"o":[[0,0],[7.122,2.982],[0,0],[-4.123,8.012],[0,0],[-1.312,-1.305],[0,0],[-4.123,-10.807]],"v":[[292.293,201.994],[365.204,232.18],[371.951,250.255],[342.524,308.766],[321.345,312.12],[304.851,295.536],[301.853,290.877],[275.05,218.764]],"c":true},"ix":2},"nm":"Контур 15","mn":"ADBE Vector Shape - Group","hd":false},{"ind":15,"ty":"sh","ix":16,"ks":{"a":0,"k":{"i":[[-8.809,-2.795],[0,0],[6.747,-6.894],[0,0],[0.187,7.08],[0,0]],"o":[[0,0],[9.371,3.167],[0,0],[-5.06,5.03],[0,0],[-0.187,-9.317]],"v":[[194.644,278.206],[252.934,297.586],[258.182,319.2],[193.144,384.419],[179.275,379.016],[177.213,291.25]],"c":true},"ix":2},"nm":"Контур 16","mn":"ADBE Vector Shape - Group","hd":false},{"ind":16,"ty":"sh","ix":17,"ks":{"a":0,"k":{"i":[[-2.436,-6.522],[0,0],[8.247,2.795],[0,0],[0.187,5.59],[0,0],[-5.622,1.863],[0,0]],"o":[[0,0],[2.999,8.012],[0,0],[-5.247,-1.678],[0,0],[-0.188,-5.776],[0,0],[6.748,-2.05]],"v":[[243,196.031],[267.553,261.995],[254.621,275.225],[184.897,252.119],[175.901,240.007],[175.339,214.292],[184.522,201.435],[226.694,188.018]],"c":true},"ix":2},"nm":"Контур 17","mn":"ADBE Vector Shape - Group","hd":false},{"ind":17,"ty":"sh","ix":18,"ks":{"a":0,"k":{"i":[[4.873,-1.491],[0,0],[-5.435,5.404],[0,0],[1.125,-8.199],[0,0]],"o":[[0,0],[-7.31,2.236],[0,0],[5.81,-5.963],[0,0],[-0.562,5.217]],"v":[[227.444,164.912],[150.411,189.323],[142.913,177.211],[228.943,90.936],[243.749,98.203],[236.44,154.105]],"c":true},"ix":2},"nm":"Контур 18","mn":"ADBE Vector Shape - Group","hd":false},{"ind":18,"ty":"sh","ix":19,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-8.996,3.355],[0,0],[1.686,-10.062],[0,0],[7.686,7.639]],"o":[[0,0],[-6.561,-6.708],[0,0],[9.373,-3.54],[0,0],[-1.69,10.621],[0,0]],"v":[[588.618,291.809],[555.817,258.082],[560.692,236.652],[613.358,216.9],[630.977,231.249],[621.231,294.79],[598.737,302.058]],"c":true},"ix":2},"nm":"Контур 19","mn":"ADBE Vector Shape - Group","hd":false},{"ind":19,"ty":"sh","ix":20,"ks":{"a":0,"k":{"i":[[9.369,9.317],[0,0],[2.999,0],[2.063,-2.049],[0,0],[5.248,5.218],[0,0],[4.124,-4.099],[0,0],[-9.371,-9.317],[0,0],[-4.123,4.099],[0,0],[-5.248,-5.216],[0,0],[-2.998,0],[-2.063,2.048],[0,0],[-5.248,-5.216],[0,0],[-2.999,0],[-2.063,2.047],[0,0]],"o":[[0,0],[-2.063,-2.049],[-2.999,0],[0,0],[-5.252,5.218],[0,0],[-4.123,-4.099],[0,0],[-9.371,9.317],[0,0],[4.123,4.099],[0,0],[5.248,-5.216],[0,0],[2.062,2.048],[2.999,0],[0,0],[5.248,-5.216],[0,0],[2.058,2.047],[2.998,0],[0,0],[9.183,-9.13]],"v":[[866.95,282.678],[588.618,3.17],[580.744,0.002],[572.873,3.17],[446.362,130.253],[427.615,130.253],[301.103,3.17],[285.546,3.17],[7.028,282.492],[7.028,316.219],[141.602,451.316],[157.158,451.316],[283.672,324.231],[302.414,324.231],[429.115,451.13],[436.988,454.296],[444.862,451.13],[571.561,324.231],[590.303,324.231],[716.82,451.316],[724.69,454.482],[732.563,451.316],[867.136,316.219]],"c":true},"ix":2},"nm":"Контур 20","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[437,227.242],"ix":2},"a":{"a":0,"k":[437,227.242],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 2","np":20,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[436.999,227.242],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Dots","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[748.456,958.758,0],"ix":2,"l":2},"a":{"a":0,"k":[746,960,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1492,"h":1920,"ip":-73.000002973351,"op":3823.00015571398,"st":-73.000002973351,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"Animation loading","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":50,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[746,960,0],"ix":2,"l":2},"a":{"a":0,"k":[746,960,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1492,"h":1920,"ip":0,"op":3896.00015868733,"st":0,"bm":0}],"markers":[]} ================================================ FILE: src/app/views/consumer/Connected/animation_connecting_start.json ================================================ {"v":"5.7.4","fr":29.9700012207031,"ip":0,"op":90.0000036657751,"w":1492,"h":1920,"nm":"1","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Слой-фигура 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":0,"s":[0]},{"t":15.0000006109625,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[745.956,1492,0],"ix":2,"l":2},"a":{"a":0,"k":[-125.5,-624,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":15,"s":[100,100,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":30,"s":[95,95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":45,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":60,"s":[95,95,100]},{"t":90.0000036657751,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[240,240],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-126,-624],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Слой-фигура 1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":76,"s":[100]},{"t":90.0000036657751,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[745.956,416,0],"ix":2,"l":2},"a":{"a":0,"k":[-125.5,-624,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":76,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":90,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":103,"s":[90,90,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":114.459,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":124.771,"s":[90,90,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":136.229,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":146.541,"s":[90,90,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":158,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":168.313,"s":[90,90,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":179.771,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":191.229,"s":[90,90,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":202.688,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":213,"s":[90,90,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":224.459,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":234.771,"s":[90,90,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":246.229,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":256.541,"s":[90,90,100]},{"t":268.000010915864,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[240,240],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-126,-624],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Слой-фигура 7","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[746,960,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0,538],[-1,209],[-145,67.5],[-267,186.5],[-275,-36],[-191,-63],[26.75,28.25],[52.75,154.75],[144,67],[188,107.5],[208.5,-38.5],[112,-5.5],[68,-146],[0,-79],[0,-540]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":18,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.96]},"o":{"x":[0.48],"y":[0.04]},"t":22,"s":[0]},{"t":85.000003462121,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":4,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Фигура 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Слой-фигура 6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[746,960,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0,538],[-1,209],[-145,67.5],[-267,186.5],[-275,-36],[-191,-63],[26.75,28.25],[52.75,154.75],[144,67],[188,107.5],[208.5,-38.5],[112,-5.5],[68,-146],[0,-79],[0,-540]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,0,0.517646789551,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":17,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.96]},"o":{"x":[0.48],"y":[0.04]},"t":20,"s":[0]},{"t":83.0000033806593,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":4,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Фигура 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Слой-фигура 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[746,960,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0,538],[-1,209],[-145,67.5],[-267,186.5],[-275,-36],[-191,-63],[26.75,28.25],[52.75,154.75],[144,67],[188,107.5],[208.5,-38.5],[112,-5.5],[68,-146],[0,-79],[0,-540]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":18,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.52],"y":[0.96]},"o":{"x":[0.48],"y":[0.04]},"t":15,"s":[0]},{"t":78.0000031770051,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":4,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Фигура 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Слой-фигура 5","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.66,"y":0},"t":52,"s":[762,1512,0],"to":[0,-89.167,0],"ti":[0,89.167,0]},{"t":90.0000036657751,"s":[762,977,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[1016,588],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Контур прямоугольника 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":18,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-18,-6],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Прямоугольник 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Кривые Слой 3","tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[748.456,958.758,0],"ix":2,"l":2},"a":{"a":0,"k":[876.999,459.241,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.125,7.826],[0,0],[-6.747,0],[0,0],[-2.622,-2.609],[0,0],[5.062,-5.032],[0,0]],"o":[[0,0],[-3.186,-5.963],[0,0],[3.562,-0.187],[0,0],[5.062,5.032],[0,0],[-6.37,6.336]],"v":[[794.225,334.294],[730.687,214.292],[738.561,201.062],[748.68,200.876],[758.426,204.789],[843.704,290.318],[843.704,308.766],[815.216,337.275]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[5.247,5.216],[0,0],[-3.935,5.218],[0,0],[-4.498,-8.572],[0,0],[3.934,-3.913],[0,0]],"o":[[0,0],[-4.689,-4.659],[0,0],[5.808,-7.639],[0,0],[2.622,5.031],[0,0],[-5.248,5.216]],"v":[[715.13,418.894],[687.768,391.314],[686.641,374.17],[735.562,310.442],[757.676,312.306],[781.857,357.773],[779.608,373.053],[734.063,418.894]],"c":true},"ix":2},"nm":"Контур 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[5.248,5.216],[0,0],[-2.436,5.032],[0,0],[-6.372,-2.794],[0,0],[-0.75,-4.287],[0,0],[2.999,-3.17],[0,0]],"o":[[0,0],[-3.937,-3.913],[0,0],[3.186,-6.15],[0,0],[3.934,1.676],[0,0],[0.75,4.286],[0,0],[-5.437,5.216]],"v":[[427.615,418.894],[357.144,348.083],[354.707,332.989],[359.393,323.673],[376.449,317.523],[465.104,355.351],[472.788,364.854],[475.972,381.065],[472.411,392.806],[446.547,418.894]],"c":true},"ix":2},"nm":"Контур 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[3.374,3.356],[0,0],[-7.497,4.286],[0,0],[-0.188,-9.876],[0,0],[1.687,-1.678]],"o":[[0,0],[-5.998,-6.149],[0,0],[8.622,-5.031],[0,0],[0,2.424],[-3.561,3.356]],"v":[[143.288,422.059],[86.123,364.667],[88.934,344.17],[136.541,316.592],[156.409,327.586],[158.47,415.724],[155.846,422.059]],"c":true},"ix":2},"nm":"Контур 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[-2.062,0.559],[0,0],[-0.188,-8.758],[0,0],[4.124,-2.422],[0,0],[4.123,4.099],[0,0],[-5.061,5.032],[0,0]],"o":[[0,0],[8.434,-2.609],[0,0],[0.188,4.845],[0,0],[-5.248,2.981],[0,0],[-5.061,-5.032],[0,0],[1.312,-1.677]],"v":[[91.558,230.876],[136.541,216.528],[153.785,228.64],[154.909,272.429],[148.349,284.169],[66.818,331.313],[50.887,329.263],[30.457,308.766],[30.457,290.318],[86.31,234.23]],"c":true},"ix":2},"nm":"Контур 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[-5.061,-5.217],[0,0],[-0.563,-2.422],[0,0],[10.121,4.1],[0,0],[-0.75,5.777],[0,0],[-2.062,2.049],[0,0]],"o":[[0,0],[1.686,1.677],[0,0],[2.623,10.435],[0,0],[-5.436,-2.236],[0,0],[0.375,-2.795],[0,0],[5.248,-5.031]],"v":[[302.602,35.779],[313.286,46.401],[316.66,52.55],[347.585,178.701],[329.592,193.981],[266.616,167.707],[258.557,153.918],[271.864,51.618],[275.613,43.979],[283.86,35.593]],"c":true},"ix":2},"nm":"Контур 6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":6,"ty":"sh","ix":7,"ks":{"a":0,"k":{"i":[[-5.062,-5.217],[0,0],[-0.563,-2.235],[0,0],[3.371,-3.354],[0,0],[2.809,9.503],[0,0],[-3.376,3.54],[0,0]],"o":[[0,0],[1.687,1.678],[0,0],[1.309,4.658],[0,0],[-7.124,6.894],[0,0],[-1.499,-4.658],[0,0],[5.248,-5.031]],"v":[[590.117,35.779],[594.428,40.065],[597.8,46.028],[606.987,80.501],[603.425,93.358],[554.131,140.875],[532.39,135.285],[520.395,96.898],[523.58,83.669],[571.374,35.593]],"c":true},"ix":2},"nm":"Контур 7","mn":"ADBE Vector Shape - Group","hd":false},{"ind":7,"ty":"sh","ix":8,"ks":{"a":0,"k":{"i":[[1.499,5.777],[0,0],[-7.12,-7.081],[0,0],[11.618,-0.373],[0,0]],"o":[[0,0],[-2.622,-9.69],[0,0],[8.061,8.198],[0,0],[-6.183,0.186]],"v":[[653.841,171.434],[637.348,109.197],[653.841,99.694],[711.758,157.832],[702.762,180.192],[666.962,181.124]],"c":true},"ix":2},"nm":"Контур 8","mn":"ADBE Vector Shape - Group","hd":false},{"ind":8,"ty":"sh","ix":9,"ks":{"a":0,"k":{"i":[[-6.371,0.186],[0,0],[-2.249,-4.472],[0,0],[2.998,-4.099],[0,0],[5.621,5.59],[0,0],[-0.56,4.1],[0,0]],"o":[[0,0],[5.061,-0.186],[0,0],[2.435,4.472],[0,0],[-4.871,6.336],[0,0],[-2.999,-2.981],[0,0],[0.936,-6.522]],"v":[[668.649,202.925],[691.326,202.366],[703.321,209.447],[732.936,265.535],[731.814,279.697],[673.333,355.909],[653.468,357.214],[641.283,344.915],[637.535,333.735],[655.904,214.292]],"c":true},"ix":2},"nm":"Контур 9","mn":"ADBE Vector Shape - Group","hd":false},{"ind":9,"ty":"sh","ix":10,"ks":{"a":0,"k":{"i":[[-5.998,2.236],[0,0],[-3.562,-3.728],[0,0],[5.057,-5.218],[0,0],[2.063,10.249],[0,0]],"o":[[0,0],[4.875,-1.864],[0,0],[5.062,5.218],[0,0],[-7.497,7.454],[0,0],[-1.122,-6.709]],"v":[[486.655,264.417],[511.208,255.287],[525.266,258.455],[556.38,290.318],[556.194,308.766],[513.271,351.81],[490.966,345.102],[478.221,279.511]],"c":true},"ix":2},"nm":"Контур 10","mn":"ADBE Vector Shape - Group","hd":false},{"ind":10,"ty":"sh","ix":11,"ks":{"a":0,"k":{"i":[[-6.375,-2.796],[0,0],[-0.75,-4.471],[0,0],[7.684,3.353],[0,0],[-3.373,6.708],[0,0]],"o":[[0,0],[4.125,1.677],[0,0],[1.685,8.198],[0,0],[-6.935,-2.981],[0,0],[3.184,-6.335]],"v":[[409.813,250.815],[447.484,266.467],[455.358,276.156],[462.478,313.052],[448.047,324.605],[387.507,298.703],[380.947,280.815],[392.943,257.15]],"c":true},"ix":2},"nm":"Контур 11","mn":"ADBE Vector Shape - Group","hd":false},{"ind":11,"ty":"sh","ix":12,"ks":{"a":0,"k":{"i":[[8.247,3.54],[0,0],[0.936,3.913],[0,0],[-7.122,-7.08],[0,0],[0.377,-3.726],[0,0]],"o":[[0,0],[-3.936,-1.676],[0,0],[-2.436,-9.689],[0,0],[2.626,2.795],[0,0],[-0.75,9.131]],"v":[[403.251,224.355],[385.258,216.9],[377.574,207.957],[354.332,113.669],[371.013,104.352],[421.431,154.85],[425.179,165.098],[421.431,213.174]],"c":true},"ix":2},"nm":"Контур 12","mn":"ADBE Vector Shape - Group","hd":false},{"ind":12,"ty":"sh","ix":13,"ks":{"a":0,"k":{"i":[[6.371,-2.422],[0,0],[3.185,1.304],[0,0],[-0.376,5.777],[0,0],[-2.249,2.237],[0,0],[-2.999,-9.504],[0,0]],"o":[[0,0],[-3.189,1.118],[0,0],[-5.248,-2.236],[0,0],[0.187,-3.168],[0,0],[6.934,-7.081],[0,0],[2.249,6.708]],"v":[[525.079,226.777],[468.852,247.647],[459.106,247.461],[450.11,243.733],[442.049,230.503],[447.297,164.54],[451.046,156.34],[484.969,122.241],[506.901,127.645],[532.763,210.565]],"c":true},"ix":2},"nm":"Контур 13","mn":"ADBE Vector Shape - Group","hd":false},{"ind":13,"ty":"sh","ix":14,"ks":{"a":0,"k":{"i":[[6.375,-2.235],[0,0],[2.249,7.267],[0,0],[-3.562,3.354],[0,0],[-1.685,-5.963],[0,0]],"o":[[0,0],[-7.12,2.608],[0,0],[-1.499,-4.658],[0,0],[4.307,-4.286],[0,0],[1.686,6.522]],"v":[[623.853,189.881],[570.247,209.82],[553.005,201.435],[548.32,186.527],[551.696,173.297],[605.488,121.309],[618.791,125.036],[631.913,174.229]],"c":true},"ix":2},"nm":"Контур 14","mn":"ADBE Vector Shape - Group","hd":false},{"ind":14,"ty":"sh","ix":15,"ks":{"a":0,"k":{"i":[[-10.682,-4.472],[0,0],[3.374,-6.895],[0,0],[6.372,6.335],[0,0],[0.561,1.678],[0,0]],"o":[[0,0],[7.122,2.982],[0,0],[-4.123,8.012],[0,0],[-1.312,-1.305],[0,0],[-4.123,-10.807]],"v":[[292.293,201.994],[365.204,232.18],[371.951,250.255],[342.524,308.766],[321.345,312.12],[304.851,295.536],[301.853,290.877],[275.05,218.764]],"c":true},"ix":2},"nm":"Контур 15","mn":"ADBE Vector Shape - Group","hd":false},{"ind":15,"ty":"sh","ix":16,"ks":{"a":0,"k":{"i":[[-8.809,-2.795],[0,0],[6.747,-6.894],[0,0],[0.187,7.08],[0,0]],"o":[[0,0],[9.371,3.167],[0,0],[-5.06,5.03],[0,0],[-0.187,-9.317]],"v":[[194.644,278.206],[252.934,297.586],[258.182,319.2],[193.144,384.419],[179.275,379.016],[177.213,291.25]],"c":true},"ix":2},"nm":"Контур 16","mn":"ADBE Vector Shape - Group","hd":false},{"ind":16,"ty":"sh","ix":17,"ks":{"a":0,"k":{"i":[[-2.436,-6.522],[0,0],[8.247,2.795],[0,0],[0.187,5.59],[0,0],[-5.622,1.863],[0,0]],"o":[[0,0],[2.999,8.012],[0,0],[-5.247,-1.678],[0,0],[-0.188,-5.776],[0,0],[6.748,-2.05]],"v":[[243,196.031],[267.553,261.995],[254.621,275.225],[184.897,252.119],[175.901,240.007],[175.339,214.292],[184.522,201.435],[226.694,188.018]],"c":true},"ix":2},"nm":"Контур 17","mn":"ADBE Vector Shape - Group","hd":false},{"ind":17,"ty":"sh","ix":18,"ks":{"a":0,"k":{"i":[[4.873,-1.491],[0,0],[-5.435,5.404],[0,0],[1.125,-8.199],[0,0]],"o":[[0,0],[-7.31,2.236],[0,0],[5.81,-5.963],[0,0],[-0.562,5.217]],"v":[[227.444,164.912],[150.411,189.323],[142.913,177.211],[228.943,90.936],[243.749,98.203],[236.44,154.105]],"c":true},"ix":2},"nm":"Контур 18","mn":"ADBE Vector Shape - Group","hd":false},{"ind":18,"ty":"sh","ix":19,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-8.996,3.355],[0,0],[1.686,-10.062],[0,0],[7.686,7.639]],"o":[[0,0],[-6.561,-6.708],[0,0],[9.373,-3.54],[0,0],[-1.69,10.621],[0,0]],"v":[[588.618,291.809],[555.817,258.082],[560.692,236.652],[613.358,216.9],[630.977,231.249],[621.231,294.79],[598.737,302.058]],"c":true},"ix":2},"nm":"Контур 19","mn":"ADBE Vector Shape - Group","hd":false},{"ind":19,"ty":"sh","ix":20,"ks":{"a":0,"k":{"i":[[9.369,9.317],[0,0],[2.999,0],[2.063,-2.049],[0,0],[5.248,5.218],[0,0],[4.124,-4.099],[0,0],[-9.371,-9.317],[0,0],[-4.123,4.099],[0,0],[-5.248,-5.216],[0,0],[-2.998,0],[-2.063,2.048],[0,0],[-5.248,-5.216],[0,0],[-2.999,0],[-2.063,2.047],[0,0]],"o":[[0,0],[-2.063,-2.049],[-2.999,0],[0,0],[-5.252,5.218],[0,0],[-4.123,-4.099],[0,0],[-9.371,9.317],[0,0],[4.123,4.099],[0,0],[5.248,-5.216],[0,0],[2.062,2.048],[2.999,0],[0,0],[5.248,-5.216],[0,0],[2.058,2.047],[2.998,0],[0,0],[9.183,-9.13]],"v":[[866.95,282.678],[588.618,3.17],[580.744,0.002],[572.873,3.17],[446.362,130.253],[427.615,130.253],[301.103,3.17],[285.546,3.17],[7.028,282.492],[7.028,316.219],[141.602,451.316],[157.158,451.316],[283.672,324.231],[302.414,324.231],[429.115,451.13],[436.988,454.296],[444.862,451.13],[571.561,324.231],[590.303,324.231],[716.82,451.316],[724.69,454.482],[732.563,451.316],[867.136,316.219]],"c":true},"ix":2},"nm":"Контур 20","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[437,227.242],"ix":2},"a":{"a":0,"k":[437,227.242],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 2","np":20,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[436.999,227.242],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Кривые Слой 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[50]},{"t":90.0000036657751,"s":[70]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[748.456,958.758,0],"ix":2,"l":2},"a":{"a":0,"k":[876.999,459.241,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.125,7.826],[0,0],[-6.747,0],[0,0],[-2.622,-2.609],[0,0],[5.062,-5.032],[0,0]],"o":[[0,0],[-3.186,-5.963],[0,0],[3.562,-0.187],[0,0],[5.062,5.032],[0,0],[-6.37,6.336]],"v":[[794.225,334.294],[730.687,214.292],[738.561,201.062],[748.68,200.876],[758.426,204.789],[843.704,290.318],[843.704,308.766],[815.216,337.275]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[5.247,5.216],[0,0],[-3.935,5.218],[0,0],[-4.498,-8.572],[0,0],[3.934,-3.913],[0,0]],"o":[[0,0],[-4.689,-4.659],[0,0],[5.808,-7.639],[0,0],[2.622,5.031],[0,0],[-5.248,5.216]],"v":[[715.13,418.894],[687.768,391.314],[686.641,374.17],[735.562,310.442],[757.676,312.306],[781.857,357.773],[779.608,373.053],[734.063,418.894]],"c":true},"ix":2},"nm":"Контур 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[5.248,5.216],[0,0],[-2.436,5.032],[0,0],[-6.372,-2.794],[0,0],[-0.75,-4.287],[0,0],[2.999,-3.17],[0,0]],"o":[[0,0],[-3.937,-3.913],[0,0],[3.186,-6.15],[0,0],[3.934,1.676],[0,0],[0.75,4.286],[0,0],[-5.437,5.216]],"v":[[427.615,418.894],[357.144,348.083],[354.707,332.989],[359.393,323.673],[376.449,317.523],[465.104,355.351],[472.788,364.854],[475.972,381.065],[472.411,392.806],[446.547,418.894]],"c":true},"ix":2},"nm":"Контур 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[3.374,3.356],[0,0],[-7.497,4.286],[0,0],[-0.188,-9.876],[0,0],[1.687,-1.678]],"o":[[0,0],[-5.998,-6.149],[0,0],[8.622,-5.031],[0,0],[0,2.424],[-3.561,3.356]],"v":[[143.288,422.059],[86.123,364.667],[88.934,344.17],[136.541,316.592],[156.409,327.586],[158.47,415.724],[155.846,422.059]],"c":true},"ix":2},"nm":"Контур 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[-2.062,0.559],[0,0],[-0.188,-8.758],[0,0],[4.124,-2.422],[0,0],[4.123,4.099],[0,0],[-5.061,5.032],[0,0]],"o":[[0,0],[8.434,-2.609],[0,0],[0.188,4.845],[0,0],[-5.248,2.981],[0,0],[-5.061,-5.032],[0,0],[1.312,-1.677]],"v":[[91.558,230.876],[136.541,216.528],[153.785,228.64],[154.909,272.429],[148.349,284.169],[66.818,331.313],[50.887,329.263],[30.457,308.766],[30.457,290.318],[86.31,234.23]],"c":true},"ix":2},"nm":"Контур 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[-5.061,-5.217],[0,0],[-0.563,-2.422],[0,0],[10.121,4.1],[0,0],[-0.75,5.777],[0,0],[-2.062,2.049],[0,0]],"o":[[0,0],[1.686,1.677],[0,0],[2.623,10.435],[0,0],[-5.436,-2.236],[0,0],[0.375,-2.795],[0,0],[5.248,-5.031]],"v":[[302.602,35.779],[313.286,46.401],[316.66,52.55],[347.585,178.701],[329.592,193.981],[266.616,167.707],[258.557,153.918],[271.864,51.618],[275.613,43.979],[283.86,35.593]],"c":true},"ix":2},"nm":"Контур 6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":6,"ty":"sh","ix":7,"ks":{"a":0,"k":{"i":[[-5.062,-5.217],[0,0],[-0.563,-2.235],[0,0],[3.371,-3.354],[0,0],[2.809,9.503],[0,0],[-3.376,3.54],[0,0]],"o":[[0,0],[1.687,1.678],[0,0],[1.309,4.658],[0,0],[-7.124,6.894],[0,0],[-1.499,-4.658],[0,0],[5.248,-5.031]],"v":[[590.117,35.779],[594.428,40.065],[597.8,46.028],[606.987,80.501],[603.425,93.358],[554.131,140.875],[532.39,135.285],[520.395,96.898],[523.58,83.669],[571.374,35.593]],"c":true},"ix":2},"nm":"Контур 7","mn":"ADBE Vector Shape - Group","hd":false},{"ind":7,"ty":"sh","ix":8,"ks":{"a":0,"k":{"i":[[1.499,5.777],[0,0],[-7.12,-7.081],[0,0],[11.618,-0.373],[0,0]],"o":[[0,0],[-2.622,-9.69],[0,0],[8.061,8.198],[0,0],[-6.183,0.186]],"v":[[653.841,171.434],[637.348,109.197],[653.841,99.694],[711.758,157.832],[702.762,180.192],[666.962,181.124]],"c":true},"ix":2},"nm":"Контур 8","mn":"ADBE Vector Shape - Group","hd":false},{"ind":8,"ty":"sh","ix":9,"ks":{"a":0,"k":{"i":[[-6.371,0.186],[0,0],[-2.249,-4.472],[0,0],[2.998,-4.099],[0,0],[5.621,5.59],[0,0],[-0.56,4.1],[0,0]],"o":[[0,0],[5.061,-0.186],[0,0],[2.435,4.472],[0,0],[-4.871,6.336],[0,0],[-2.999,-2.981],[0,0],[0.936,-6.522]],"v":[[668.649,202.925],[691.326,202.366],[703.321,209.447],[732.936,265.535],[731.814,279.697],[673.333,355.909],[653.468,357.214],[641.283,344.915],[637.535,333.735],[655.904,214.292]],"c":true},"ix":2},"nm":"Контур 9","mn":"ADBE Vector Shape - Group","hd":false},{"ind":9,"ty":"sh","ix":10,"ks":{"a":0,"k":{"i":[[-5.998,2.236],[0,0],[-3.562,-3.728],[0,0],[5.057,-5.218],[0,0],[2.063,10.249],[0,0]],"o":[[0,0],[4.875,-1.864],[0,0],[5.062,5.218],[0,0],[-7.497,7.454],[0,0],[-1.122,-6.709]],"v":[[486.655,264.417],[511.208,255.287],[525.266,258.455],[556.38,290.318],[556.194,308.766],[513.271,351.81],[490.966,345.102],[478.221,279.511]],"c":true},"ix":2},"nm":"Контур 10","mn":"ADBE Vector Shape - Group","hd":false},{"ind":10,"ty":"sh","ix":11,"ks":{"a":0,"k":{"i":[[-6.375,-2.796],[0,0],[-0.75,-4.471],[0,0],[7.684,3.353],[0,0],[-3.373,6.708],[0,0]],"o":[[0,0],[4.125,1.677],[0,0],[1.685,8.198],[0,0],[-6.935,-2.981],[0,0],[3.184,-6.335]],"v":[[409.813,250.815],[447.484,266.467],[455.358,276.156],[462.478,313.052],[448.047,324.605],[387.507,298.703],[380.947,280.815],[392.943,257.15]],"c":true},"ix":2},"nm":"Контур 11","mn":"ADBE Vector Shape - Group","hd":false},{"ind":11,"ty":"sh","ix":12,"ks":{"a":0,"k":{"i":[[8.247,3.54],[0,0],[0.936,3.913],[0,0],[-7.122,-7.08],[0,0],[0.377,-3.726],[0,0]],"o":[[0,0],[-3.936,-1.676],[0,0],[-2.436,-9.689],[0,0],[2.626,2.795],[0,0],[-0.75,9.131]],"v":[[403.251,224.355],[385.258,216.9],[377.574,207.957],[354.332,113.669],[371.013,104.352],[421.431,154.85],[425.179,165.098],[421.431,213.174]],"c":true},"ix":2},"nm":"Контур 12","mn":"ADBE Vector Shape - Group","hd":false},{"ind":12,"ty":"sh","ix":13,"ks":{"a":0,"k":{"i":[[6.371,-2.422],[0,0],[3.185,1.304],[0,0],[-0.376,5.777],[0,0],[-2.249,2.237],[0,0],[-2.999,-9.504],[0,0]],"o":[[0,0],[-3.189,1.118],[0,0],[-5.248,-2.236],[0,0],[0.187,-3.168],[0,0],[6.934,-7.081],[0,0],[2.249,6.708]],"v":[[525.079,226.777],[468.852,247.647],[459.106,247.461],[450.11,243.733],[442.049,230.503],[447.297,164.54],[451.046,156.34],[484.969,122.241],[506.901,127.645],[532.763,210.565]],"c":true},"ix":2},"nm":"Контур 13","mn":"ADBE Vector Shape - Group","hd":false},{"ind":13,"ty":"sh","ix":14,"ks":{"a":0,"k":{"i":[[6.375,-2.235],[0,0],[2.249,7.267],[0,0],[-3.562,3.354],[0,0],[-1.685,-5.963],[0,0]],"o":[[0,0],[-7.12,2.608],[0,0],[-1.499,-4.658],[0,0],[4.307,-4.286],[0,0],[1.686,6.522]],"v":[[623.853,189.881],[570.247,209.82],[553.005,201.435],[548.32,186.527],[551.696,173.297],[605.488,121.309],[618.791,125.036],[631.913,174.229]],"c":true},"ix":2},"nm":"Контур 14","mn":"ADBE Vector Shape - Group","hd":false},{"ind":14,"ty":"sh","ix":15,"ks":{"a":0,"k":{"i":[[-10.682,-4.472],[0,0],[3.374,-6.895],[0,0],[6.372,6.335],[0,0],[0.561,1.678],[0,0]],"o":[[0,0],[7.122,2.982],[0,0],[-4.123,8.012],[0,0],[-1.312,-1.305],[0,0],[-4.123,-10.807]],"v":[[292.293,201.994],[365.204,232.18],[371.951,250.255],[342.524,308.766],[321.345,312.12],[304.851,295.536],[301.853,290.877],[275.05,218.764]],"c":true},"ix":2},"nm":"Контур 15","mn":"ADBE Vector Shape - Group","hd":false},{"ind":15,"ty":"sh","ix":16,"ks":{"a":0,"k":{"i":[[-8.809,-2.795],[0,0],[6.747,-6.894],[0,0],[0.187,7.08],[0,0]],"o":[[0,0],[9.371,3.167],[0,0],[-5.06,5.03],[0,0],[-0.187,-9.317]],"v":[[194.644,278.206],[252.934,297.586],[258.182,319.2],[193.144,384.419],[179.275,379.016],[177.213,291.25]],"c":true},"ix":2},"nm":"Контур 16","mn":"ADBE Vector Shape - Group","hd":false},{"ind":16,"ty":"sh","ix":17,"ks":{"a":0,"k":{"i":[[-2.436,-6.522],[0,0],[8.247,2.795],[0,0],[0.187,5.59],[0,0],[-5.622,1.863],[0,0]],"o":[[0,0],[2.999,8.012],[0,0],[-5.247,-1.678],[0,0],[-0.188,-5.776],[0,0],[6.748,-2.05]],"v":[[243,196.031],[267.553,261.995],[254.621,275.225],[184.897,252.119],[175.901,240.007],[175.339,214.292],[184.522,201.435],[226.694,188.018]],"c":true},"ix":2},"nm":"Контур 17","mn":"ADBE Vector Shape - Group","hd":false},{"ind":17,"ty":"sh","ix":18,"ks":{"a":0,"k":{"i":[[4.873,-1.491],[0,0],[-5.435,5.404],[0,0],[1.125,-8.199],[0,0]],"o":[[0,0],[-7.31,2.236],[0,0],[5.81,-5.963],[0,0],[-0.562,5.217]],"v":[[227.444,164.912],[150.411,189.323],[142.913,177.211],[228.943,90.936],[243.749,98.203],[236.44,154.105]],"c":true},"ix":2},"nm":"Контур 18","mn":"ADBE Vector Shape - Group","hd":false},{"ind":18,"ty":"sh","ix":19,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-8.996,3.355],[0,0],[1.686,-10.062],[0,0],[7.686,7.639]],"o":[[0,0],[-6.561,-6.708],[0,0],[9.373,-3.54],[0,0],[-1.69,10.621],[0,0]],"v":[[588.618,291.809],[555.817,258.082],[560.692,236.652],[613.358,216.9],[630.977,231.249],[621.231,294.79],[598.737,302.058]],"c":true},"ix":2},"nm":"Контур 19","mn":"ADBE Vector Shape - Group","hd":false},{"ind":19,"ty":"sh","ix":20,"ks":{"a":0,"k":{"i":[[9.369,9.317],[0,0],[2.999,0],[2.063,-2.049],[0,0],[5.248,5.218],[0,0],[4.124,-4.099],[0,0],[-9.371,-9.317],[0,0],[-4.123,4.099],[0,0],[-5.248,-5.216],[0,0],[-2.998,0],[-2.063,2.048],[0,0],[-5.248,-5.216],[0,0],[-2.999,0],[-2.063,2.047],[0,0]],"o":[[0,0],[-2.063,-2.049],[-2.999,0],[0,0],[-5.252,5.218],[0,0],[-4.123,-4.099],[0,0],[-9.371,9.317],[0,0],[4.123,4.099],[0,0],[5.248,-5.216],[0,0],[2.062,2.048],[2.999,0],[0,0],[5.248,-5.216],[0,0],[2.058,2.047],[2.998,0],[0,0],[9.183,-9.13]],"v":[[866.95,282.678],[588.618,3.17],[580.744,0.002],[572.873,3.17],[446.362,130.253],[427.615,130.253],[301.103,3.17],[285.546,3.17],[7.028,282.492],[7.028,316.219],[141.602,451.316],[157.158,451.316],[283.672,324.231],[302.414,324.231],[429.115,451.13],[436.988,454.296],[444.862,451.13],[571.561,324.231],[590.303,324.231],[716.82,451.316],[724.69,454.482],[732.563,451.316],[867.136,316.219]],"c":true},"ix":2},"nm":"Контур 20","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[437,227.242],"ix":2},"a":{"a":0,"k":[437,227.242],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 2","np":20,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[436.999,227.242],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":2,"ty":0,"nm":"Animation loading","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":50,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[746,960,0],"ix":2,"l":2},"a":{"a":0,"k":[746,960,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1492,"h":1920,"ip":0,"op":3896.00015868733,"st":0,"bm":0}],"markers":[]} ================================================ FILE: src/app/views/consumer/Proposals/ManualConnectView.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useEffect } from "react" import { observer } from "mobx-react-lite" import styled from "styled-components" import { CountryFilter } from "../../../proposals/components/CountryFilter/CountryFilter" import { ProposalTable } from "../../../proposals/components/ProposalTable/ProposalTable" import { SelectedProposal } from "../../../proposals/components/SelectedProposal/SelectedProposal" import { useStores } from "../../../store" import { ViewNavBar } from "../../../navigation/components/ViewNavBar/ViewNavBar" import { ViewContainer } from "../../../navigation/components/ViewContainer/ViewContainer" import { ViewSplit } from "../../../navigation/components/ViewSplit/ViewSplit" import { ViewSidebar } from "../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewContent } from "../../../navigation/components/ViewContent/ViewContent" import { darkBlue } from "../../../ui-kit/colors" import { Preset } from "../../../proposals/components/Preset/Preset" import { MysteriumVPN2Toast } from "../../../ui-kit/components/MysteriumVPN2Toast/MysteriumVPN2Toast" import { SwitchConnectView } from "./SwitchConnectView" import { ProposalSearch } from "./ProposalSearch" const Content = styled(ViewContent)` background: #fff; color: ${darkBlue}; ` const SideTop = styled.div<{ presetCount: number }>` box-sizing: border-box; height: ${(props) => props.presetCount * 30 + 24}px; padding: 12px; overflow: hidden; text-align: center; flex: 0 0 auto; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 12px 0; flex: 1 1 auto; height: 272px; display: flex; flex-direction: column; ` const NavContainer = styled.div` display: flex; flex-direction: row; align-items: center; padding-left: 80px; ` const NavActions = styled.div` margin-left: auto; ` const MainBottom = styled.div` margin-top: auto; width: 100%; ` export const ManualConnectView: React.FC = observer(function ManualConnectView() { const { proposals } = useStores() useEffect(() => { proposals.fetchAllProposalsForQuickSearchDebounced() }, []) return ( ) }) ================================================ FILE: src/app/views/consumer/Proposals/ProposalSearch.tsx ================================================ /** * Copyright (c) 2022 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useRef, useState } from "react" import Autosuggest, { ChangeEvent } from "react-autosuggest" import { observer } from "mobx-react-lite" import styled from "styled-components" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { faSearch, faTimes } from "@fortawesome/free-solid-svg-icons" import { UIProposal } from "../../../proposals/uiProposal" import { useStores } from "../../../store" import { darkBlue } from "../../../ui-kit/colors" import { Small } from "../../../ui-kit/typography" import { Flag } from "../../../location/components/Flag/Flag" import Timeout = NodeJS.Timeout const IconContainer = styled.div` width: 26px; height: 26px; &:hover { background: rgba(255, 255, 255, 0.2); } border-radius: 4px; display: flex; align-items: center; justify-content: center; font-size: 16px; ` const ProposalSearchContainer = styled.div` position: fixed; right: 48px; top: 48px; z-index: 10; & .react-autosuggest__container { } & .react-autosuggest__input { width: 300px; height: 30px; z-index: 10; } & .react-autosuggest__input--focused { } & .react-autosuggest__suggestions-list { list-style: none; padding: 0; margin: 0; } & .react-autosuggest__suggestions-container { display: none; background-color: #fff; color: ${darkBlue}; overflow: hidden; width: 306px; max-height: 280px; top: 35px; right: 0px; } & .react-autosuggest__suggestions-container--open { display: block; position: absolute; border: 1px solid #aaa; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; z-index: 2; } & .react-autosuggest__suggestion { cursor: pointer; padding: 10px 20px; } & .react-autosuggest__suggestion--highlighted { background-color: #ddd; } ` const SuggestionHeader = styled.div` height: 20px; display: flex; align-items: center; & > span { margin-left: 5px; } ` const filterProposalsAsync = ( proposals: UIProposal[], query: string, options = { maxResults: 5, chunkSize: 100 }, ): Promise => { return new Promise((resolve) => { if (query.length === 0) { return resolve([]) } const filtered: UIProposal[] = [] let i = 0 function doChunk() { let cnt = options.chunkSize while (cnt-- && i < proposals.length) { if (proposals[i].providerId.indexOf(query) !== -1) { filtered.push(proposals[i]) if (filtered.length >= options.maxResults) { resolve(filtered) return } } ++i } const workToDo = i < proposals.length if (workToDo) { setTimeout(doChunk, 1) // Give other routines time to process } else { resolve(filtered) } } doChunk() }) } export const ProposalSearch: React.FC = observer(function ProposalSearch() { const { proposals } = useStores() // Search box visibility const [visible, setVisible] = useState(false) const [lastRequestId, setLastRequestId] = useState(null) // Auto-suggest setup const autosuggestRef = useRef>(null) const [selection, setSelection] = useState("") const [suggestions, setSuggestions] = useState([]) const onSuggestionsFetchRequested = ({ value }: { value: string }) => { if (lastRequestId !== null) { clearTimeout(lastRequestId) } const requestId = setTimeout(async () => { const suggestions = await filterProposalsAsync(proposals.proposalsAllPresetsForQuickSearch, value.trim()) setSuggestions(suggestions) }, 500) setLastRequestId(requestId) } const onSuggestionsClearRequested = () => { setSuggestions([]) } const inputProps = { placeholder: "Find nodes...", value: selection, onChange: (event: React.FormEvent, params: ChangeEvent) => { setSelection(params.newValue) }, } const renderSuggestion = (s: UIProposal) => (
{s.ipType} {s.providerId}
) // Icons const closeAction = () => { setVisible(false) } const openAction = () => { proposals.prepareForQuickSearch() setVisible(true) setTimeout(() => { autosuggestRef?.current?.input?.focus() }, 50) } return ( <> { visible ? closeAction() : openAction() }} > {visible && ( <> { proposals.useQuickSearchSuggestion(suggestion) }} getSuggestionValue={(p: UIProposal) => p.providerId} renderSuggestion={renderSuggestion} /> )} ) }) ================================================ FILE: src/app/views/consumer/Proposals/QuickConnectView.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { observer } from "mobx-react-lite" import styled from "styled-components" import { ConnectionStatus } from "mysterium-vpn-js" import toast from "react-hot-toast" import Lottie from "react-lottie-player" import { CountryFilter } from "../../../proposals/components/CountryFilter/CountryFilter" import { useStores } from "../../../store" import { ViewNavBar } from "../../../navigation/components/ViewNavBar/ViewNavBar" import { ViewContainer } from "../../../navigation/components/ViewContainer/ViewContainer" import { ViewSplit } from "../../../navigation/components/ViewSplit/ViewSplit" import { ViewSidebar } from "../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewContent } from "../../../navigation/components/ViewContent/ViewContent" import { brand } from "../../../ui-kit/colors" import { Preset } from "../../../proposals/components/Preset/Preset" import { RippleButton } from "../../../ui-kit/components/Button/RippleButton" import { dismissibleToast } from "../../../ui-kit/components/dismissibleToast" import { MysteriumVPN2Toast } from "../../../ui-kit/components/MysteriumVPN2Toast/MysteriumVPN2Toast" import animationQuickConnect from "./animation_quick_connect.json" import { SwitchConnectView } from "./SwitchConnectView" const Sidebar = styled(ViewSidebar)` position: relative; ` const SideTop = styled.div<{ presetCount: number }>` box-sizing: border-box; height: ${(props) => props.presetCount * 30 + 24}px; padding: 12px; overflow: hidden; text-align: center; flex: 0 0 auto; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 12px 0; margin-bottom: 63px; flex: 1 1 auto; height: 272px; display: flex; flex-direction: column; z-index: 1; &:after { display: block; position: absolute; content: " "; width: 10px; height: 10px; background: #fff; transform: rotate(45deg); bottom: 59px; left: 110px; } ` const QuickConnectButtonContainer = styled.div` position: absolute; bottom: 0; box-sizing: border-box; width: 222px; height: 73px; line-height: 63px; background: ${brand}; ` const QuickConnectButton = styled(RippleButton)` width: 222px; height: 73px; padding-top: 10px; line-height: 63px; font-size: 18px; ` const NavContainer = styled.div` display: flex; flex-direction: row; align-items: center; padding-left: 80px; ` export const QuickConnectView: React.FC = observer(function QuickConnectView() { const { proposals, connection } = useStores() const handleConnectClick = async (): Promise => { if (connection.status === ConnectionStatus.NOT_CONNECTED) { try { return await connection.quickConnect() } catch (reason) { toast.error( dismissibleToast( <> Oops! Could not connect 😶
{reason}
, ), ) return } } return await connection.disconnect() } return ( Quick Connect
) }) ================================================ FILE: src/app/views/consumer/Proposals/SwitchConnectView.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { observer } from "mobx-react-lite" import React from "react" import { Link, useLocation } from "react-router-dom" import styled from "styled-components" import { useStores } from "../../../store" import { locations } from "../../../navigation/locations" import { brand } from "../../../ui-kit/colors" const Container = styled.div` height: 35px; display: flex; align-items: center; justify-content: center; ` const SwitchGroup = styled.div` display: flex; flex-direction: row; border: 1px solid ${brand}; border-radius: 5px; ` const SwitchLink = styled.div<{ active: boolean }>` height: 20px; color: #fff; user-drag: none; & a { display: block; padding: 0 15px; color: #fff; text-decoration: none; user-drag: none; } background: ${({ active }) => (active ? brand : "initial")}; line-height: 20px; ` export const SwitchConnectView: React.FC = observer(function SwitchConnectView() { const { config } = useStores() const location = useLocation() const manual = location.pathname == locations.proposalsManualConnect const quick = location.pathname == locations.proposalsQuickConnect return ( {!quick ? ( config.setQuickConnect(true)}> Quick Connect ) : ( Quick Connect )} {!manual ? ( config.setQuickConnect(false)}> Manual Connect ) : ( Manual Connect )} ) }) ================================================ FILE: src/app/views/consumer/Proposals/animation_quick_connect.json ================================================ {"v":"5.7.4","fr":29.9700012207031,"ip":0,"op":66.0000026882351,"w":1492,"h":1920,"nm":"1","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Слой-фигура 12","sr":1,"ks":{"o":{"a":0,"k":20,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-88,1276,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[347,-162],[432,-82]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":19,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.952940996955,0.952940996955,0.952940996955,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Фигура 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":48.81,"s":[0]},{"t":64.0000026067734,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":35,"s":[0]},{"t":48.8100019880721,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Слой-фигура 11","sr":1,"ks":{"o":{"a":0,"k":20,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[344,858,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[347,-162],[432,-82]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":19,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.952940996955,0.952940996955,0.952940996955,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Фигура 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":18.666,"s":[0]},{"t":37.0000015070409,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":2,"s":[0]},{"t":18.6662507602919,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Слой-фигура 10","sr":1,"ks":{"o":{"a":0,"k":20,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[214,1310,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[347,-162],[432,-82]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":19,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.952940996955,0.952940996955,0.952940996955,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Фигура 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":36,"s":[0]},{"t":47.0000019143492,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":26,"s":[0]},{"t":36.0000014663101,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Слой-фигура 9","sr":1,"ks":{"o":{"a":0,"k":20,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[214,1310,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[347,-162],[432,-82]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":19,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.952940996955,0.952940996955,0.952940996955,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Фигура 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":23.286,"s":[0]},{"t":39.0000015885026,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":9,"s":[0]},{"t":23.2862509484684,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Слой-фигура 8","sr":1,"ks":{"o":{"a":0,"k":20,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[746,960,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[347,-162],[432,-82]],"c":false},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":19,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.952940996955,0.952940996955,0.952940996955,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Фигура 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":52,"s":[0]},{"t":63.0000025660426,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":42,"s":[0]},{"t":52.0000021180034,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Обрезать контуры 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Слой-фигура 7","sr":1,"ks":{"o":{"a":0,"k":40,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[714,775.5,0],"ix":2,"l":2},"a":{"a":0,"k":[-394,125.5,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":48,"s":[0,0,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":56,"s":[50,50,100]},{"t":64.0000026067734,"s":[0,0,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[54,53],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.952940996955,0.952940996955,0.952940996955,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-394,125.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Слой-фигура 5","sr":1,"ks":{"o":{"a":0,"k":40,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[890,1107.5,0],"ix":2,"l":2},"a":{"a":0,"k":[-394,125.5,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":40,"s":[0,0,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":48,"s":[50,50,100]},{"t":56.0000022809268,"s":[0,0,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[54,53],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.952940996955,0.952940996955,0.952940996955,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-394,125.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Слой-фигура 4","sr":1,"ks":{"o":{"a":0,"k":40,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[886,663.5,0],"ix":2,"l":2},"a":{"a":0,"k":[-394,125.5,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":32,"s":[0,0,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":40,"s":[50,50,100]},{"t":48.0000019550801,"s":[0,0,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[54,53],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.952940996955,0.952940996955,0.952940996955,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-394,125.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Слой-фигура 3","sr":1,"ks":{"o":{"a":0,"k":40,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1112,845.5,0],"ix":2,"l":2},"a":{"a":0,"k":[-394,125.5,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":24,"s":[0,0,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":32,"s":[50,50,100]},{"t":40.0000016292334,"s":[0,0,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[54,53],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.952940996955,0.952940996955,0.952940996955,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-394,125.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Слой-фигура 1","sr":1,"ks":{"o":{"a":0,"k":40,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[449,741.5,0],"ix":2,"l":2},"a":{"a":0,"k":[-394,125.5,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":8,"s":[0,0,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":16,"s":[50,50,100]},{"t":24.00000097754,"s":[0,0,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[54,53],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.952940996955,0.952940996955,0.952940996955,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-394,125.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"Слой-фигура 6","sr":1,"ks":{"o":{"a":0,"k":40,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[306,1081.5,0],"ix":2,"l":2},"a":{"a":0,"k":[-394,125.5,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.34,0.34,0.34],"y":[1,1,1]},"o":{"x":[0.66,0.66,0.66],"y":[0,0,0]},"t":8,"s":[50,50,100]},{"t":16.0000006516934,"s":[0,0,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[54,53],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.952940996955,0.952940996955,0.952940996955,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-394,125.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Эллипс 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"Кривые Слой 2","sr":1,"ks":{"o":{"a":0,"k":50,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[692,955.5,0],"ix":2,"l":2},"a":{"a":0,"k":[820.543,455.984,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.125,7.826],[0,0],[-6.747,0],[0,0],[-2.622,-2.609],[0,0],[5.062,-5.032],[0,0]],"o":[[0,0],[-3.186,-5.963],[0,0],[3.562,-0.187],[0,0],[5.062,5.032],[0,0],[-6.37,6.336]],"v":[[794.225,334.294],[730.687,214.292],[738.561,201.062],[748.68,200.876],[758.426,204.789],[843.704,290.318],[843.704,308.766],[815.216,337.275]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[5.247,5.216],[0,0],[-3.935,5.218],[0,0],[-4.498,-8.572],[0,0],[3.934,-3.913],[0,0]],"o":[[0,0],[-4.689,-4.659],[0,0],[5.808,-7.639],[0,0],[2.622,5.031],[0,0],[-5.248,5.216]],"v":[[715.13,418.894],[687.768,391.314],[686.641,374.17],[735.562,310.442],[757.676,312.306],[781.857,357.773],[779.608,373.053],[734.063,418.894]],"c":true},"ix":2},"nm":"Контур 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[5.248,5.216],[0,0],[-2.436,5.032],[0,0],[-6.372,-2.794],[0,0],[-0.75,-4.287],[0,0],[2.999,-3.17],[0,0]],"o":[[0,0],[-3.937,-3.913],[0,0],[3.186,-6.15],[0,0],[3.934,1.676],[0,0],[0.75,4.286],[0,0],[-5.437,5.216]],"v":[[427.615,418.894],[357.144,348.083],[354.707,332.989],[359.393,323.673],[376.449,317.523],[465.104,355.351],[472.788,364.854],[475.972,381.065],[472.411,392.806],[446.547,418.894]],"c":true},"ix":2},"nm":"Контур 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[3.374,3.356],[0,0],[-7.497,4.286],[0,0],[-0.188,-9.876],[0,0],[1.687,-1.678]],"o":[[0,0],[-5.998,-6.149],[0,0],[8.622,-5.031],[0,0],[0,2.424],[-3.561,3.356]],"v":[[143.288,422.059],[86.123,364.667],[88.934,344.17],[136.541,316.592],[156.409,327.586],[158.47,415.724],[155.846,422.059]],"c":true},"ix":2},"nm":"Контур 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[-2.062,0.559],[0,0],[-0.188,-8.758],[0,0],[4.124,-2.422],[0,0],[4.123,4.099],[0,0],[-5.061,5.032],[0,0]],"o":[[0,0],[8.434,-2.609],[0,0],[0.188,4.845],[0,0],[-5.248,2.981],[0,0],[-5.061,-5.032],[0,0],[1.312,-1.677]],"v":[[91.558,230.876],[136.541,216.528],[153.785,228.64],[154.909,272.429],[148.349,284.169],[66.818,331.313],[50.887,329.263],[30.457,308.766],[30.457,290.318],[86.31,234.23]],"c":true},"ix":2},"nm":"Контур 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[-5.061,-5.217],[0,0],[-0.563,-2.422],[0,0],[10.121,4.1],[0,0],[-0.75,5.777],[0,0],[-2.062,2.049],[0,0]],"o":[[0,0],[1.686,1.677],[0,0],[2.623,10.435],[0,0],[-5.436,-2.236],[0,0],[0.375,-2.795],[0,0],[5.248,-5.031]],"v":[[302.602,35.779],[313.286,46.401],[316.66,52.55],[347.585,178.701],[329.592,193.981],[266.616,167.707],[258.557,153.918],[271.864,51.618],[275.613,43.979],[283.86,35.593]],"c":true},"ix":2},"nm":"Контур 6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":6,"ty":"sh","ix":7,"ks":{"a":0,"k":{"i":[[-5.062,-5.217],[0,0],[-0.563,-2.235],[0,0],[3.371,-3.354],[0,0],[2.809,9.503],[0,0],[-3.376,3.54],[0,0]],"o":[[0,0],[1.687,1.678],[0,0],[1.309,4.658],[0,0],[-7.124,6.894],[0,0],[-1.499,-4.658],[0,0],[5.248,-5.031]],"v":[[590.117,35.779],[594.428,40.065],[597.8,46.028],[606.987,80.501],[603.425,93.358],[554.131,140.875],[532.39,135.285],[520.395,96.898],[523.58,83.669],[571.374,35.593]],"c":true},"ix":2},"nm":"Контур 7","mn":"ADBE Vector Shape - Group","hd":false},{"ind":7,"ty":"sh","ix":8,"ks":{"a":0,"k":{"i":[[1.499,5.777],[0,0],[-7.12,-7.081],[0,0],[11.618,-0.373],[0,0]],"o":[[0,0],[-2.622,-9.69],[0,0],[8.061,8.198],[0,0],[-6.183,0.186]],"v":[[653.841,171.434],[637.348,109.197],[653.841,99.694],[711.758,157.832],[702.762,180.192],[666.962,181.124]],"c":true},"ix":2},"nm":"Контур 8","mn":"ADBE Vector Shape - Group","hd":false},{"ind":8,"ty":"sh","ix":9,"ks":{"a":0,"k":{"i":[[-6.371,0.186],[0,0],[-2.249,-4.472],[0,0],[2.998,-4.099],[0,0],[5.621,5.59],[0,0],[-0.56,4.1],[0,0]],"o":[[0,0],[5.061,-0.186],[0,0],[2.435,4.472],[0,0],[-4.871,6.336],[0,0],[-2.999,-2.981],[0,0],[0.936,-6.522]],"v":[[668.649,202.925],[691.326,202.366],[703.321,209.447],[732.936,265.535],[731.814,279.697],[673.333,355.909],[653.468,357.214],[641.283,344.915],[637.535,333.735],[655.904,214.292]],"c":true},"ix":2},"nm":"Контур 9","mn":"ADBE Vector Shape - Group","hd":false},{"ind":9,"ty":"sh","ix":10,"ks":{"a":0,"k":{"i":[[-5.998,2.236],[0,0],[-3.562,-3.728],[0,0],[5.057,-5.218],[0,0],[2.063,10.249],[0,0]],"o":[[0,0],[4.875,-1.864],[0,0],[5.062,5.218],[0,0],[-7.497,7.454],[0,0],[-1.122,-6.709]],"v":[[486.655,264.417],[511.208,255.287],[525.266,258.455],[556.38,290.318],[556.194,308.766],[513.271,351.81],[490.966,345.102],[478.221,279.511]],"c":true},"ix":2},"nm":"Контур 10","mn":"ADBE Vector Shape - Group","hd":false},{"ind":10,"ty":"sh","ix":11,"ks":{"a":0,"k":{"i":[[-6.375,-2.796],[0,0],[-0.75,-4.471],[0,0],[7.684,3.353],[0,0],[-3.373,6.708],[0,0]],"o":[[0,0],[4.125,1.677],[0,0],[1.685,8.198],[0,0],[-6.935,-2.981],[0,0],[3.184,-6.335]],"v":[[409.813,250.815],[447.484,266.467],[455.358,276.156],[462.478,313.052],[448.047,324.605],[387.507,298.703],[380.947,280.815],[392.943,257.15]],"c":true},"ix":2},"nm":"Контур 11","mn":"ADBE Vector Shape - Group","hd":false},{"ind":11,"ty":"sh","ix":12,"ks":{"a":0,"k":{"i":[[8.247,3.54],[0,0],[0.936,3.913],[0,0],[-7.122,-7.08],[0,0],[0.377,-3.726],[0,0]],"o":[[0,0],[-3.936,-1.676],[0,0],[-2.436,-9.689],[0,0],[2.626,2.795],[0,0],[-0.75,9.131]],"v":[[403.251,224.355],[385.258,216.9],[377.574,207.957],[354.332,113.669],[371.013,104.352],[421.431,154.85],[425.179,165.098],[421.431,213.174]],"c":true},"ix":2},"nm":"Контур 12","mn":"ADBE Vector Shape - Group","hd":false},{"ind":12,"ty":"sh","ix":13,"ks":{"a":0,"k":{"i":[[6.371,-2.422],[0,0],[3.185,1.304],[0,0],[-0.376,5.777],[0,0],[-2.249,2.237],[0,0],[-2.999,-9.504],[0,0]],"o":[[0,0],[-3.189,1.118],[0,0],[-5.248,-2.236],[0,0],[0.187,-3.168],[0,0],[6.934,-7.081],[0,0],[2.249,6.708]],"v":[[525.079,226.777],[468.852,247.647],[459.106,247.461],[450.11,243.733],[442.049,230.503],[447.297,164.54],[451.046,156.34],[484.969,122.241],[506.901,127.645],[532.763,210.565]],"c":true},"ix":2},"nm":"Контур 13","mn":"ADBE Vector Shape - Group","hd":false},{"ind":13,"ty":"sh","ix":14,"ks":{"a":0,"k":{"i":[[6.375,-2.235],[0,0],[2.249,7.267],[0,0],[-3.562,3.354],[0,0],[-1.685,-5.963],[0,0]],"o":[[0,0],[-7.12,2.608],[0,0],[-1.499,-4.658],[0,0],[4.307,-4.286],[0,0],[1.686,6.522]],"v":[[623.853,189.881],[570.247,209.82],[553.005,201.435],[548.32,186.527],[551.696,173.297],[605.488,121.309],[618.791,125.036],[631.913,174.229]],"c":true},"ix":2},"nm":"Контур 14","mn":"ADBE Vector Shape - Group","hd":false},{"ind":14,"ty":"sh","ix":15,"ks":{"a":0,"k":{"i":[[-10.682,-4.472],[0,0],[3.374,-6.895],[0,0],[6.372,6.335],[0,0],[0.561,1.678],[0,0]],"o":[[0,0],[7.122,2.982],[0,0],[-4.123,8.012],[0,0],[-1.312,-1.305],[0,0],[-4.123,-10.807]],"v":[[292.293,201.994],[365.204,232.18],[371.951,250.255],[342.524,308.766],[321.345,312.12],[304.851,295.536],[301.853,290.877],[275.05,218.764]],"c":true},"ix":2},"nm":"Контур 15","mn":"ADBE Vector Shape - Group","hd":false},{"ind":15,"ty":"sh","ix":16,"ks":{"a":0,"k":{"i":[[-8.809,-2.795],[0,0],[6.747,-6.894],[0,0],[0.187,7.08],[0,0]],"o":[[0,0],[9.371,3.167],[0,0],[-5.06,5.03],[0,0],[-0.187,-9.317]],"v":[[194.644,278.206],[252.934,297.586],[258.182,319.2],[193.144,384.419],[179.275,379.016],[177.213,291.25]],"c":true},"ix":2},"nm":"Контур 16","mn":"ADBE Vector Shape - Group","hd":false},{"ind":16,"ty":"sh","ix":17,"ks":{"a":0,"k":{"i":[[-2.436,-6.522],[0,0],[8.247,2.795],[0,0],[0.187,5.59],[0,0],[-5.622,1.863],[0,0]],"o":[[0,0],[2.999,8.012],[0,0],[-5.247,-1.678],[0,0],[-0.188,-5.776],[0,0],[6.748,-2.05]],"v":[[243,196.031],[267.553,261.995],[254.621,275.225],[184.897,252.119],[175.901,240.007],[175.339,214.292],[184.522,201.435],[226.694,188.018]],"c":true},"ix":2},"nm":"Контур 17","mn":"ADBE Vector Shape - Group","hd":false},{"ind":17,"ty":"sh","ix":18,"ks":{"a":0,"k":{"i":[[4.873,-1.491],[0,0],[-5.435,5.404],[0,0],[1.125,-8.199],[0,0]],"o":[[0,0],[-7.31,2.236],[0,0],[5.81,-5.963],[0,0],[-0.562,5.217]],"v":[[227.444,164.912],[150.411,189.323],[142.913,177.211],[228.943,90.936],[243.749,98.203],[236.44,154.105]],"c":true},"ix":2},"nm":"Контур 18","mn":"ADBE Vector Shape - Group","hd":false},{"ind":18,"ty":"sh","ix":19,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-8.996,3.355],[0,0],[1.686,-10.062],[0,0],[7.686,7.639]],"o":[[0,0],[-6.561,-6.708],[0,0],[9.373,-3.54],[0,0],[-1.69,10.621],[0,0]],"v":[[588.618,291.809],[555.817,258.082],[560.692,236.652],[613.358,216.9],[630.977,231.249],[621.231,294.79],[598.737,302.058]],"c":true},"ix":2},"nm":"Контур 19","mn":"ADBE Vector Shape - Group","hd":false},{"ind":19,"ty":"sh","ix":20,"ks":{"a":0,"k":{"i":[[9.369,9.317],[0,0],[2.999,0],[2.063,-2.049],[0,0],[5.248,5.218],[0,0],[4.124,-4.099],[0,0],[-9.371,-9.317],[0,0],[-4.123,4.099],[0,0],[-5.248,-5.216],[0,0],[-2.998,0],[-2.063,2.048],[0,0],[-5.248,-5.216],[0,0],[-2.999,0],[-2.063,2.047],[0,0]],"o":[[0,0],[-2.063,-2.049],[-2.999,0],[0,0],[-5.252,5.218],[0,0],[-4.123,-4.099],[0,0],[-9.371,9.317],[0,0],[4.123,4.099],[0,0],[5.248,-5.216],[0,0],[2.062,2.048],[2.999,0],[0,0],[5.248,-5.216],[0,0],[2.058,2.047],[2.998,0],[0,0],[9.183,-9.13]],"v":[[866.95,282.678],[588.618,3.17],[580.744,0.002],[572.873,3.17],[446.362,130.253],[427.615,130.253],[301.103,3.17],[285.546,3.17],[7.028,282.492],[7.028,316.219],[141.602,451.316],[157.158,451.316],[283.672,324.231],[302.414,324.231],[429.115,451.13],[436.988,454.296],[444.862,451.13],[571.561,324.231],[590.303,324.231],[716.82,451.316],[724.69,454.482],[732.563,451.316],[867.136,316.219]],"c":true},"ix":2},"nm":"Контур 20","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[437,227.242],"ix":2},"a":{"a":0,"k":[437,227.242],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 2","np":20,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[436.999,227.242],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Группа 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3896.00015868733,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"1st loop","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":50,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[746,960,0],"ix":2,"l":2},"a":{"a":0,"k":[746,960,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1492,"h":1920,"ip":0,"op":3896.00015868733,"st":0,"bm":0}],"markers":[]} ================================================ FILE: src/app/views/consumer/Referral/ReferralView.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useEffect } from "react" import { observer } from "mobx-react-lite" import styled from "styled-components" import { faCircleNotch } from "@fortawesome/free-solid-svg-icons" import { faTwitter, faFacebook } from "@fortawesome/free-brands-svg-icons" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { shell } from "electron" import { useStores } from "../../../store" import { Clipboard } from "../../../ui-kit/components/Clipboard/Clipboard" import { BrandButton } from "../../../ui-kit/components/Button/BrandButton" import { bg1 } from "../../../ui-kit/colors" const Container = styled.div` flex: 1; display: flex; flex-direction: column; background: ${bg1}; background-position: 0 -5px; overflow: hidden; align-items: center; justify-content: center; color: #fff; ` const Column = styled.div` display: flex; flex-direction: column; align-items: center; ` const Row = styled.div` display: flex; align-items: center; ` const Spinner = styled.div` margin-top: 50%; width: 100px; height: 100px; ` const IconSpin = styled(FontAwesomeIcon)` margin-left: 8px; animation: fa-spin 0.7s infinite linear; ` const TransparentButton = styled(BrandButton)` background: none; ` const MYST_APP_URL = "https://mysterium.network/apps" const shareMessage = (token: string): string => { return `Download Mysterium VPN App and use the referral code ${token} for free MYST` } const facebookLink = (token: string): JSX.Element => { const encodedQuote = encodeURI(shareMessage(token)) const encodedUrl = encodeURI(MYST_APP_URL) return ( shell.openExternal(`https://www.facebook.com/sharer/sharer.php?u=${encodedUrl}"e=${encodedQuote}`) } style={{ marginRight: "24px" }} > ) } const twitterLink = (token: string): JSX.Element => { const encoded = encodeURI(`${shareMessage(token)}\n\n${MYST_APP_URL}`) return ( shell.openExternal(`https://twitter.com/intent/tweet?text=${encoded}`)}> ) } const ReferralView: React.FC = observer(() => { const { referral, identity } = useStores() const { token, message, loading } = referral useEffect(() => { referral.generateToken() }, [identity.identity]) const header = !token || message ? ( <>

No referral token is available at this time.

Please try again later.

) : ( <>

Your referral code

{token}

{facebookLink(token)} {twitterLink(token)} ) return ( {loading ? ( ) : ( header )} ) }) export default ReferralView ================================================ FILE: src/app/views/consumer/Topup/TopupChooseMethod.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { observer } from "mobx-react-lite" import styled from "styled-components" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { useNavigate } from "react-router-dom" import { useStores } from "../../../store" import { BrandButton } from "../../../ui-kit/components/Button/BrandButton" import { ViewContainer } from "../../../navigation/components/ViewContainer/ViewContainer" import { ViewNavBar } from "../../../navigation/components/ViewNavBar/ViewNavBar" import { ViewSplit } from "../../../navigation/components/ViewSplit/ViewSplit" import { ViewSidebar } from "../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewContent } from "../../../navigation/components/ViewContent/ViewContent" import { IconWallet } from "../../../ui-kit/icons/IconWallet" import { Heading2, Small } from "../../../ui-kit/typography" import { brandLight, lightBlue } from "../../../ui-kit/colors" import { Toggle } from "../../../ui-kit/components/Toggle/Toggle" import { StepProgressBar } from "../../../ui-kit/components/StepProgressBar/StepProgressBar" import { CryptoAnimation } from "../../../ui-kit/components/CryptoAnimation/CryptoAnimation" import { PaymentMethod, PaymentMethodName } from "../../../payment/methods" import { topupSteps } from "../../../navigation/locations" const SideTop = styled.div` box-sizing: border-box; height: 136px; padding: 20px 15px; overflow: hidden; text-align: center; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 20px; flex: 1 0 auto; display: flex; flex-direction: column; ` const Title = styled(Heading2)` margin: 15px 0; ` const TitleDescription = styled(Small)`` const MethodToggle = styled(Toggle).attrs({ height: "52px", })` height: 52px; margin-bottom: 10px; font-size: 18px; line-height: 21px; font-weight: bold; ` export const TopupChooseMethod: React.FC = observer(() => { const { payment } = useStores() const navigate = useNavigate() const isOptionActive = (pm: PaymentMethod): boolean => { return payment.paymentMethod?.name === pm.name } const selectOption = (pm: PaymentMethod) => () => { payment.setPaymentMethod(pm) } const onNextClick = async () => { await payment.onPaymentMethodChosen() switch (payment.paymentMethod?.name) { case PaymentMethodName.COINGATE: navigate(topupSteps.coingate) break case PaymentMethodName.PAYPAL: navigate(topupSteps.paypal) break case PaymentMethodName.STRIPE: navigate(topupSteps.stripe) break case PaymentMethodName.MYST: navigate(topupSteps.myst) break } } return ( navigate(-1)}>
Top up your account Select payment method {payment.paymentMethods.map((pm) => { return ( {!!pm.icon && } {pm.displayText} ) })} Next
) }) ================================================ FILE: src/app/views/consumer/Topup/TopupFailed.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { observer } from "mobx-react-lite" import styled from "styled-components" import { faSadCry } from "@fortawesome/free-solid-svg-icons" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { useNavigate } from "react-router-dom" import { ViewContainer } from "../../../navigation/components/ViewContainer/ViewContainer" import { ViewNavBar } from "../../../navigation/components/ViewNavBar/ViewNavBar" import { ViewSplit } from "../../../navigation/components/ViewSplit/ViewSplit" import { ViewSidebar } from "../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewContent } from "../../../navigation/components/ViewContent/ViewContent" import { IconWallet } from "../../../ui-kit/icons/IconWallet" import { Heading2, Small } from "../../../ui-kit/typography" import { brandLight } from "../../../ui-kit/colors" import { BrandButton } from "../../../ui-kit/components/Button/BrandButton" import { StepProgressBar } from "../../../ui-kit/components/StepProgressBar/StepProgressBar" const SideTop = styled.div` box-sizing: border-box; height: 136px; padding: 20px 15px; overflow: hidden; text-align: center; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 20px; flex: 1 0 auto; display: flex; flex-direction: column; text-align: center; ` const TitleIcon = styled.div` margin-bottom: 15px; ` const Title = styled(Heading2)` margin-bottom: 15px; ` const TitleDescription = styled(Small)`` const Content = styled(ViewContent)` padding: 20px 15px; ` export const TopupFailed: React.FC = observer(() => { const navigate = useNavigate() const handleStartOver = () => { navigate(-3) } return (
Payment failed Order expired or there was another issue. Start over
) }) ================================================ FILE: src/app/views/consumer/Topup/TopupRoutes.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { observer } from "mobx-react-lite" import { Route, Routes as ReactRoutes } from "react-router-dom" import { topupSteps } from "../../../navigation/locations" import { CoingatePaymentOptions } from "./coingate/CoingatePaymentOptions" import { CoingateWaitingForPayment } from "./coingate/CoingateWaitingForPayment" import { TopupSuccess } from "./TopupSuccess" import { TopupFailed } from "./TopupFailed" import { TopupChooseMethod } from "./TopupChooseMethod" import { StripePaymentOptions } from "./stripe/StripePaymentOptions" import { StripeWaitingForPayment } from "./stripe/StripeWaitingForPayment" import { StripeOrderSummary } from "./stripe/StripeOrderSummary" import { CoingateOrderSummary } from "./coingate/CoingateOrderSummary" import { MystChooseChain } from "./myst/MystChooseChain" import { CoingateSelectAmount } from "./coingate/CoingateSelectAmount" import { StripeSelectAmount } from "./stripe/StripeSelectAmount" import { MystSelectAmount } from "./myst/MystSelectAmount" import { MystPolygonWaitingForPayment } from "./myst/MystPolygonWaitingForPayment" import { PaypalSelectAmount } from "./paypal/PaypalSelectAmount" import { PaypalPaymentOptions } from "./paypal/PaypalPaymentOptions" import { PaypalOrderSummary } from "./paypal/PaypalOrderSummary" import { PaypalWaitingForPayment } from "./paypal/PaypalWaitingForPayment" export const TopupRoutes: React.FC = observer(function TopupRoutes() { return ( } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> ) }) ================================================ FILE: src/app/views/consumer/Topup/TopupSuccess.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useEffect } from "react" import { observer } from "mobx-react-lite" import styled from "styled-components" import { faCheckCircle, faDownload } from "@fortawesome/free-solid-svg-icons" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { toast } from "react-hot-toast" import { IdentityRegistrationStatus } from "mysterium-vpn-js" import { useStores } from "../../../store" import { ViewContainer } from "../../../navigation/components/ViewContainer/ViewContainer" import { ViewNavBar } from "../../../navigation/components/ViewNavBar/ViewNavBar" import { ViewSplit } from "../../../navigation/components/ViewSplit/ViewSplit" import { ViewSidebar } from "../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewContent } from "../../../navigation/components/ViewContent/ViewContent" import { IconWallet } from "../../../ui-kit/icons/IconWallet" import { Heading2, Small } from "../../../ui-kit/typography" import { brandLight } from "../../../ui-kit/colors" import { BrandButton } from "../../../ui-kit/components/Button/BrandButton" import { locations } from "../../../navigation/locations" import { StepProgressBar } from "../../../ui-kit/components/StepProgressBar/StepProgressBar" const SideTop = styled.div` box-sizing: border-box; height: 136px; padding: 20px 15px; overflow: hidden; text-align: center; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 20px; flex: 1 0 auto; display: flex; flex-direction: column; text-align: center; ` const TitleIcon = styled.div` margin-bottom: 15px; ` const Title = styled(Heading2)` margin-bottom: 15px; ` const TitleDescription = styled(Small)`` const Content = styled(ViewContent)` padding: 20px 15px; ` export const TopupSuccess: React.FC = observer(() => { const { payment, identity, navigation } = useStores() const isRegistrationTopup = identity.identity?.registrationStatus != IdentityRegistrationStatus.Registered const handleAction = () => { if (isRegistrationTopup) { identity.register(identity.requireId()) navigation.push(locations.idRegistering) } else { navigation.goHome() } } useEffect(() => { toast.success(`${payment.appCurrency}s will be credited to your wallet within next 1-3 minutes.`) }, []) return (
Payment successful! {payment.appCurrency}s will be credited to your wallet within next 1-3 minutes. Continue
payment.downloadInvoice()}> Download invoice
) }) ================================================ FILE: src/app/views/consumer/Topup/coingate/CoingateOrderSummary.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useEffect, useState } from "react" import { observer } from "mobx-react-lite" import styled from "styled-components" import toast from "react-hot-toast" import { useNavigate } from "react-router-dom" import { shell } from "electron" import { useStores } from "../../../../store" import { BrandButton } from "../../../../ui-kit/components/Button/BrandButton" import { ViewContainer } from "../../../../navigation/components/ViewContainer/ViewContainer" import { ViewNavBar } from "../../../../navigation/components/ViewNavBar/ViewNavBar" import { ViewSplit } from "../../../../navigation/components/ViewSplit/ViewSplit" import { ViewSidebar } from "../../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewContent } from "../../../../navigation/components/ViewContent/ViewContent" import { IconWallet } from "../../../../ui-kit/icons/IconWallet" import { Heading2, Small } from "../../../../ui-kit/typography" import { brandLight } from "../../../../ui-kit/colors" import { StepProgressBar } from "../../../../ui-kit/components/StepProgressBar/StepProgressBar" import { topupSteps } from "../../../../navigation/locations" import { parseError } from "../../../../../shared/errors/parseError" import { dismissibleToast } from "../../../../ui-kit/components/dismissibleToast" import { OrderBreakdown } from "../common/OrderBreakdown" const SideTop = styled.div` box-sizing: border-box; height: 136px; padding: 20px 15px; overflow: hidden; text-align: center; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 20px; flex: 1 0 auto; display: flex; flex-direction: column; ` const Title = styled(Heading2)` margin: 15px 0; ` const TitleDescription = styled(Small)`` export const CoingateOrderSummary: React.FC = observer(() => { const { payment, connection } = useStores() const navigate = useNavigate() const [loading, setLoading] = useState(false) const handleNextClick = async () => { setLoading(() => true) try { if (!payment.order?.publicGatewayData?.paymentUrl) { return } setLoading(() => false) shell.openExternal(payment.order.publicGatewayData.paymentUrl) navigate("../" + topupSteps.coingateWaitingForPayment) } catch (err) { setLoading(() => false) const msg = parseError(err) toast.error(dismissibleToast({msg.humanReadable})) } } useEffect(() => { if (payment.taxCountry) { return } const countryFromLocation = connection.originalLocation?.country payment.setTaxCountry(countryFromLocation) }, []) return ( navigate(-1)}>
Top up your account Review your order summary. Continue to Pay
) }) ================================================ FILE: src/app/views/consumer/Topup/coingate/CoingatePaymentOptions.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useState } from "react" import { observer } from "mobx-react-lite" import styled from "styled-components" import { toast } from "react-hot-toast" import { Currency } from "mysterium-vpn-js" import { faExclamationTriangle } from "@fortawesome/free-solid-svg-icons" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { useNavigate } from "react-router-dom" import { useStores } from "../../../../store" import { BrandButton } from "../../../../ui-kit/components/Button/BrandButton" import { ViewContainer } from "../../../../navigation/components/ViewContainer/ViewContainer" import { ViewNavBar } from "../../../../navigation/components/ViewNavBar/ViewNavBar" import { ViewSplit } from "../../../../navigation/components/ViewSplit/ViewSplit" import { ViewSidebar } from "../../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewContent } from "../../../../navigation/components/ViewContent/ViewContent" import { IconWallet } from "../../../../ui-kit/icons/IconWallet" import { Heading2, Paragraph, Small } from "../../../../ui-kit/typography" import { brandLight } from "../../../../ui-kit/colors" import { isLightningAvailable } from "../../../../payment/currency" import { Checkbox } from "../../../../ui-kit/form-components/Checkbox/Checkbox" import { StepProgressBar } from "../../../../ui-kit/components/StepProgressBar/StepProgressBar" import { topupSteps } from "../../../../navigation/locations" import { CryptoAnimation } from "../../../../ui-kit/components/CryptoAnimation/CryptoAnimation" import { parseError } from "../../../../../shared/errors/parseError" import { logErrorMessage } from "../../../../../shared/log/log" import { dismissibleToast } from "../../../../ui-kit/components/dismissibleToast" import { Select } from "../../../../ui-kit/form-components/Select" import { SelectTaxCountry } from "../../../../payment/components/SelectTaxCountry/SelectTaxCountry" import { SelectTaxState } from "../../../../payment/components/SelectTaxState/SelectTaxState" import { OptionValue } from "../common/OptionValue" import { OptionLabel } from "../common/OptionLabel" const SideTop = styled.div` box-sizing: border-box; height: 136px; padding: 20px 15px; overflow: hidden; text-align: center; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 20px; flex: 1 0 auto; display: flex; flex-direction: column; ` const Title = styled(Heading2)` margin: 15px 0; ` const TitleDescription = styled(Small)`` const LightningCheckbox = styled(Checkbox)`` export const CoingatePaymentOptions: React.FC = observer(() => { const { payment } = useStores() const navigate = useNavigate() const [loading, setLoading] = useState(false) const setUseLightning = (): void => { const val = !payment.lightningNetwork payment.setLightningNetwork(val) } const handleNextClick = async () => { setLoading(() => true) try { await payment.createOrder() setLoading(() => false) navigate("../" + topupSteps.coingateOrderSummary) } catch (err) { setLoading(() => false) const msg = parseError(err) logErrorMessage("Could not create a payment order", msg) toast.error(dismissibleToast({msg.humanReadable})) } } const options = payment.paymentMethod?.gatewayData.currencies.filter((it) => it !== Currency.MYST) || [] const usPaymentOptionsOK = payment.taxCountry === "US" ? payment.taxState : true const paymentOptionsOK = !loading && payment.paymentCurrency && payment.taxCountry && usPaymentOptionsOK return ( navigate(-1)}>
Top up your account Select the payment options {payment.paymentCurrency !== Currency.MYST && ( <> Payment currency )} {isLightningAvailable(payment.paymentCurrency) && ( Use lightning network )} Tax residence: Country {payment.taxCountry === "US" && ( <> Tax residence: State )} {payment.paymentCurrency == Currency.MYST && ( {Currency.MYST} is currently only supported on the Ethereum network! )} Next
) }) ================================================ FILE: src/app/views/consumer/Topup/coingate/CoingateSelectAmount.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useEffect, useState } from "react" import { observer } from "mobx-react-lite" import styled from "styled-components" import { EntertainmentEstimateResponse } from "mysterium-vpn-js" import { useNavigate } from "react-router-dom" import { useStores } from "../../../../store" import { BrandButton } from "../../../../ui-kit/components/Button/BrandButton" import { ViewContainer } from "../../../../navigation/components/ViewContainer/ViewContainer" import { ViewNavBar } from "../../../../navigation/components/ViewNavBar/ViewNavBar" import { ViewSplit } from "../../../../navigation/components/ViewSplit/ViewSplit" import { ViewSidebar } from "../../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewContent } from "../../../../navigation/components/ViewContent/ViewContent" import { IconWallet } from "../../../../ui-kit/icons/IconWallet" import { Heading1, Heading2, Paragraph, Small } from "../../../../ui-kit/typography" import { brandLight, lightBlue } from "../../../../ui-kit/colors" import { Toggle } from "../../../../ui-kit/components/Toggle/Toggle" import { StepProgressBar } from "../../../../ui-kit/components/StepProgressBar/StepProgressBar" import { IconPlay } from "../../../../ui-kit/icons/IconPlay" import { IconMusic } from "../../../../ui-kit/icons/IconMusic" import { IconCloudDownload } from "../../../../ui-kit/icons/IconCloudDownload" import { IconDocument } from "../../../../ui-kit/icons/IconDocument" import { topupSteps } from "../../../../navigation/locations" const SideTop = styled.div` box-sizing: border-box; height: 136px; padding: 20px 15px; overflow: hidden; text-align: center; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 20px; flex: 1 0 auto; display: flex; flex-direction: column; ` const Title = styled(Heading2)` margin: 15px 0; ` const TitleDescription = styled(Small)`` const AmountSelect = styled.div` display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; ` const AmountToggle = styled(Toggle)` width: 85px; height: 63px; ` const Amount = styled(Heading2)` margin-bottom: 5px; ` const Currency = styled(Small)` opacity: 0.7; ` const Content = styled(ViewContent)` background: none; ` const EntertainmentBlocks = styled.div` display: grid; grid-template-columns: repeat(2, 1fr); gap: 15px; ` const EntertainmentBlock = styled.div` width: 179px; height: 235px; background: #ffffff12; color: #fff; display: flex; flex-direction: column; justify-content: center; align-items: center; text-align: center; border-radius: 10px; ` const BlockIcon = styled.div` margin: 5px auto 5px; font-size: 20px; color: ${brandLight}; ` const BlockMetric = styled(Heading1)`` const EntertainmentExplanation = styled(Paragraph)` margin: 5px auto; opacity: 0.7; ` export const CoingateSelectAmount: React.FC = observer(() => { const { payment } = useStores() const navigate = useNavigate() const isOptionActive = (amt: number) => { return payment.topUpAmountUSD == amt } const selectOption = (amt: number) => () => { payment.setTopupAmountUSD(amt) } const [estimates, setEstimates] = useState(undefined) useEffect(() => { if (payment.topUpAmountUSD) { payment.estimateEntertainment({ USD: payment.topUpAmountUSD }).then((res) => setEstimates(res)) } }, [payment.topUpAmountUSD]) const handleNextClick = async () => { navigate("../" + topupSteps.coingatePaymentOptions) } return ( navigate(-1)}>
Top up your account Select the desired amount in {payment.appFiatCurrency} {payment.orderOptions.map((opt) => (
{opt} {payment.appFiatCurrency}
))}
Next
{!!estimates && ( <> {estimates.videoMinutes}h Online video {estimates.musicMinutes}h Online music {estimates.trafficMb}GiB of data download {estimates.browsingMinutes}h Web browsing )}
) }) ================================================ FILE: src/app/views/consumer/Topup/coingate/CoingateWaitingForPayment.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useEffect } from "react" import { observer } from "mobx-react-lite" import styled from "styled-components" import CountDown from "react-countdown" import { useNavigate } from "react-router-dom" import { useStores } from "../../../../store" import { ViewContainer } from "../../../../navigation/components/ViewContainer/ViewContainer" import { ViewNavBar } from "../../../../navigation/components/ViewNavBar/ViewNavBar" import { ViewSplit } from "../../../../navigation/components/ViewSplit/ViewSplit" import { ViewSidebar } from "../../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewContent } from "../../../../navigation/components/ViewContent/ViewContent" import { IconWallet } from "../../../../ui-kit/icons/IconWallet" import { Heading2, Paragraph, Small } from "../../../../ui-kit/typography" import { brand, brandLight } from "../../../../ui-kit/colors" import { OrderStatus } from "../../../../payment/store" import { topupSteps } from "../../../../navigation/locations" import { StepProgressBar } from "../../../../ui-kit/components/StepProgressBar/StepProgressBar" import { Spinner } from "../../../../ui-kit/components/Spinner/Spinner" import { OrderBreakdown } from "../common/OrderBreakdown" import { LogoCoingate } from "./LogoCoingate" const SideTop = styled.div` box-sizing: border-box; height: 136px; padding: 20px 15px; overflow: hidden; text-align: center; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 20px; flex: 1 0 auto; display: flex; flex-direction: column; text-align: center; ` const TitleIcon = styled.div` margin-bottom: 15px; ` const Title = styled(Heading2)` margin-bottom: 15px; ` const TitleDescription = styled(Small)`` const Content = styled(ViewContent)` padding: 20px 15px; ` const PaymentCountDown = styled(Heading2)` height: 21px; margin-bottom: 15px; ` const PaymentAmount = styled.div` height: 21px; background: ${brand}; color: #fff; padding: 5px 10px; border-radius: 50px; margin-bottom: 15px; user-select: text; ` const PaymentExplanation = styled(Paragraph)` margin-bottom: auto; ` const LogoContainer = styled.div` height: 100px; display: flex; align-items: center; justify-content: center; overflow: hidden; ` const Loading = styled(Spinner)` margin: auto; ` export const CoingateWaitingForPayment: React.FC = observer(() => { const { payment } = useStores() const navigate = useNavigate() useEffect(() => { switch (payment.orderStatus) { case OrderStatus.SUCCESS: navigate("../" + topupSteps.success) break case OrderStatus.FAILED: navigate("../" + topupSteps.failed) break } }, [payment.orderStatus]) return ( navigate(-1)}>
Waiting for payment Complete payment transaction in the browser Payment is handled by our payment partner Coingate. {payment.orderExpiresAt && ( (
{props.minutes.toString().padStart(2, "0")}: {props.seconds.toString().padStart(2, "0")}
)} />
)} {payment.order?.payAmount} {payment.order?.payCurrency} Waiting for payment...
) }) ================================================ FILE: src/app/views/consumer/Topup/coingate/LogoCoingate.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" export const LogoCoingate: React.FC = () => ( ) ================================================ FILE: src/app/views/consumer/Topup/common/OptionLabel.tsx ================================================ /** * Copyright (c) 2022 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import styled from "styled-components" import React, { PropsWithChildren } from "react" import { Paragraph } from "../../../../ui-kit/typography" const Container = styled(Paragraph)` margin-bottom: 5px; text-align: left; font-size: 13px; ` export const OptionLabel: React.FC = ({ children }) => {children} ================================================ FILE: src/app/views/consumer/Topup/common/OptionValue.tsx ================================================ /** * Copyright (c) 2022 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import styled from "styled-components" import React, { PropsWithChildren } from "react" const Container = styled.div` margin-bottom: 15px; ` export const OptionValue: React.FC = ({ children }) => {children} ================================================ FILE: src/app/views/consumer/Topup/common/OrderBreakdown.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { observer } from "mobx-react-lite" import styled from "styled-components" import ReactTooltip from "react-tooltip" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { faQuestionCircle } from "@fortawesome/free-solid-svg-icons" import { useStores } from "../../../../store" import { Paragraph } from "../../../../ui-kit/typography" import { brandLight } from "../../../../ui-kit/colors" import { countryName } from "../../../../location/countries" const LineItem = styled(Paragraph)` border-bottom: 1px dashed #ddd; padding: 10px 0; text-align: left; ` const LineItemAmount = styled.span` float: right; font-weight: bold; ` const TooltipIcon = styled(FontAwesomeIcon).attrs({ icon: faQuestionCircle, })` margin-left: 10px; ` const Tooltip = styled(ReactTooltip).attrs({ effect: "solid", })` width: 200px; ` export const OrderBreakdown: React.FC = observer(() => { const { payment } = useStores() return ( <> {payment.order?.receiveMyst} {payment.appCurrency} {payment.order?.itemsSubTotal} {payment.order?.currency} {!!Number(payment.order?.taxSubTotal) && ( {countryName(payment.order?.country)} - {payment.order?.taxRate}% VAT {payment.order?.taxSubTotal} {payment.order?.currency} )} Total {payment.order?.orderTotal} {payment.order?.currency} {payment.order?.payCurrency !== payment.order?.currency && ( Pay by: {payment.order?.payAmount} {payment.order?.payCurrency} )} ) }) ================================================ FILE: src/app/views/consumer/Topup/myst/MystChooseChain.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { observer } from "mobx-react-lite" import styled from "styled-components" import { Currency } from "mysterium-vpn-js" import { useNavigate } from "react-router-dom" import { useStores } from "../../../../store" import { BrandButton } from "../../../../ui-kit/components/Button/BrandButton" import { ViewContainer } from "../../../../navigation/components/ViewContainer/ViewContainer" import { ViewNavBar } from "../../../../navigation/components/ViewNavBar/ViewNavBar" import { ViewSplit } from "../../../../navigation/components/ViewSplit/ViewSplit" import { ViewSidebar } from "../../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewContent } from "../../../../navigation/components/ViewContent/ViewContent" import { IconWallet } from "../../../../ui-kit/icons/IconWallet" import { Heading2, Small } from "../../../../ui-kit/typography" import { brandLight, lightBlue } from "../../../../ui-kit/colors" import { Toggle } from "../../../../ui-kit/components/Toggle/Toggle" import { StepProgressBar } from "../../../../ui-kit/components/StepProgressBar/StepProgressBar" import { MystChain } from "../../../../payment/store" import { topupSteps } from "../../../../navigation/locations" const SideTop = styled.div` box-sizing: border-box; height: 136px; padding: 20px 15px; overflow: hidden; text-align: center; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 20px; flex: 1 0 auto; display: flex; flex-direction: column; ` const Title = styled(Heading2)` margin: 15px 0; ` const TitleDescription = styled(Small)`` const MethodToggle = styled(Toggle).attrs({ height: "63px", })` height: 63px; margin-bottom: 10px; font-size: 18px; line-height: 21px; font-weight: bold; ` export const MystChooseChain: React.FC = observer(() => { const { payment } = useStores() const navigate = useNavigate() const isOptionActive = (chain: MystChain) => { return payment.chain == chain } const selectOption = (chain: MystChain) => () => { payment.setChain(chain) } const handleNextClick = async () => { switch (payment.chain) { case MystChain.POLYGON: navigate("../" + topupSteps.mystPolygonWaitingForPayment) break case MystChain.ETHEREUM: payment.setPaymentCurrency(Currency.MYST) navigate("../" + topupSteps.mystSelectAmount) break } } return ( navigate(-1)}>
Top up your account Choose chain for MYST deposit Polygon (MATIC) Ethereum Next
) }) ================================================ FILE: src/app/views/consumer/Topup/myst/MystPolygonWaitingForPayment.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" import { observer } from "mobx-react-lite" import styled from "styled-components" import CountDown from "react-countdown" import useInterval from "@use-it/interval" import { useNavigate } from "react-router-dom" import { reaction } from "mobx" import BigNumber from "bignumber.js" import { useStores } from "../../../../store" import { ViewContainer } from "../../../../navigation/components/ViewContainer/ViewContainer" import { ViewNavBar } from "../../../../navigation/components/ViewNavBar/ViewNavBar" import { ViewSplit } from "../../../../navigation/components/ViewSplit/ViewSplit" import { ViewSidebar } from "../../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewContent } from "../../../../navigation/components/ViewContent/ViewContent" import { IconWallet } from "../../../../ui-kit/icons/IconWallet" import { Heading2, Paragraph, Small } from "../../../../ui-kit/typography" import { brand, brandLight } from "../../../../ui-kit/colors" import { QR } from "../../../../ui-kit/components/QR/QR" import { StepProgressBar } from "../../../../ui-kit/components/StepProgressBar/StepProgressBar" import { Spinner } from "../../../../ui-kit/components/Spinner/Spinner" import { topupSteps } from "../../../../navigation/locations" const SideTop = styled.div` box-sizing: border-box; height: 136px; padding: 20px 15px; overflow: hidden; text-align: center; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 20px; flex: 1 0 auto; display: flex; flex-direction: column; text-align: center; ` const TitleIcon = styled.div` margin-bottom: 15px; ` const Title = styled(Heading2)` margin-bottom: 15px; ` const TitleDescription = styled(Small)`` const Content = styled(ViewContent)` padding: 20px 15px; ` const PaymentCountDown = styled(Heading2)` margin-bottom: 15px; ` const PaymentAmount = styled.div` background: ${brand}; color: #fff; padding: 5px 10px; border-radius: 50px; margin-bottom: 15px; user-select: text; ` const PaymentQR = styled.div` background: #fff; padding: 5px; margin-bottom: 15px; ` const PaymentAddress = styled.div` overflow-wrap: anywhere; overflow-y: scroll; user-select: text; opacity: 0.7; max-height: 60px; border: 1px solid #ffffff99; border-radius: 5px; padding: 10px; ` const PaymentExplanation = styled(Paragraph)` margin-top: auto; ` const Loading = styled(Spinner)` margin: auto; ` export const MystPolygonWaitingForPayment: React.FC = observer(() => { const { payment, identity } = useStores() const navigate = useNavigate() reaction( () => identity.identity?.balanceTokens, (cur, prev) => { if (new BigNumber(cur?.wei ?? 0).isGreaterThan(new BigNumber(prev?.wei ?? 0))) { navigate("../" + topupSteps.success) } }, ) useInterval(() => { payment.refreshBalance() }, 30_000) return ( navigate(-1)}>
Waiting for payment Deposit MYST by sending them directly to your payment channel Balance is being refreshed automatically while this screen is open (
{props.minutes.toString().padStart(2, "0")}: {props.seconds.toString().padStart(2, "0")}
)} />
{payment.order?.payAmount} {payment.order?.payCurrency} {identity.identity?.channelAddress} Send Polygon MYST to the address above.
) }) ================================================ FILE: src/app/views/consumer/Topup/myst/MystSelectAmount.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useEffect, useState } from "react" import { observer } from "mobx-react-lite" import styled from "styled-components" import { EntertainmentEstimateResponse } from "mysterium-vpn-js" import { useNavigate } from "react-router-dom" import { useStores } from "../../../../store" import { BrandButton } from "../../../../ui-kit/components/Button/BrandButton" import { ViewContainer } from "../../../../navigation/components/ViewContainer/ViewContainer" import { ViewNavBar } from "../../../../navigation/components/ViewNavBar/ViewNavBar" import { ViewSplit } from "../../../../navigation/components/ViewSplit/ViewSplit" import { ViewSidebar } from "../../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewContent } from "../../../../navigation/components/ViewContent/ViewContent" import { IconWallet } from "../../../../ui-kit/icons/IconWallet" import { Heading1, Heading2, Paragraph, Small } from "../../../../ui-kit/typography" import { brandLight, lightBlue } from "../../../../ui-kit/colors" import { Toggle } from "../../../../ui-kit/components/Toggle/Toggle" import { StepProgressBar } from "../../../../ui-kit/components/StepProgressBar/StepProgressBar" import { IconPlay } from "../../../../ui-kit/icons/IconPlay" import { IconMusic } from "../../../../ui-kit/icons/IconMusic" import { IconCloudDownload } from "../../../../ui-kit/icons/IconCloudDownload" import { IconDocument } from "../../../../ui-kit/icons/IconDocument" import { topupSteps } from "../../../../navigation/locations" const SideTop = styled.div` box-sizing: border-box; height: 136px; padding: 20px 15px; overflow: hidden; text-align: center; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 20px; flex: 1 0 auto; display: flex; flex-direction: column; ` const Title = styled(Heading2)` margin: 15px 0; ` const TitleDescription = styled(Small)`` const AmountSelect = styled.div` display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; ` const AmountToggle = styled(Toggle)` width: 85px; height: 63px; ` const Amount = styled(Heading2)` margin-bottom: 5px; ` const Currency = styled(Small)` opacity: 0.7; ` const Content = styled(ViewContent)` background: none; ` const EntertainmentBlocks = styled.div` display: grid; grid-template-columns: repeat(2, 1fr); gap: 15px; ` const EntertainmentBlock = styled.div` width: 179px; height: 235px; background: #ffffff12; color: #fff; display: flex; flex-direction: column; justify-content: center; align-items: center; text-align: center; border-radius: 10px; ` const BlockIcon = styled.div` margin: 5px auto 5px; font-size: 20px; color: ${brandLight}; ` const BlockMetric = styled(Heading1)`` const EntertainmentExplanation = styled(Paragraph)` margin: 5px auto; opacity: 0.7; ` export const MystSelectAmount: React.FC = observer(() => { const { payment } = useStores() const navigate = useNavigate() const isOptionActive = (amt: number) => { return payment.topUpAmountUSD == amt } const selectOption = (amt: number) => () => { payment.setTopupAmountUSD(amt) } const [estimates, setEstimates] = useState(undefined) useEffect(() => { if (payment.topUpAmountUSD) { payment.estimateEntertainment({ USD: payment.topUpAmountUSD }).then((res) => setEstimates(res)) } }, [payment.topUpAmountUSD]) const handleNextClick = async () => { navigate("../" + topupSteps.coingatePaymentOptions) } return ( navigate(-1)}>
Top up your account Select the desired amount in {payment.appFiatCurrency} {payment.orderOptions.map((opt: number) => (
{opt} {payment.appFiatCurrency}
))}
Next
{!!estimates && ( <> {estimates.videoMinutes}h Online video {estimates.musicMinutes}h Online music {estimates.trafficMb}GiB of data download {estimates.browsingMinutes}h Web browsing )}
) }) ================================================ FILE: src/app/views/consumer/Topup/paypal/LogoPaypal.tsx ================================================ /** * Copyright (c) 2022 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" export const LogoPaypal: React.FC = () => ( ) ================================================ FILE: src/app/views/consumer/Topup/paypal/PaypalOrderSummary.tsx ================================================ /** * Copyright (c) 2022 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useEffect, useState } from "react" import { observer } from "mobx-react-lite" import styled from "styled-components" import toast from "react-hot-toast" import { useNavigate } from "react-router-dom" import { useStores } from "../../../../store" import { BrandButton } from "../../../../ui-kit/components/Button/BrandButton" import { ViewContainer } from "../../../../navigation/components/ViewContainer/ViewContainer" import { ViewNavBar } from "../../../../navigation/components/ViewNavBar/ViewNavBar" import { ViewSplit } from "../../../../navigation/components/ViewSplit/ViewSplit" import { ViewSidebar } from "../../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewContent } from "../../../../navigation/components/ViewContent/ViewContent" import { IconWallet } from "../../../../ui-kit/icons/IconWallet" import { Heading2, Small } from "../../../../ui-kit/typography" import { brandLight } from "../../../../ui-kit/colors" import { StepProgressBar } from "../../../../ui-kit/components/StepProgressBar/StepProgressBar" import { topupSteps } from "../../../../navigation/locations" import { parseError } from "../../../../../shared/errors/parseError" import { dismissibleToast } from "../../../../ui-kit/components/dismissibleToast" import { OrderBreakdown } from "../common/OrderBreakdown" const SideTop = styled.div` box-sizing: border-box; height: 136px; padding: 20px 15px; overflow: hidden; text-align: center; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 20px; flex: 1 0 auto; display: flex; flex-direction: column; ` const Title = styled(Heading2)` margin: 15px 0; ` const TitleDescription = styled(Small)`` export const PaypalOrderSummary: React.FC = observer(() => { const { payment, connection } = useStores() const navigate = useNavigate() const [loading, setLoading] = useState(false) const handleNextClick = async () => { setLoading(() => true) try { await payment.openOrderSecureForm() setLoading(() => false) navigate("../" + topupSteps.paypalWaitingForPayment) } catch (err) { setLoading(() => false) const msg = parseError(err) toast.error(dismissibleToast({msg.humanReadable})) } } useEffect(() => { if (payment.taxCountry) { return } const countryFromLocation = connection.originalLocation?.country payment.setTaxCountry(countryFromLocation) }, []) return ( navigate(-1)}>
Top up your account Review your order summary. Continue to Pay
) }) ================================================ FILE: src/app/views/consumer/Topup/paypal/PaypalPaymentOptions.tsx ================================================ /** * Copyright (c) 2022 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useEffect, useState } from "react" import { observer } from "mobx-react-lite" import styled from "styled-components" import { faDollarSign, faEuroSign, faPoundSign, faQuestionCircle } from "@fortawesome/free-solid-svg-icons" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { toast } from "react-hot-toast" import { useNavigate } from "react-router-dom" import { useStores } from "../../../../store" import { BrandButton } from "../../../../ui-kit/components/Button/BrandButton" import { ViewContainer } from "../../../../navigation/components/ViewContainer/ViewContainer" import { ViewNavBar } from "../../../../navigation/components/ViewNavBar/ViewNavBar" import { ViewSplit } from "../../../../navigation/components/ViewSplit/ViewSplit" import { ViewSidebar } from "../../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewContent } from "../../../../navigation/components/ViewContent/ViewContent" import { IconWallet } from "../../../../ui-kit/icons/IconWallet" import { Heading2, Small } from "../../../../ui-kit/typography" import { brandLight, lightBlue } from "../../../../ui-kit/colors" import { Toggle } from "../../../../ui-kit/components/Toggle/Toggle" import { StepProgressBar } from "../../../../ui-kit/components/StepProgressBar/StepProgressBar" import { topupSteps } from "../../../../navigation/locations" import { parseError } from "../../../../../shared/errors/parseError" import { logErrorMessage } from "../../../../../shared/log/log" import { dismissibleToast } from "../../../../ui-kit/components/dismissibleToast" import { SelectTaxCountry } from "../../../../payment/components/SelectTaxCountry/SelectTaxCountry" import { SelectTaxState } from "../../../../payment/components/SelectTaxState/SelectTaxState" import { OptionLabel } from "../common/OptionLabel" import { OptionValue } from "../common/OptionValue" const SideTop = styled.div` box-sizing: border-box; height: 136px; padding: 20px 15px; overflow: hidden; text-align: center; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 20px; flex: 1 0 auto; display: flex; flex-direction: column; ` const Title = styled(Heading2)` margin: 15px 0; ` const TitleDescription = styled(Small)`` const OptionToggleGrid = styled.div` display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; margin-bottom: 20px; ` const OptionToggle = styled(Toggle)` width: 85px; height: 36px; ` export const PaypalPaymentOptions: React.FC = observer(() => { const { payment } = useStores() const navigate = useNavigate() const [loading, setLoading] = useState(false) const isOptionActive = (cur: string) => { return payment.paymentCurrency == cur } const selectOption = (cur: string) => () => { payment.setPaymentCurrency(cur) } const handleNextClick = async () => { setLoading(() => true) try { await payment.createOrder() setLoading(() => false) navigate("../" + topupSteps.paypalOrderSummary) } catch (err) { setLoading(() => false) const msg = parseError(err) logErrorMessage("Could not create a payment order", msg) toast.error(dismissibleToast({msg.humanReadable})) } } useEffect(() => { if (payment.currencies.length === 1) { payment.setPaymentCurrency(payment.currencies[0]) } }, [payment.currencies]) const currencyGridVisible = payment.currencies.length > 1 const usPaymentOptionsOK = payment.taxCountry === "US" ? payment.taxState : true const paymentOptionsOK = !loading && payment.paymentCurrency && payment.taxCountry && usPaymentOptionsOK return ( navigate(-1)}>
Top up your account Select the payment options {currencyGridVisible && ( <> Payment currency: {payment.currencies.map((opt) => { let currencyIcon = faQuestionCircle switch (opt) { case "EUR": currencyIcon = faEuroSign break case "USD": currencyIcon = faDollarSign break case "GBP": currencyIcon = faPoundSign break } return (
{opt}
) })}
)} Tax residence: Country {payment.taxCountry === "US" && ( <> Tax residence: State )} Next
) }) ================================================ FILE: src/app/views/consumer/Topup/paypal/PaypalSelectAmount.tsx ================================================ /** * Copyright (c) 2022 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useEffect, useState } from "react" import { observer } from "mobx-react-lite" import styled from "styled-components" import { EntertainmentEstimateResponse } from "mysterium-vpn-js" import { useNavigate } from "react-router-dom" import { useStores } from "../../../../store" import { BrandButton } from "../../../../ui-kit/components/Button/BrandButton" import { ViewContainer } from "../../../../navigation/components/ViewContainer/ViewContainer" import { ViewNavBar } from "../../../../navigation/components/ViewNavBar/ViewNavBar" import { ViewSplit } from "../../../../navigation/components/ViewSplit/ViewSplit" import { ViewSidebar } from "../../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewContent } from "../../../../navigation/components/ViewContent/ViewContent" import { IconWallet } from "../../../../ui-kit/icons/IconWallet" import { Heading1, Heading2, Paragraph, Small } from "../../../../ui-kit/typography" import { brandLight, lightBlue } from "../../../../ui-kit/colors" import { Toggle } from "../../../../ui-kit/components/Toggle/Toggle" import { StepProgressBar } from "../../../../ui-kit/components/StepProgressBar/StepProgressBar" import { IconPlay } from "../../../../ui-kit/icons/IconPlay" import { IconMusic } from "../../../../ui-kit/icons/IconMusic" import { IconCloudDownload } from "../../../../ui-kit/icons/IconCloudDownload" import { IconDocument } from "../../../../ui-kit/icons/IconDocument" import { topupSteps } from "../../../../navigation/locations" const SideTop = styled.div` box-sizing: border-box; height: 136px; padding: 20px 15px; overflow: hidden; text-align: center; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 20px; flex: 1 0 auto; display: flex; flex-direction: column; ` const Title = styled(Heading2)` margin: 15px 0; ` const TitleDescription = styled(Small)`` const AmountSelect = styled.div` display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; ` const AmountToggle = styled(Toggle)` width: 85px; height: 63px; ` const Amount = styled(Heading2)` margin-bottom: 5px; ` const Currency = styled(Small)` opacity: 0.7; ` const Content = styled(ViewContent)` background: none; ` const EntertainmentBlocks = styled.div` display: grid; grid-template-columns: repeat(2, 1fr); gap: 15px; ` const EntertainmentBlock = styled.div` width: 179px; height: 235px; background: #ffffff12; color: #fff; display: flex; flex-direction: column; justify-content: center; align-items: center; text-align: center; border-radius: 10px; ` const BlockIcon = styled.div` margin: 5px auto 5px; font-size: 20px; color: ${brandLight}; ` const BlockMetric = styled(Heading1)`` const EntertainmentExplanation = styled(Paragraph)` margin: 5px auto; opacity: 0.7; ` export const PaypalSelectAmount: React.FC = observer(() => { const { payment } = useStores() const navigate = useNavigate() const isOptionActive = (amt: number) => { return payment.topUpAmountUSD == amt } const selectOption = (amt: number) => () => { payment.setTopupAmountUSD(amt) } const [estimates, setEstimates] = useState(undefined) useEffect(() => { if (payment.topUpAmountUSD) { payment.estimateEntertainment({ USD: payment.topUpAmountUSD }).then((res) => setEstimates(res)) } }, [payment.topUpAmountUSD]) const handleNextClick = async () => { navigate("../" + topupSteps.paypalPaymentOptions) } return ( navigate(-1)}>
Top up your account Select the desired amount in {payment.appFiatCurrency} {payment.orderOptions.map((opt) => (
{opt} {payment.appFiatCurrency}
))}
Next
{!!estimates && ( <> {estimates.videoMinutes}h Online video {estimates.musicMinutes}h Online music {estimates.trafficMb}GiB of data download {estimates.browsingMinutes}h Web browsing )}
) }) ================================================ FILE: src/app/views/consumer/Topup/paypal/PaypalWaitingForPayment.tsx ================================================ /** * Copyright (c) 2022 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useEffect } from "react" import { observer } from "mobx-react-lite" import styled from "styled-components" import { useNavigate } from "react-router-dom" import { useStores } from "../../../../store" import { ViewContainer } from "../../../../navigation/components/ViewContainer/ViewContainer" import { ViewNavBar } from "../../../../navigation/components/ViewNavBar/ViewNavBar" import { ViewSplit } from "../../../../navigation/components/ViewSplit/ViewSplit" import { ViewSidebar } from "../../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewContent } from "../../../../navigation/components/ViewContent/ViewContent" import { IconWallet } from "../../../../ui-kit/icons/IconWallet" import { Heading2, Paragraph, Small } from "../../../../ui-kit/typography" import { brand, brandLight } from "../../../../ui-kit/colors" import { OrderStatus } from "../../../../payment/store" import { topupSteps } from "../../../../navigation/locations" import { StepProgressBar } from "../../../../ui-kit/components/StepProgressBar/StepProgressBar" import { Spinner } from "../../../../ui-kit/components/Spinner/Spinner" import { OrderBreakdown } from "../common/OrderBreakdown" import { LogoPaypal } from "./LogoPaypal" const SideTop = styled.div` box-sizing: border-box; height: 136px; padding: 20px 15px; overflow: hidden; text-align: center; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 20px; flex: 1 0 auto; display: flex; flex-direction: column; text-align: center; ` const TitleIcon = styled.div` margin-bottom: 15px; ` const Title = styled(Heading2)` margin-bottom: 15px; ` const TitleDescription = styled(Small)`` const Content = styled(ViewContent)` padding: 20px 15px; ` const PaymentAmount = styled.div` background: ${brand}; color: #fff; padding: 5px 10px; border-radius: 50px; margin-bottom: 15px; user-select: text; ` const Loading = styled(Spinner)` margin: auto; ` const LogoContainer = styled.div` height: 100px; display: flex; align-items: center; justify-content: center; overflow: hidden; ` const PaymentExplanation = styled(Paragraph)` margin-bottom: auto; ` export const PaypalWaitingForPayment: React.FC = observer(() => { const { payment } = useStores() const navigate = useNavigate() useEffect(() => { switch (payment.orderStatus) { case OrderStatus.SUCCESS: navigate("../" + topupSteps.success) break case OrderStatus.FAILED: navigate("../" + topupSteps.failed) break } }, [payment.orderStatus]) return ( navigate(-1)}>
Waiting for payment Please complete the payment in the popup window. Payment is handled by our payment partner Paypal.
We do not store any card details.
{payment.order?.payAmount} {payment.order?.payCurrency} Waiting for payment...
) }) ================================================ FILE: src/app/views/consumer/Topup/stripe/LogoStripe.tsx ================================================ /** * Copyright (c) 2022 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from "react" export const LogoStripe: React.FC = () => ( ) ================================================ FILE: src/app/views/consumer/Topup/stripe/StripeOrderSummary.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useEffect, useState } from "react" import { observer } from "mobx-react-lite" import styled from "styled-components" import toast from "react-hot-toast" import { useNavigate } from "react-router-dom" import { useStores } from "../../../../store" import { BrandButton } from "../../../../ui-kit/components/Button/BrandButton" import { ViewContainer } from "../../../../navigation/components/ViewContainer/ViewContainer" import { ViewNavBar } from "../../../../navigation/components/ViewNavBar/ViewNavBar" import { ViewSplit } from "../../../../navigation/components/ViewSplit/ViewSplit" import { ViewSidebar } from "../../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewContent } from "../../../../navigation/components/ViewContent/ViewContent" import { IconWallet } from "../../../../ui-kit/icons/IconWallet" import { Heading2, Small } from "../../../../ui-kit/typography" import { brandLight } from "../../../../ui-kit/colors" import { StepProgressBar } from "../../../../ui-kit/components/StepProgressBar/StepProgressBar" import { topupSteps } from "../../../../navigation/locations" import { parseError } from "../../../../../shared/errors/parseError" import { dismissibleToast } from "../../../../ui-kit/components/dismissibleToast" import { OrderBreakdown } from "../common/OrderBreakdown" const SideTop = styled.div` box-sizing: border-box; height: 136px; padding: 20px 15px; overflow: hidden; text-align: center; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 20px; flex: 1 0 auto; display: flex; flex-direction: column; ` const Title = styled(Heading2)` margin: 15px 0; ` const TitleDescription = styled(Small)`` export const StripeOrderSummary: React.FC = observer(() => { const { payment, connection } = useStores() const navigate = useNavigate() const [loading, setLoading] = useState(false) const handleNextClick = async () => { setLoading(() => true) try { await payment.openOrderSecureForm() setLoading(() => false) navigate("../" + topupSteps.stripeWaitingForPayment) } catch (err) { setLoading(() => false) const msg = parseError(err) toast.error(dismissibleToast({msg.humanReadable})) } } useEffect(() => { if (payment.taxCountry) { return } const countryFromLocation = connection.originalLocation?.country payment.setTaxCountry(countryFromLocation) }, []) return ( navigate(-1)}>
Top up your account Review your order summary. Continue to Pay
) }) ================================================ FILE: src/app/views/consumer/Topup/stripe/StripePaymentOptions.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useEffect, useState } from "react" import { observer } from "mobx-react-lite" import styled from "styled-components" import { faDollarSign, faEuroSign, faPoundSign, faQuestionCircle } from "@fortawesome/free-solid-svg-icons" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { toast } from "react-hot-toast" import { useNavigate } from "react-router-dom" import { useStores } from "../../../../store" import { BrandButton } from "../../../../ui-kit/components/Button/BrandButton" import { ViewContainer } from "../../../../navigation/components/ViewContainer/ViewContainer" import { ViewNavBar } from "../../../../navigation/components/ViewNavBar/ViewNavBar" import { ViewSplit } from "../../../../navigation/components/ViewSplit/ViewSplit" import { ViewSidebar } from "../../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewContent } from "../../../../navigation/components/ViewContent/ViewContent" import { IconWallet } from "../../../../ui-kit/icons/IconWallet" import { Heading2, Small } from "../../../../ui-kit/typography" import { brandLight, lightBlue } from "../../../../ui-kit/colors" import { Toggle } from "../../../../ui-kit/components/Toggle/Toggle" import { StepProgressBar } from "../../../../ui-kit/components/StepProgressBar/StepProgressBar" import { topupSteps } from "../../../../navigation/locations" import { parseError } from "../../../../../shared/errors/parseError" import { logErrorMessage } from "../../../../../shared/log/log" import { dismissibleToast } from "../../../../ui-kit/components/dismissibleToast" import { SelectTaxCountry } from "../../../../payment/components/SelectTaxCountry/SelectTaxCountry" import { SelectTaxState } from "../../../../payment/components/SelectTaxState/SelectTaxState" import { OptionLabel } from "../common/OptionLabel" import { OptionValue } from "../common/OptionValue" const SideTop = styled.div` box-sizing: border-box; height: 136px; padding: 20px 15px; overflow: hidden; text-align: center; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 20px; flex: 1 0 auto; display: flex; flex-direction: column; ` const Title = styled(Heading2)` margin: 15px 0; ` const TitleDescription = styled(Small)`` const OptionToggleGrid = styled.div` display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; margin-bottom: 20px; ` const OptionToggle = styled(Toggle)` width: 85px; height: 36px; ` export const StripePaymentOptions: React.FC = observer(() => { const { payment } = useStores() const navigate = useNavigate() const [loading, setLoading] = useState(false) const isOptionActive = (cur: string) => { return payment.paymentCurrency == cur } const selectOption = (cur: string) => () => { payment.setPaymentCurrency(cur) } const handleNextClick = async () => { setLoading(() => true) try { await payment.createOrder() setLoading(() => false) navigate("../" + topupSteps.stripeOrderSummary) } catch (err) { setLoading(() => false) const msg = parseError(err) logErrorMessage("Could not create a payment order", msg) toast.error(dismissibleToast({msg.humanReadable})) } } useEffect(() => { if (payment.currencies.length === 1) { payment.setPaymentCurrency(payment.currencies[0]) } }, [payment.currencies]) const currencyGridVisible = payment.currencies.length > 1 const usPaymentOptionsOK = payment.taxCountry === "US" ? payment.taxState : true const paymentOptionsOK = !loading && payment.paymentCurrency && payment.taxCountry && usPaymentOptionsOK return ( navigate(-1)}>
Top up your account Select the payment options {currencyGridVisible && ( <> Payment currency: {payment.currencies.map((opt) => { let currencyIcon = faQuestionCircle switch (opt) { case "EUR": currencyIcon = faEuroSign break case "USD": currencyIcon = faDollarSign break case "GBP": currencyIcon = faPoundSign break } return (
{opt}
) })}
)} Tax residence: Country {payment.taxCountry === "US" && ( <> Tax residence: State )} Next
) }) ================================================ FILE: src/app/views/consumer/Topup/stripe/StripeSelectAmount.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useEffect, useState } from "react" import { observer } from "mobx-react-lite" import styled from "styled-components" import { EntertainmentEstimateResponse } from "mysterium-vpn-js" import { useNavigate } from "react-router-dom" import { useStores } from "../../../../store" import { BrandButton } from "../../../../ui-kit/components/Button/BrandButton" import { ViewContainer } from "../../../../navigation/components/ViewContainer/ViewContainer" import { ViewNavBar } from "../../../../navigation/components/ViewNavBar/ViewNavBar" import { ViewSplit } from "../../../../navigation/components/ViewSplit/ViewSplit" import { ViewSidebar } from "../../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewContent } from "../../../../navigation/components/ViewContent/ViewContent" import { IconWallet } from "../../../../ui-kit/icons/IconWallet" import { Heading1, Heading2, Paragraph, Small } from "../../../../ui-kit/typography" import { brandLight, lightBlue } from "../../../../ui-kit/colors" import { Toggle } from "../../../../ui-kit/components/Toggle/Toggle" import { StepProgressBar } from "../../../../ui-kit/components/StepProgressBar/StepProgressBar" import { IconPlay } from "../../../../ui-kit/icons/IconPlay" import { IconMusic } from "../../../../ui-kit/icons/IconMusic" import { IconCloudDownload } from "../../../../ui-kit/icons/IconCloudDownload" import { IconDocument } from "../../../../ui-kit/icons/IconDocument" import { topupSteps } from "../../../../navigation/locations" const SideTop = styled.div` box-sizing: border-box; height: 136px; padding: 20px 15px; overflow: hidden; text-align: center; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 20px; flex: 1 0 auto; display: flex; flex-direction: column; ` const Title = styled(Heading2)` margin: 15px 0; ` const TitleDescription = styled(Small)`` const AmountSelect = styled.div` display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; ` const AmountToggle = styled(Toggle)` width: 85px; height: 63px; ` const Amount = styled(Heading2)` margin-bottom: 5px; ` const Currency = styled(Small)` opacity: 0.7; ` const Content = styled(ViewContent)` background: none; ` const EntertainmentBlocks = styled.div` display: grid; grid-template-columns: repeat(2, 1fr); gap: 15px; ` const EntertainmentBlock = styled.div` width: 179px; height: 235px; background: #ffffff12; color: #fff; display: flex; flex-direction: column; justify-content: center; align-items: center; text-align: center; border-radius: 10px; ` const BlockIcon = styled.div` margin: 5px auto 5px; font-size: 20px; color: ${brandLight}; ` const BlockMetric = styled(Heading1)`` const EntertainmentExplanation = styled(Paragraph)` margin: 5px auto; opacity: 0.7; ` export const StripeSelectAmount: React.FC = observer(() => { const { payment } = useStores() const navigate = useNavigate() const isOptionActive = (amt: number) => { return payment.topUpAmountUSD == amt } const selectOption = (amt: number) => () => { payment.setTopupAmountUSD(amt) } const [estimates, setEstimates] = useState(undefined) useEffect(() => { if (payment.topUpAmountUSD) { payment.estimateEntertainment({ USD: payment.topUpAmountUSD }).then((res) => setEstimates(res)) } }, [payment.topUpAmountUSD]) const handleNextClick = async () => { navigate("../" + topupSteps.stripePaymentOptions) } return ( navigate(-1)}>
Top up your account Select the desired amount in {payment.appFiatCurrency} {payment.orderOptions.map((opt) => (
{opt} {payment.appFiatCurrency}
))}
Next
{!!estimates && ( <> {estimates.videoMinutes}h Online video {estimates.musicMinutes}h Online music {estimates.trafficMb}GiB of data download {estimates.browsingMinutes}h Web browsing )}
) }) ================================================ FILE: src/app/views/consumer/Topup/stripe/StripeWaitingForPayment.tsx ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useEffect } from "react" import { observer } from "mobx-react-lite" import styled from "styled-components" import { useNavigate } from "react-router-dom" import { useStores } from "../../../../store" import { ViewContainer } from "../../../../navigation/components/ViewContainer/ViewContainer" import { ViewNavBar } from "../../../../navigation/components/ViewNavBar/ViewNavBar" import { ViewSplit } from "../../../../navigation/components/ViewSplit/ViewSplit" import { ViewSidebar } from "../../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewContent } from "../../../../navigation/components/ViewContent/ViewContent" import { IconWallet } from "../../../../ui-kit/icons/IconWallet" import { Heading2, Paragraph, Small } from "../../../../ui-kit/typography" import { brand, brandLight } from "../../../../ui-kit/colors" import { OrderStatus } from "../../../../payment/store" import { topupSteps } from "../../../../navigation/locations" import { StepProgressBar } from "../../../../ui-kit/components/StepProgressBar/StepProgressBar" import { Spinner } from "../../../../ui-kit/components/Spinner/Spinner" import { OrderBreakdown } from "../common/OrderBreakdown" import { LogoStripe } from "./LogoStripe" const SideTop = styled.div` box-sizing: border-box; height: 136px; padding: 20px 15px; overflow: hidden; text-align: center; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 20px; flex: 1 0 auto; display: flex; flex-direction: column; text-align: center; ` const TitleIcon = styled.div` margin-bottom: 15px; ` const Title = styled(Heading2)` margin-bottom: 15px; ` const TitleDescription = styled(Small)`` const Content = styled(ViewContent)` padding: 20px 15px; ` const PaymentAmount = styled.div` background: ${brand}; color: #fff; padding: 5px 10px; border-radius: 50px; margin-bottom: 15px; user-select: text; ` const Loading = styled(Spinner)` margin: auto; ` const LogoContainer = styled.div` height: 100px; display: flex; align-items: center; justify-content: center; overflow: hidden; ` const PaymentExplanation = styled(Paragraph)` margin-bottom: auto; ` export const StripeWaitingForPayment: React.FC = observer(() => { const { payment } = useStores() const navigate = useNavigate() useEffect(() => { switch (payment.orderStatus) { case OrderStatus.SUCCESS: navigate("../" + topupSteps.success) break case OrderStatus.FAILED: navigate("../" + topupSteps.failed) break } }, [payment.orderStatus]) return ( navigate(-1)}>
Waiting for payment Please complete the payment in the popup window. Payment is handled by Stripe.
We do not store any card details.
{payment.order?.payAmount} {payment.order?.payCurrency} Waiting for payment...
) }) ================================================ FILE: src/app/views/consumer/Wallet/WalletView.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, { useEffect, useState } from "react" import { observer } from "mobx-react-lite" import styled from "styled-components" import { EntertainmentEstimateResponse } from "mysterium-vpn-js" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { faSync } from "@fortawesome/free-solid-svg-icons" import { toast } from "react-hot-toast" import ReactTooltip from "react-tooltip" import { useStores } from "../../../store" import { Heading2, Paragraph, Small } from "../../../ui-kit/typography" import { displayUSD } from "../../../payment/display" import { ViewContainer } from "../../../navigation/components/ViewContainer/ViewContainer" import { ViewSidebar } from "../../../navigation/components/ViewSidebar/ViewSidebar" import { ViewNavBar } from "../../../navigation/components/ViewNavBar/ViewNavBar" import { ViewContent } from "../../../navigation/components/ViewContent/ViewContent" import { ViewSplit } from "../../../navigation/components/ViewSplit/ViewSplit" import { IconWallet } from "../../../ui-kit/icons/IconWallet" import { brandLight, greyBlue2 } from "../../../ui-kit/colors" import { BrandButton } from "../../../ui-kit/components/Button/BrandButton" import { locations } from "../../../navigation/locations" import { IconMusic } from "../../../ui-kit/icons/IconMusic" import { IconDocument } from "../../../ui-kit/icons/IconDocument" import { IconPlay } from "../../../ui-kit/icons/IconPlay" import { IconCloudDownload } from "../../../ui-kit/icons/IconCloudDownload" import { dismissibleToast } from "../../../ui-kit/components/dismissibleToast" import { parseError } from "../../../../shared/errors/parseError" import { logErrorMessage } from "../../../../shared/log/log" const SideTop = styled.div` height: 156px; padding: 20px; overflow: hidden; text-align: center; ` const SideBot = styled.div` background: #fff; box-shadow: 0px 0px 30px rgba(11, 0, 75, 0.1); border-radius: 10px; box-sizing: border-box; padding: 20px; height: 330px; flex: 1 0 auto; display: flex; flex-direction: column; justify-content: space-between; ` const Balance = styled(Heading2)` margin-top: 15px; ` const BalanceRefreshButton = styled(FontAwesomeIcon)` position: absolute; margin-left: 10px; color: ${brandLight}; cursor: pointer; ` const Tooltip = styled(ReactTooltip).attrs({ effect: "solid", })` width: 200px; ` const BalanceCurrency = styled(Paragraph)` color: ${brandLight}; ` const BalanceFiatEquivalent = styled.div` margin-top: 16px; font-size: 11px; ` const Content = styled(ViewContent)` background: none; ` const EntertainmentBlocks = styled.div` display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; ` const EntertainmentBlock = styled.div` width: 87px; height: 100px; background: #f8f8fd; color: ${greyBlue2}; display: flex; flex-direction: column; justify-content: center; align-items: center; text-align: center; border-radius: 10px; ` const BlockIcon = styled.div` margin: 5px auto 5px; font-size: 20px; color: ${brandLight}; ` const EntertainmentExplanation = styled(Small)` margin: 5px auto; opacity: 0.7; ` export const WalletView: React.FC = observer(function WalletView() { const { identity, payment } = useStores() const [topupLoading, setTopupLoading] = useState(false) const balance = Number(identity.identity?.balanceTokens.human) ?? 0 const handleTopupClick = async () => { setTopupLoading(true) try { await payment.startTopupFlow(locations.walletTopup) } catch (err) { setTopupLoading(false) const msg = parseError(err) logErrorMessage("Could not contact payment gateways", msg) toast.error(dismissibleToast({msg.humanReadable})) } } const [estimates, setEstimates] = useState(undefined) useEffect(() => { payment.estimateEntertainment({ MYST: balance }).then((res) => setEstimates(res)) }, [balance]) const handleRefreshBalanceClick = () => { if (!identity.identity?.id) { return } toast.promise(identity.refreshBalance(), { loading: "Refreshing balance from blockchain", success: "Balance updated", error: "Failed to refresh balance", }) } return ( {balance}{" "} Force refresh wallet's balance from the blockchain. {payment.appCurrency} {payment.appFiatCurrency} equivalent ≈ {displayUSD(payment.fiatEquivalent(balance))} {!!estimates && ( <> Will be enough for: {estimates.videoMinutes}h Online
video
{estimates.musicMinutes}h Online
music
{estimates.trafficMb}GiB of data download {estimates.browsingMinutes}h Web
browsing
)} Top up
) }) ================================================ FILE: src/config.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ export const titleBarSize = { height: 37 } export const contentSize = { width: 640, height: 560 } export const winSize = { width: contentSize.width, height: contentSize.height + titleBarSize.height } ================================================ FILE: src/main/.eslintrc ================================================ { "extends": [ "../../.eslintrc" ], "rules": { "no-restricted-imports": ["error", { "patterns": [ "renderer" ] }] } } ================================================ FILE: src/main/cliFlags.tsx ================================================ /** * Copyright (c) 2022 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ export const cliFlags = { NO_UPDATE: "no-update", } ================================================ FILE: src/main/index.tsx ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import * as path from "path" import * as os from "os" import { app, BrowserWindow, ipcMain, IpcMainEvent, Menu, Tray } from "electron" import { autoUpdater } from "electron-updater" import { machineIdSync } from "node-machine-id" import * as packageJson from "../../package.json" import { winSize } from "../config" import { initialize as initializeSentry } from "../shared/errors/sentry" import { log } from "../shared/log/log" import { isDevelopment, isProduction } from "../utils/env" import { MainIpcListenChannels, WebIpcListenChannels } from "../shared/ipc" import { handleProcessExit } from "../utils/handleProcessExit" import { createTray, refreshTrayIcon } from "./tray" import { supervisor } from "./node/supervisor" import { createMenu } from "./menu" import { mysteriumNode } from "./node/mysteriumNode" import { tequila } from "./node/tequila" import { cliFlags } from "./cliFlags" initializeSentry() autoUpdater.logger = log // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore autoUpdater.logger.transports.file.level = "info" // global reference to win (necessary to prevent window from being garbage collected) let mainWindow: BrowserWindow | null export const getMainWindow = (): BrowserWindow | null => { return mainWindow } let chatWindow: BrowserWindow | null // eslint-disable-next-line @typescript-eslint/no-unused-vars let tray: Tray | null // eslint-disable-next-line @typescript-eslint/no-explicit-any const installExtensions = async (): Promise => { // eslint-disable-next-line @typescript-eslint/no-var-requires const { default: installExtension, REACT_DEVELOPER_TOOLS } = require("electron-devtools-installer") const forceDownload = !!process.env.UPGRADE_EXTENSIONS const extensions = [REACT_DEVELOPER_TOOLS] // eslint-disable-next-line prettier/prettier return Promise.all(extensions.map((extension) => installExtension(extension, forceDownload))).catch((e) => log.debug(e)) // eslint-disable-line no-console } const appInstanceLock = app.requestSingleInstanceLock() const createMainWindow = async (): Promise => { if (isDevelopment()) { await installExtensions() } const window = new BrowserWindow({ title: packageJson.productName, width: winSize.width, height: winSize.height, frame: false, maxWidth: winSize.width, maxHeight: winSize.height, titleBarStyle: "hidden", trafficLightPosition: { x: 12, y: 11 }, useContentSize: true, resizable: false, fullscreen: false, fullscreenable: false, maximizable: false, backgroundColor: "#020202", webPreferences: { webSecurity: false, // Make requests to local tequilapi despite CORS policy contextIsolation: false, nodeIntegration: true, }, }) window.setMenuBarVisibility(false) if (!isDevelopment()) { Menu.setApplicationMenu(createMenu()) } if (isDevelopment()) { window.webContents.once("dom-ready", () => { window.webContents.openDevTools({ mode: "detach" }) }) } const indexUrl = isProduction() ? new URL(`file:///${path.join(__dirname, "index.html")}`) : `http://localhost:${process.env.ELECTRON_WEBPACK_WDS_PORT}` log.info(`Opening in browser window: ${indexUrl.toString()}`) window.loadURL(indexUrl.toString()) window.on("close", (event) => { if (app.quitting) { mainWindow = null } else { event.preventDefault() mainWindow?.hide() } }) window.on("closed", () => { mainWindow = null }) window.webContents.on("devtools-opened", () => { window.focus() setImmediate(() => { window.focus() }) }) return window } const createChatWindow = async (id: string): Promise => { chatWindow = new BrowserWindow({ frame: true, fullscreen: false, fullscreenable: false, maximizable: false, width: winSize.width, height: winSize.height, x: (mainWindow?.getBounds().x ?? 0) + 40, y: mainWindow?.getBounds().y, }) chatWindow.removeMenu() chatWindow.on("close", (event) => { if (app.quitting) { chatWindow = null } else { event.preventDefault() chatWindow?.hide() } }) chatWindow.on("closed", () => { chatWindow = null }) const url = new URL(`file:///${path.join(__static, "support.html")}`) url.search = new URLSearchParams({ app_id: packageJson.intercomAppId, node_identity: id, app_version: packageJson.version, }).toString() log.info(`Opening in browser window: ${url.toString()}`) await chatWindow.loadURL(url.toString()) return chatWindow } if (!appInstanceLock) { app.quit() } else { app.on("second-instance", async () => { // Someone tried to run a second instance, we should focus our window. if (mainWindow) { if (mainWindow.isMinimized()) mainWindow.restore() mainWindow.show() } }) // create main BrowserWindow when electron is ready app.on("ready", async () => { mainWindow = await createMainWindow() tray = createTray(app, mainWindow) }) } // quit application when all windows are closed app.on("window-all-closed", () => { // on macOS it is common for applications to stay open until the user explicitly quits if (process.platform !== "darwin") { app.quit() } }) app.whenReady().then(() => { app.on("activate", async () => { // on macOS it is common to re-create a window even after all windows have been closed if (mainWindow == null) { mainWindow = await createMainWindow() } mainWindow.show() }) }) app.on("before-quit", async () => { app.quitting = true await mysteriumNode.stop() await supervisor.disconnect() }) ipcMain.handle(MainIpcListenChannels.GetOS, (): Promise => { return Promise.resolve(os.platform()) }) ipcMain.handle(MainIpcListenChannels.GetOSVersion, (): Promise => { return Promise.resolve(os.release()) }) ipcMain.handle(MainIpcListenChannels.GetMachineId, (): Promise => { const machineId = machineIdSync() log.info("Resolved machine ID", machineId) return Promise.resolve(machineId) }) ipcMain.on(MainIpcListenChannels.ConnectionStatus, (event, status) => { if (!tray || !status) { return } refreshTrayIcon(tray, status) }) ipcMain.on(MainIpcListenChannels.OpenSupportChat, async (event: IpcMainEvent, id: string) => { if (chatWindow == null) { chatWindow = await createChatWindow(id) } chatWindow.show() }) ipcMain.on(MainIpcListenChannels.OpenSecureFormPaymentWindow, async (event: IpcMainEvent, secureForm: string) => { const securePaymentWindow = new BrowserWindow({ frame: true, fullscreen: false, fullscreenable: false, resizable: true, width: 770, height: 820, x: (mainWindow?.getBounds().x ?? 0) + 40, y: mainWindow?.getBounds().y, }) return await securePaymentWindow.loadURL("data:text/html;charset=UTF-8," + encodeURIComponent(secureForm)) }) ipcMain.on(MainIpcListenChannels.Update, () => { if (app.commandLine.hasSwitch(cliFlags.NO_UPDATE)) { mainWindow?.webContents.send(WebIpcListenChannels.UpdateNotAvailable) } else { autoUpdater.checkForUpdates() } }) ipcMain.on(MainIpcListenChannels.MinimizeWindow, () => { mainWindow?.minimize() }) ipcMain.on(MainIpcListenChannels.CloseWindow, () => { mainWindow?.close() }) supervisor.registerIPC() mysteriumNode.registerIPC(getMainWindow) tequila.registerIPC() autoUpdater.on("download-progress", () => { mainWindow?.webContents.send(WebIpcListenChannels.UpdateDownloading) }) autoUpdater.on("update-available", () => { mainWindow?.webContents.send(WebIpcListenChannels.UpdateAvailable) }) autoUpdater.on("update-not-available", () => { mainWindow?.webContents.send(WebIpcListenChannels.UpdateNotAvailable) }) autoUpdater.on("update-downloaded", () => { mainWindow?.webContents.send(WebIpcListenChannels.UpdateDownloadComplete) setTimeout(() => { autoUpdater.quitAndInstall(false, true) }, 1_000) }) export const ipcWebDisconnect = (): void => { mainWindow?.webContents.send(WebIpcListenChannels.Disconnect) } handleProcessExit() ================================================ FILE: src/main/menu.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { Menu, MenuItemConstructorOptions } from "electron" import * as packageJson from "../../package.json" export const createMenu = (): Menu => { const template: MenuItemConstructorOptions[] = [ { label: packageJson.productName, submenu: [ { role: "about" }, { type: "separator" }, { role: "hide" }, { role: "hideOthers" }, { role: "unhide" }, { type: "separator" }, { role: "quit" }, ], }, { label: "Edit", submenu: [{ role: "copy" }, { role: "paste" }], }, { role: "window", submenu: [{ role: "minimize" }, { role: "close" }], }, ] return Menu.buildFromTemplate(template) } ================================================ FILE: src/main/node/mysteriumNode.ts ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { ChildProcess } from "child_process" import { NodeHealthcheck, TequilapiClientFactory } from "mysterium-vpn-js" import { BrowserWindow, dialog, ipcMain, IpcMainInvokeEvent } from "electron" import { mysteriumNodeBin } from "@mysteriumnetwork/node" import { spawnProcess } from "../../utils/spawn" import { log, logErrorMessage } from "../../shared/log/log" import { TEQUILAPI_PORT } from "../../app/tequilapi" import { IpcResponse, MainIpcListenChannels } from "../../shared/ipc" import { isProduction } from "../../utils/env" import { ExportIdentityOpts, ImportIdentityOpts } from "../../shared/node/mysteriumNodeIPC" import { parseError } from "../../shared/errors/parseError" const mystBin = (): string => { return mysteriumNodeBin(process.platform, process.arch).replace("app.asar", "app.asar.unpacked") } const parseCLIError = (message: string): string => { let idx = message.indexOf("Possible error: ") if (idx != -1) { return message.substring(idx) } idx = message.indexOf("reason: ") if (idx != -1) { return message.substring(idx) } return message } export class MysteriumNode { port?: number proc?: ChildProcess registerIPC(getMainWindow: () => BrowserWindow | null): void { ipcMain.handle(MainIpcListenChannels.StartNode, () => { return this.start() }) ipcMain.handle(MainIpcListenChannels.StopNode, () => { return this.stop() }) ipcMain.handle(MainIpcListenChannels.KillGhosts, async () => { if (isProduction()) { await Promise.all([this.killGhost(4050), this.killGhost(44050)]) } }) ipcMain.handle( MainIpcListenChannels.ImportIdentity, async (event: IpcMainInvokeEvent, opts: ImportIdentityOpts): Promise => { return this.importIdentity(opts) }, ) ipcMain.handle(MainIpcListenChannels.ImportIdentityChooseFile, async (): Promise => { const mainWindow = getMainWindow() if (!mainWindow) { return {} } const filename = dialog .showOpenDialogSync(mainWindow, { filters: [{ extensions: ["json"], name: "keystore" }], }) ?.find(Boolean) return Promise.resolve({ result: filename }) }) ipcMain.handle( MainIpcListenChannels.ExportIdentity, async (event: IpcMainInvokeEvent, opts: ExportIdentityOpts): Promise => { const mainWindow = getMainWindow() if (!mainWindow) { return {} } const filename = dialog.showSaveDialogSync(mainWindow, { filters: [{ extensions: ["json"], name: "keystore" }], defaultPath: `${opts.id}.json`, }) if (!filename) { return {} } return await this.exportIdentity({ id: opts.id, filename: filename, passphrase: opts.passphrase }) }, ) } // Myst process is not started from supervisor as supervisor runs as root user // which complicates starting myst process as non root user. start(port = TEQUILAPI_PORT): Promise { this.port = port const mystProcess = spawnProcess( mystBin(), [ "--ui.enable=false", "--usermode", "--consumer", `--tequilapi.port=${port}`, "--discovery.type=api", "daemon", ], { stdio: "ignore", // Needed for unref to work correctly. }, ) mystProcess.stdout?.on("data", (d) => { log.info(d) }) this.proc = mystProcess mystProcess.on("close", (code) => { log.info(`myst process exited with code ${code}`) }) return Promise.resolve() } async killGhost(port: number): Promise { const api = new TequilapiClientFactory(`http://127.0.0.1:${port}`, 3_000).build() let hc: NodeHealthcheck | undefined try { hc = await api.healthCheck(100) } catch (err) { log.info("No ghosts found on port", port) } if (!hc?.process) { return } log.info("Found a ghost node on port", port, "PID", hc.process) log.info("Attempting to shutdown gracefully") try { await api.stop() return } catch (err) { const msg = parseError(err) logErrorMessage("Could not stop node on port " + port, msg) } log.info("Attempting to kill process", hc.process) try { process.kill(hc.process) } catch (err) { const msg = parseError(err) logErrorMessage("Could not kill process PID " + hc.process, msg) } } async stop(): Promise { log.info("Stopping myst") if (this.port) { log.info("Shutting down node gracefully on port", this.port) const api = new TequilapiClientFactory(`http://127.0.0.1:${this.port}`, 3_000).build() try { await api.stop() return } catch (err) { const msg = parseError(err) logErrorMessage("Could not shutdown Mysterium node gracefully", msg) } } if (this.proc) { log.info("Killing node process", this.proc.pid) try { this.proc.kill() } catch (err) { const msg = parseError(err) logErrorMessage("Could not kill node process", msg) } } } exportIdentity({ id, filename, passphrase, }: { id: string filename: string passphrase: string }): Promise { return new Promise((resolve) => { const cli = spawnProcess(mystBin(), [ "cli", "--agreed-terms-and-conditions", `--tequilapi.port=${TEQUILAPI_PORT}`, "identities", "export", id, passphrase, filename, ]) let err = "" cli.stdout?.on("data", (data) => { const message = data.toString() log.info(message) err = parseCLIError(message) }) cli.on("exit", (code) => { if (code == 0) { return resolve({ result: filename, }) } else { if (err) { return resolve({ error: err }) } else { return resolve({ error: "Failed with status: " + code }) } } }) }) } importIdentity({ filename, passphrase }: ImportIdentityOpts): Promise { return new Promise((resolve) => { const cli = spawnProcess(mystBin(), [ "cli", "--agreed-terms-and-conditions", `--tequilapi.port=${TEQUILAPI_PORT}`, "identities", "import", passphrase, filename, ]) let err = "" cli.stdout?.on("data", (data) => { const message = data.toString() log.info(message) err = parseCLIError(message) }) cli.on("exit", (code) => { if (code == 0) { return resolve({ result: filename, }) } else { if (err) { return resolve({ error: err }) } else { return resolve({ error: "Failed with status: " + code }) } } }) }) } } export const mysteriumNode = new MysteriumNode() ================================================ FILE: src/main/node/supervisor.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import * as net from "net" import { Socket } from "net" import { platform } from "os" import semver from "semver" import { ipcMain } from "electron" import { mysteriumSupervisorBin, nodeVersion } from "@mysteriumnetwork/node" import { log } from "../../shared/log/log" import { sudoExec } from "../../utils/sudo" import { uid } from "../../utils/user" import { MainIpcListenChannels } from "../../shared/ipc" const isWin = platform() === "win32" function mystSockPath(): string { if (isWin) { return "\\\\.\\pipe\\mystpipe" } return "/var/run/myst.sock" } const supervisorBin = (): string => { return mysteriumSupervisorBin(process.platform, process.arch).replace("app.asar", "app.asar.unpacked") } export class Supervisor { conn?: Socket registerIPC(): void { ipcMain.handle(MainIpcListenChannels.SupervisorConnect, () => this.connect()) ipcMain.handle(MainIpcListenChannels.SupervisorInstall, () => this.install()) ipcMain.handle(MainIpcListenChannels.SupervisorUpgrade, () => this.upgrade()) ipcMain.handle(MainIpcListenChannels.SupervisorDisconnect, () => this.disconnect()) } async connect(): Promise { log.info("Connecting to the supervisor...") const mystSock = mystSockPath() return await new Promise((resolve, reject) => { this.conn = net .createConnection(mystSock) .on("connect", () => { log.info("Connected to: ", mystSock) return resolve() }) .on("data", (data: Buffer) => { log.info("Server:", data.toString()) }) .on("error", function (data) { return reject(data) }) }) } /** * Sends command to the supervisor and returns the response. */ request(command: string, timeout = 2000): Promise { return new Promise((resolve, reject) => { // eslint-disable-next-line prefer-const let timer: NodeJS.Timeout this.conn?.write(command + "\n") const responseHandler = (data: Buffer) => { clearTimeout(timer) const message = data.toString().trim() if (!message.startsWith("ok")) { reject(new Error(message.replace("error: ", ""))) } if (message.startsWith("ok: ")) { resolve(message.replace("ok: ", "")) } else { resolve() } } this.conn?.once("data", responseHandler) timer = setTimeout(() => { reject(new Error("timed out waiting for response")) this.conn?.removeListener("data", responseHandler) }, timeout) }) } runningVersion(): Promise { return this.request("version") as Promise } async upgrade(): Promise { const bundledVersion = nodeVersion() let runningVersion = "" try { runningVersion = await this.runningVersion() } catch (err) { log.error("Error checking running version", err) } log.info("Supervisor version bundled:", bundledVersion, "running:", runningVersion) if (runningVersion == bundledVersion) { log.info("Running supervisor version matches, skipping the upgrade") return } if (!semver.valid(runningVersion) || !semver.valid(bundledVersion)) { log.info("Exotic versions of supervisor found, proceeding to upgrade") } else if (semver.gte(runningVersion, bundledVersion)) { log.info("Running supervisor version is compatible, skipping the upgrade") return } log.info(`Upgrading supervisor ${runningVersion} → ${bundledVersion}`) await supervisor.install() } async install(): Promise { return await new Promise((resolve) => { sudoExec(`"${supervisorBin()}" -install -uid ${uid()}`) const waitUntilConnected = (): void => { this.connect() .then(() => resolve()) .catch(() => setTimeout(waitUntilConnected, 500)) } setTimeout(waitUntilConnected, 500) }) } disconnect(): void { if (this.conn) { this.conn.destroy() } } } export const supervisor = new Supervisor() ================================================ FILE: src/main/node/tequila.ts ================================================ /** * Copyright (c) 2022 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { TequilapiClient, TequilapiClientFactory } from "mysterium-vpn-js" import _ from "lodash" import { ipcMain } from "electron" import { log } from "../../shared/log/log" import { MainIpcListenChannels } from "../../shared/ipc" export class Tequila { tequilapi: TequilapiClient constructor() { const TEQUILAPI_PORT = 44050 this.tequilapi = new TequilapiClientFactory(`http://127.0.0.1:${TEQUILAPI_PORT}`, 8_000).build() } registerIPC() { ipcMain.on(MainIpcListenChannels.SaveUserConfig, (evt, cfg) => { this.persistConfigDebounced(cfg) }) } persistConfigDebounced = _.debounce((cfg) => { log.info("Persisting user configuration:", JSON.stringify(cfg)) this.tequilapi .updateUserConfig({ data: cfg }) .then(() => log.info("Save OK")) .catch((err) => log.error("Save failed", err)) }, 2_000) } export const tequila = new Tequila() ================================================ FILE: src/main/tray.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { platform } from "os" import { App, BrowserWindow, Menu, Tray } from "electron" import { autoUpdater } from "electron-updater" import { ConnectionStatus } from "mysterium-vpn-js" import * as packageJson from "../../package.json" import { staticAssetPath } from "../utils/paths" import { supervisor } from "./node/supervisor" import { ipcWebDisconnect } from "./index" const trayIconPath = (connectionStatus: ConnectionStatus): string => { const connected = connectionStatus === ConnectionStatus.CONNECTED switch (process.platform) { case "darwin": return staticAssetPath(`tray/macOS/${connected ? "ActiveTemplate" : "PassiveTemplate"}.png`) case "win32": return staticAssetPath(`tray/windows/${connected ? "logo-active" : "logo"}.ico`) } return staticAssetPath(`tray/linux/${connected ? "logo-active" : "logo"}.png`) } export const refreshTrayIcon = (tray: Tray, status: ConnectionStatus): void => { tray.setImage(trayIconPath(status)) } // eslint-disable-next-line @typescript-eslint/no-unused-vars export const createTray = (app: App, win: BrowserWindow): Tray => { const tray = new Tray(trayIconPath(ConnectionStatus.NOT_CONNECTED)) tray.setContextMenu( Menu.buildFromTemplate([ { label: "Show window", click: (): void => { win.show() }, }, { type: "separator", }, { label: "Check for updates", click: async (): Promise => { await autoUpdater.checkForUpdatesAndNotify() }, }, { label: "Repair supervisor", click: async (): Promise => { ipcWebDisconnect() await supervisor.install() }, }, { type: "separator", }, { role: "quit", label: `Quit ${packageJson.productName}`, accelerator: "CommandOrControl+Q", click: (): void => { app.quit() }, }, ]), ) tray.on("double-click", () => { if (platform() == "win32") { win.show() } }) return tray } ================================================ FILE: src/shared/errors/parseError.ts ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { APIError } from "mysterium-vpn-js" export interface ParsedMessage { original: string humanReadable: string } export const parseError = (err: unknown): ParsedMessage => { if (err instanceof APIError) { return { original: JSON.stringify(err.response), humanReadable: err.human(), } } const msg = err instanceof Error ? err.message : JSON.stringify(err) return { original: msg, humanReadable: msg, } } ================================================ FILE: src/shared/errors/sentry.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import * as Sentry from "@sentry/electron" import * as packageJson from "../../../package.json" export const initialize = (): void => { Sentry.init({ dsn: packageJson.sentryDsn, release: `${packageJson.productName}@${packageJson.version}`, }) } ================================================ FILE: src/shared/ipc.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ export enum WebIpcListenChannels { Disconnect = "disconnect", UpdateAvailable = "update-available", UpdateNotAvailable = "update-not-available", UpdateDownloading = "update-downloading", UpdateDownloadComplete = "update-download-complete", } export enum MainIpcListenChannels { GetOS = "get-os", GetOSVersion = "get-os-version", GetMachineId = "get-machine-id", Update = "update", ConnectionStatus = "connection-status", OpenSupportChat = "open-support-chat", OpenSecureFormPaymentWindow = "open-stripe-payment-window", MinimizeWindow = "minimize-window", CloseWindow = "close-window", SaveUserConfig = "save-user-config", ExportIdentity = "export-identity", ImportIdentityChooseFile = "import-identity-choose-file", ImportIdentity = "import-identity", SupervisorConnect = "supervisor-connect", SupervisorInstall = "supervisor-install", SupervisorUpgrade = "supervisor-upgrade", SupervisorDisconnect = "supervisor-disconnect", KillGhosts = "kill-ghost", StartNode = "start-node", StopNode = "stop-node", } export interface IpcResponse { result?: unknown error?: string } ================================================ FILE: src/shared/log/log.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import electronLog from "electron-log" import { ParsedMessage } from "../errors/parseError" electronLog.transports.console.level = "debug" electronLog.transports.file.level = "debug" export const log = electronLog export const logErrorMessage = (caption: string, err: ParsedMessage): void => { log.error(`${caption}: ${err.humanReadable}\nOriginal message: ${err.original}`) } ================================================ FILE: src/shared/node/mysteriumNodeIPC.ts ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { ipcRenderer } from "electron" import { IpcResponse, MainIpcListenChannels } from "../ipc" export class MysteriumNodeIPC { start(): Promise { return ipcRenderer.invoke(MainIpcListenChannels.StartNode) } stop(): Promise { return ipcRenderer.invoke(MainIpcListenChannels.StopNode) } killGhosts(): Promise { return ipcRenderer.invoke(MainIpcListenChannels.KillGhosts) } importIdentity(opts: ImportIdentityOpts): Promise { return ipcRenderer.invoke(MainIpcListenChannels.ImportIdentity, opts) } importIdentityChooseFile(): Promise { return ipcRenderer .invoke(MainIpcListenChannels.ImportIdentityChooseFile) .then((result: IpcResponse) => result.result as string) } exportIdentity(opts: ExportIdentityOpts): Promise { return ipcRenderer.invoke(MainIpcListenChannels.ExportIdentity, opts) } } export interface ImportIdentityOpts { filename: string passphrase: string } export interface ExportIdentityOpts { id: string passphrase: string } export const mysteriumNodeIPC = new MysteriumNodeIPC() ================================================ FILE: src/shared/node/supervisorIPC.ts ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { ipcRenderer } from "electron" import { MainIpcListenChannels } from "../ipc" export class SupervisorIPC { async connect(): Promise { return await ipcRenderer.invoke(MainIpcListenChannels.SupervisorConnect) } async install(): Promise { return await ipcRenderer.invoke(MainIpcListenChannels.SupervisorInstall) } async upgrade(): Promise { return await ipcRenderer.invoke(MainIpcListenChannels.SupervisorUpgrade) } async disconnect(): Promise { return await ipcRenderer.invoke(MainIpcListenChannels.SupervisorDisconnect) } } export const supervisorIPC = new SupervisorIPC() ================================================ FILE: src/shared/push/topics.ts ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ export enum PushTopic { LessThanHalfMyst = "Less_Than_0.5_MYST", } ================================================ FILE: src/typings/assets.d.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ declare module "*.svg" declare module "*.png" declare module "*.jpg" declare module "*.jpeg" declare module "*.gif" declare module "*.bmp" declare module "*.ttf" ================================================ FILE: src/typings/libraries.d.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ declare module "byte-size" { type ByteSize = { value: string unit: string long: string toString(): string } const byteSize: ( bytes: number, options?: { precision?: number; units?: "metric" | "iec" | "metric_octet" | "iec_octet" }, ) => ByteSize export default byteSize } declare module "@mysteriumnetwork/terms" { const TermsEndUser: string } // static assets /static declare const __static: string // eslint-disable-next-line @typescript-eslint/no-namespace declare namespace Electron { export interface App { quitting?: boolean } } ================================================ FILE: src/typings/react-table-config.d.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ /* eslint-disable @typescript-eslint/ban-types,@typescript-eslint/no-explicit-any */ import { UseColumnOrderInstanceProps, UseColumnOrderState, UseExpandedHooks, UseExpandedInstanceProps, UseExpandedOptions, UseExpandedRowProps, UseExpandedState, UseFiltersColumnOptions, UseFiltersColumnProps, UseFiltersInstanceProps, UseFiltersOptions, UseFiltersState, UseGlobalFiltersColumnOptions, UseGlobalFiltersInstanceProps, UseGlobalFiltersOptions, UseGlobalFiltersState, UseGroupByCellProps, UseGroupByColumnOptions, UseGroupByColumnProps, UseGroupByHooks, UseGroupByInstanceProps, UseGroupByOptions, UseGroupByRowProps, UseGroupByState, UsePaginationInstanceProps, UsePaginationOptions, UsePaginationState, UseResizeColumnsColumnOptions, UseResizeColumnsColumnProps, UseResizeColumnsOptions, UseResizeColumnsState, UseRowSelectHooks, UseRowSelectInstanceProps, UseRowSelectOptions, UseRowSelectRowProps, UseRowSelectState, UseRowStateCellProps, UseRowStateInstanceProps, UseRowStateOptions, UseRowStateRowProps, UseRowStateState, UseSortByColumnOptions, UseSortByColumnProps, UseSortByHooks, UseSortByInstanceProps, UseSortByOptions, UseSortByState, UseTableCellProps, } from "react-table" declare module "react-table" { // take this file as-is, or comment out the sections that don't apply to your plugin configuration export interface TableOptions extends UseExpandedOptions, UseFiltersOptions, UseGlobalFiltersOptions, UseGroupByOptions, UsePaginationOptions, UseResizeColumnsOptions, UseRowSelectOptions, UseRowStateOptions, UseSortByOptions, // note that having Record here allows you to add anything to the options, this matches the spirit of the // underlying js library, but might be cleaner if it's replaced by a more specific type that matches your // feature set, this is a safe default. Record {} export interface Hooks extends UseExpandedHooks, UseGroupByHooks, UseRowSelectHooks, UseSortByHooks {} export interface TableInstance extends UseColumnOrderInstanceProps, UseExpandedInstanceProps, UseFiltersInstanceProps, UseGlobalFiltersInstanceProps, UseGroupByInstanceProps, UsePaginationInstanceProps, UseRowSelectInstanceProps, UseRowStateInstanceProps, UseSortByInstanceProps {} export interface TableState extends UseColumnOrderState, UseExpandedState, UseFiltersState, UseGlobalFiltersState, UseGroupByState, UsePaginationState, UseResizeColumnsState, UseRowSelectState, UseRowStateState, UseSortByState {} export interface ColumnInterface extends UseFiltersColumnOptions, UseGlobalFiltersColumnOptions, UseGroupByColumnOptions, UseResizeColumnsColumnOptions, UseSortByColumnOptions {} export interface ColumnInstance extends UseFiltersColumnProps, UseGroupByColumnProps, UseResizeColumnsColumnProps, UseSortByColumnProps {} export interface Cell extends UseTableCellProps, UseGroupByCellProps, UseRowStateCellProps {} export interface Row extends UseExpandedRowProps, UseGroupByRowProps, UseRowSelectRowProps, UseRowStateRowProps {} } ================================================ FILE: src/utils/env.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ export const isProduction = (): boolean => process.env.NODE_ENV == "production" export const isDevelopment = (): boolean => !isProduction() ================================================ FILE: src/utils/handleProcessExit.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { log } from "../shared/log/log" export const handleProcessExit = (): void => { const shutdown = (): void => { log.info("Shutting down...") process.exit(0) } process.on("beforeExit", shutdown) process.on("SIGINT", shutdown) process.on("SIGTERM", shutdown) process.on("SIGUSR1", shutdown) process.on("SIGUSR2", shutdown) process.on("uncaughtException", (err) => { log.error(new Date().toUTCString() + " uncaughtException:", err.message) log.error(err.stack) process.exit(1) }) } ================================================ FILE: src/utils/paths.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import * as path from "path" /** * Calculates absolute static asset path. * @param assetPath */ export const staticAssetPath = (assetPath: string): string => path.join(__static, assetPath) ================================================ FILE: src/utils/spawn.ts ================================================ /** * Copyright (c) 2021 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { ChildProcess, spawn, SpawnOptions } from "child_process" import { log } from "../shared/log/log" /** * Wrapper for `spawn` that prints cmd and args. * @param command * @param args * @param options */ export const spawnProcess = ( command: string, args: ReadonlyArray, options: SpawnOptions = {}, ): ChildProcess => { log.info("Spawning a child process: ", command, ...args.map((a) => (a.indexOf(" ") != -1 ? `'${a}'` : a))) return spawn(command, args, options) } ================================================ FILE: src/utils/sudo.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import * as os from "os" import { execFileSync } from "child_process" import { exec } from "sudo-prompt" import semver from "semver" import * as packageJson from "../../package.json" import { log } from "../shared/log/log" import { staticAssetPath } from "./paths" export const sudoExec = (cmd: string): void => { if (os.platform() === "darwin" && semver.gte(os.release(), "19.0.0")) { // >= macOS Catalina catalinaSudoExec(cmd) return } exec( cmd, { name: packageJson.productName, icns: staticAssetPath("logo.icns"), }, (error?: Error, stdout?: string | Buffer, stderr?: string | Buffer) => { log.info("[sudo-exec]", stdout, stderr) if (error) { log.error("[sudo-exec] error:", error) } }, ) } const catalinaSudoExec = (cmd: string) => { execFileSync("sudo", ["--askpass", "sh", "-c", cmd], { encoding: "utf8", env: { PATH: process.env.PATH, SUDO_ASKPASS: staticAssetPath("sudo-askpass.osascript.js"), }, }) } ================================================ FILE: src/utils/user.ts ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { platform } from "os" export const uid = (): string => { let uid = 0 // getuid only available on POSIX // and it's not needed on windows anyway if (platform() !== "win32") { uid = process.getuid() } return uid.toString() } ================================================ FILE: static/sudo-askpass.osascript.js ================================================ #!/usr/bin/env osascript -l JavaScript ObjC.import('stdlib') const app = Application.currentApplication() app.includeStandardAdditions = true const result = app.displayDialog('Mysterium Dark would like to install a helper utility. Please enter your password to continue.', { defaultAnswer: '', withTitle: "MysteriumDark", withIcon: 'note', buttons: ['Cancel', 'Ok'], defaultButton: 'Ok', hiddenAnswer: true, }) if (result.buttonReturned === 'Ok') { result.textReturned } else { $.exit(255) } ================================================ FILE: static/support.html ================================================ Mysterium Dark - Support chat ================================================ FILE: tsconfig.json ================================================ { "extends": "./node_modules/electron-webpack/tsconfig-base.json", "compilerOptions": { "jsx": "react", "experimentalDecorators": false, "useDefineForClassFields": true, "resolveJsonModule": true } } ================================================ FILE: webpack.main.additions.js ================================================ /** * Copyright (c) 2022 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ require("./monkey-patch-crypto.js") ================================================ FILE: webpack.renderer.additions.js ================================================ /** * Copyright (c) 2020 BlockDev AG * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ module.exports = { externals: ["react", "react-dom"], } require("./monkey-patch-crypto.js")