diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..1521aa9 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +root = true + +[*] +end_of_line = lf +tab_width = 4 +insert_final_newline = true +indent_style = space + +[*.{json,yml,md,html}] +tab_width = 2 + +[*.{js,jsx,ts,tsx,py}] +charset = utf-8 diff --git a/.env.example b/.env.example index 80fb918..b55d6f6 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,4 @@ VITE_BOT_USERNAME=TeleOTPAppBot VITE_PLAUSIBLE_DOMAIN=teleotp.pages.dev -VITE_PLAUSIBLE_API_HOST=https://analytics.gesti.tech \ No newline at end of file +VITE_PLAUSIBLE_API_HOST=https://analytics.gesti.tech +VITE_CHANNEL_LINK=https://t.me/teleotpapp diff --git a/.eslintrc.cjs b/.eslintrc.cjs index f666c24..8c270bb 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -9,7 +9,7 @@ module.exports = { 'plugin:react/recommended', 'plugin:react/jsx-runtime', ], - ignorePatterns: ['dist', '.eslintrc.cjs'], + ignorePatterns: ['dist', '.eslintrc.cjs', 'vite.config.ts'], parser: '@typescript-eslint/parser', plugins: ['react-refresh'], rules: { @@ -21,6 +21,12 @@ module.exports = { 'warn', { allowConstantExport: true }, ], + '@typescript-eslint/restrict-template-expressions': [ + 'warn', + { + allowNumber: true, + } + ] }, parserOptions: { ecmaVersion: 'latest', diff --git a/.gitignore b/.gitignore index 396c3bd..74b46ed 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,5 @@ dist-ssr *.sw? /src/migration/proto/generated/ /.env + +docker-compose.yml diff --git a/bot/docker-compose.example.yml b/bot/docker-compose.example.yml new file mode 100644 index 0000000..3a31672 --- /dev/null +++ b/bot/docker-compose.example.yml @@ -0,0 +1,13 @@ +version: '3' + +services: + bot: + image: ghcr.io/uselessstudio/teleotp-bot:main + restart: unless-stopped + environment: + - TG_APP=https://t.me/TeleOTPAppBot/app + # For testing on localhost use http://127.0.0.1 instead of http://localhost + #! Do not use trailing slash + - WEBAPP_URL=https://uselessstudio.github.io/TeleOTP + # For using on beta server use token like: /test + - TOKEN= diff --git a/index.html b/index.html index d57beb5..bfff27b 100644 --- a/index.html +++ b/index.html @@ -3,7 +3,7 @@ - Vite + React + TS + TeleOTP diff --git a/package-lock.json b/package-lock.json index 8325d46..b6c5c5c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,32 +1,47 @@ { "name": "teleotp", - "version": "0.2.1", + "version": "0.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "teleotp", - "version": "0.2.1", + "version": "0.3.0", "dependencies": { "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", "@fontsource/inter": "^5.0.8", "@mui/icons-material": "^5.14.9", "@mui/material": "^5.14.10", + "@uiw/color-convert": "^2.1.1", + "@uiw/react-color-colorful": "^2.0.6", "copy-text-to-clipboard": "^3.2.0", - "crypto-js": "^4.1.1", + "crypto-js": "4.1.1", + "fuse.js": "^7.0.0", "lottie-react": "^2.4.0", "nanoid": "^5.0.1", "otpauth": "^9.1.4", "plausible-tracker": "^0.3.8", "protobufjs": "^7.2.5", + "rdndmb-html5-to-touch": "^8.0.3", "react": "^18.2.0", + "react-dnd": "^16.0.1", + "react-dnd-html5-backend": "^16.0.1", + "react-dnd-multi-backend": "^8.0.3", + "react-dnd-preview": "^8.0.3", + "react-dnd-touch-backend": "^16.0.1", "react-dom": "^18.2.0", - "react-router-dom": "^6.16.0" + "react-flip-toolkit": "7.1.0", + "react-inlinesvg": "^4.1.3", + "react-router-dom": "^6.16.0", + "use-debounce": "^10.0.0" }, "devDependencies": { + "@testing-library/jest-dom": "^6.4.1", + "@testing-library/react": "^14.2.1", "@twa-dev/types": "github:UselessStudio/twa-types", "@types/crypto-js": "^4.1.2", + "@types/jest": "^29.5.12", "@types/node": "^20.12.2", "@types/react": "^18.2.73", "@types/react-dom": "^18.2.23", @@ -37,10 +52,12 @@ "eslint-plugin-react": "^7.34.1", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.6", + "jsdom": "^24.0.0", "protobufjs-cli": "^1.1.2", "typescript": "^5.4.3", "vite": "5.2.7", - "vite-plugin-svgr": "^4.2.0" + "vite-plugin-svgr": "^4.2.0", + "vitest": "^1.5.2" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -52,6 +69,12 @@ "node": ">=0.10.0" } }, + "node_modules/@adobe/css-tools": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.3.tgz", + "integrity": "sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==", + "dev": true + }, "node_modules/@ampproject/remapping": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", @@ -1077,6 +1100,117 @@ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", @@ -1490,6 +1624,21 @@ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, + "node_modules/@react-dnd/asap": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@react-dnd/asap/-/asap-5.0.2.tgz", + "integrity": "sha512-WLyfoHvxhs0V9U+GTsGilGgf2QsPl6ZZ44fnv0/b8T3nQyvzxidxsg/ZltbWssbsRDlYW8UKSQMTGotuTotZ6A==" + }, + "node_modules/@react-dnd/invariant": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@react-dnd/invariant/-/invariant-4.0.2.tgz", + "integrity": "sha512-xKCTqAK/FFauOM9Ta2pswIyT3D8AQlfrYdOi/toTPEhqCuAs1v5tcJ3Y08Izh1cJ5Jchwy9SeAXmMg6zrKs2iw==" + }, + "node_modules/@react-dnd/shallowequal": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@react-dnd/shallowequal/-/shallowequal-4.0.2.tgz", + "integrity": "sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==" + }, "node_modules/@remix-run/router": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.9.0.tgz", @@ -1521,9 +1670,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.2.tgz", - "integrity": "sha512-3XFIDKWMFZrMnao1mJhnOT1h2g0169Os848NhhmGweEcfJ4rCi+3yMCOLG4zA61rbJdkcrM/DjVZm9Hg5p5w7g==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.0.tgz", + "integrity": "sha512-jwXtxYbRt1V+CdQSy6Z+uZti7JF5irRKF8hlKfEnF/xJpcNGuuiZMBvuoYM+x9sr9iWGnzrlM0+9hvQ1kgkf1w==", "cpu": [ "arm" ], @@ -1534,9 +1683,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.2.tgz", - "integrity": "sha512-GdxxXbAuM7Y/YQM9/TwwP+L0omeE/lJAR1J+olu36c3LqqZEBdsIWeQ91KBe6nxwOnb06Xh7JS2U5ooWU5/LgQ==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.0.tgz", + "integrity": "sha512-fI9nduZhCccjzlsA/OuAwtFGWocxA4gqXGTLvOyiF8d+8o0fZUeSztixkYjcGq1fGZY3Tkq4yRvHPFxU+jdZ9Q==", "cpu": [ "arm64" ], @@ -1547,9 +1696,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.2.tgz", - "integrity": "sha512-mCMlpzlBgOTdaFs83I4XRr8wNPveJiJX1RLfv4hggyIVhfB5mJfN4P8Z6yKh+oE4Luz+qq1P3kVdWrCKcMYrrA==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.0.tgz", + "integrity": "sha512-BcnSPRM76/cD2gQC+rQNGBN6GStBs2pl/FpweW8JYuz5J/IEa0Fr4AtrPv766DB/6b2MZ/AfSIOSGw3nEIP8SA==", "cpu": [ "arm64" ], @@ -1560,9 +1709,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.2.tgz", - "integrity": "sha512-yUoEvnH0FBef/NbB1u6d3HNGyruAKnN74LrPAfDQL3O32e3k3OSfLrPgSJmgb3PJrBZWfPyt6m4ZhAFa2nZp2A==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.0.tgz", + "integrity": "sha512-LDyFB9GRolGN7XI6955aFeI3wCdCUszFWumWU0deHA8VpR3nWRrjG6GtGjBrQxQKFevnUTHKCfPR4IvrW3kCgQ==", "cpu": [ "x64" ], @@ -1573,9 +1722,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.2.tgz", - "integrity": "sha512-GYbLs5ErswU/Xs7aGXqzc3RrdEjKdmoCrgzhJWyFL0r5fL3qd1NPcDKDowDnmcoSiGJeU68/Vy+OMUluRxPiLQ==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.0.tgz", + "integrity": "sha512-ygrGVhQP47mRh0AAD0zl6QqCbNsf0eTo+vgwkY6LunBcg0f2Jv365GXlDUECIyoXp1kKwL5WW6rsO429DBY/bA==", "cpu": [ "arm" ], @@ -1586,9 +1735,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.2.tgz", - "integrity": "sha512-L1+D8/wqGnKQIlh4Zre9i4R4b4noxzH5DDciyahX4oOz62CphY7WDWqJoQ66zNR4oScLNOqQJfNSIAe/6TPUmQ==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.0.tgz", + "integrity": "sha512-x+uJ6MAYRlHGe9wi4HQjxpaKHPM3d3JjqqCkeC5gpnnI6OWovLdXTpfa8trjxPLnWKyBsSi5kne+146GAxFt4A==", "cpu": [ "arm64" ], @@ -1599,9 +1748,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.2.tgz", - "integrity": "sha512-tK5eoKFkXdz6vjfkSTCupUzCo40xueTOiOO6PeEIadlNBkadH1wNOH8ILCPIl8by/Gmb5AGAeQOFeLev7iZDOA==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.0.tgz", + "integrity": "sha512-nrRw8ZTQKg6+Lttwqo6a2VxR9tOroa2m91XbdQ2sUUzHoedXlsyvY1fN4xWdqz8PKmf4orDwejxXHjh7YBGUCA==", "cpu": [ "arm64" ], @@ -1612,9 +1761,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.13.2.tgz", - "integrity": "sha512-zvXvAUGGEYi6tYhcDmb9wlOckVbuD+7z3mzInCSTACJ4DQrdSLPNUeDIcAQW39M3q6PDquqLWu7pnO39uSMRzQ==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.0.tgz", + "integrity": "sha512-xV0d5jDb4aFu84XKr+lcUJ9y3qpIWhttO3Qev97z8DKLXR62LC3cXT/bMZXrjLF9X+P5oSmJTzAhqwUbY96PnA==", "cpu": [ "ppc64le" ], @@ -1625,9 +1774,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.2.tgz", - "integrity": "sha512-C3GSKvMtdudHCN5HdmAMSRYR2kkhgdOfye4w0xzyii7lebVr4riCgmM6lRiSCnJn2w1Xz7ZZzHKuLrjx5620kw==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.0.tgz", + "integrity": "sha512-SDDhBQwZX6LPRoPYjAZWyL27LbcBo7WdBFWJi5PI9RPCzU8ijzkQn7tt8NXiXRiFMJCVpkuMkBf4OxSxVMizAw==", "cpu": [ "riscv64" ], @@ -1638,9 +1787,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.13.2.tgz", - "integrity": "sha512-l4U0KDFwzD36j7HdfJ5/TveEQ1fUTjFFQP5qIt9gBqBgu1G8/kCaq5Ok05kd5TG9F8Lltf3MoYsUMw3rNlJ0Yg==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.0.tgz", + "integrity": "sha512-RxB/qez8zIDshNJDufYlTT0ZTVut5eCpAZ3bdXDU9yTxBzui3KhbGjROK2OYTTor7alM7XBhssgoO3CZ0XD3qA==", "cpu": [ "s390x" ], @@ -1651,9 +1800,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.2.tgz", - "integrity": "sha512-xXMLUAMzrtsvh3cZ448vbXqlUa7ZL8z0MwHp63K2IIID2+DeP5iWIT6g1SN7hg1VxPzqx0xZdiDM9l4n9LRU1A==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.0.tgz", + "integrity": "sha512-C6y6z2eCNCfhZxT9u+jAM2Fup89ZjiG5pIzZIDycs1IwESviLxwkQcFRGLjnDrP+PT+v5i4YFvlcfAs+LnreXg==", "cpu": [ "x64" ], @@ -1664,9 +1813,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.2.tgz", - "integrity": "sha512-M/JYAWickafUijWPai4ehrjzVPKRCyDb1SLuO+ZyPfoXgeCEAlgPkNXewFZx0zcnoIe3ay4UjXIMdXQXOZXWqA==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.0.tgz", + "integrity": "sha512-i0QwbHYfnOMYsBEyjxcwGu5SMIi9sImDVjDg087hpzXqhBSosxkE7gyIYFHgfFl4mr7RrXksIBZ4DoLoP4FhJg==", "cpu": [ "x64" ], @@ -1677,9 +1826,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.2.tgz", - "integrity": "sha512-2YWwoVg9KRkIKaXSh0mz3NmfurpmYoBBTAXA9qt7VXk0Xy12PoOP40EFuau+ajgALbbhi4uTj3tSG3tVseCjuA==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.0.tgz", + "integrity": "sha512-Fq52EYb0riNHLBTAcL0cun+rRwyZ10S9vKzhGKKgeD+XbwunszSY0rVMco5KbOsTlwovP2rTOkiII/fQ4ih/zQ==", "cpu": [ "arm64" ], @@ -1690,9 +1839,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.2.tgz", - "integrity": "sha512-2FSsE9aQ6OWD20E498NYKEQLneShWes0NGMPQwxWOdws35qQXH+FplabOSP5zEe1pVjurSDOGEVCE2agFwSEsw==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.0.tgz", + "integrity": "sha512-e/PBHxPdJ00O9p5Ui43+vixSgVf4NlLsmV6QneGERJ3lnjIua/kim6PRFe3iDueT1rQcgSkYP8ZBBXa/h4iPvw==", "cpu": [ "ia32" ], @@ -1703,9 +1852,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.2.tgz", - "integrity": "sha512-7h7J2nokcdPePdKykd8wtc8QqqkqxIrUz7MHj6aNr8waBRU//NLDVnNjQnqQO6fqtjrtCdftpbTuOKAyrAQETQ==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.0.tgz", + "integrity": "sha512-aGg7iToJjdklmxlUlJh/PaPNa4PmqHfyRMLunbL3eaMO0gp656+q1zOKkpJ/CVe9CryJv6tAN1HDoR8cNGzkag==", "cpu": [ "x64" ], @@ -1715,6 +1864,12 @@ "win32" ] }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", @@ -1954,132 +2109,429 @@ "@svgr/core": "*" } }, - "node_modules/@twa-dev/types": { - "version": "7.0.0", - "resolved": "git+ssh://git@github.com/UselessStudio/twa-types.git#aefaba90388592c85af3939a75a1a2f8260dc627", - "dev": true - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "node_modules/@testing-library/dom": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz", + "integrity": "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==", "dev": true, "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=14" } }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "node_modules/@testing-library/dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "@babel/types": "^7.0.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "node_modules/@testing-library/dom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@types/babel__traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", - "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "node_modules/@testing-library/dom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "@babel/types": "^7.20.7" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/@types/crypto-js": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.1.2.tgz", - "integrity": "sha512-t33RNmTu5ufG/sorROIafiCVJMx3jz95bXUMoPAZcUD14fxMXnuTzqzXZoxpR0tNx2xpw11Dlmem9vGCsrSOfA==", - "dev": true - }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, - "node_modules/@types/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g==", + "node_modules/@testing-library/dom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/@types/markdown-it": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", - "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "node_modules/@testing-library/dom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "@types/linkify-it": "*", - "@types/mdurl": "*" + "engines": { + "node": ">=8" } }, - "node_modules/@types/mdurl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.3.tgz", - "integrity": "sha512-T5k6kTXak79gwmIOaDF2UUQXFbnBE0zBUzF20pz7wDYu0RQMzWg+Ml/Pz50214NsFHBITkoi5VtdjFZnJ2ijjA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.12.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.2.tgz", - "integrity": "sha512-zQ0NYO87hyN6Xrclcqp7f8ZbXNbRfoGWNcMvHTPQp9UUrwI0mI7XBz+cu7/W6/VClYo2g63B0cjull/srU7LgQ==", + "node_modules/@testing-library/dom/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, "dependencies": { - "undici-types": "~5.26.4" + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + "node_modules/@testing-library/dom/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, - "node_modules/@types/prop-types": { - "version": "15.7.7", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.7.tgz", - "integrity": "sha512-FbtmBWCcSa2J4zL781Zf1p5YUBXQomPEcep9QZCfRfQgTxz3pJWiDFLebohZ9fFntX5ibzOkSsrJ0TEew8cAog==" + "node_modules/@testing-library/dom/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true }, - "node_modules/@types/react": { - "version": "18.2.73", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.73.tgz", - "integrity": "sha512-XcGdod0Jjv84HOC7N5ziY3x+qL0AfmubvKOZ9hJjJ2yd5EE+KYjWhdOjt387e9HPheHkdggF9atTifMRtyAaRA==", + "node_modules/@testing-library/dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@types/react-dom": { - "version": "18.2.23", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.23.tgz", - "integrity": "sha512-ZQ71wgGOTmDYpnav2knkjr3qXdAFu0vsk8Ci5w3pGAIdj7/kKAyn+VsQDhXsmzzzepAiI9leWMmubXz690AI/A==", + "node_modules/@testing-library/jest-dom": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.1.tgz", + "integrity": "sha512-Z7qMM3J2Zw5H/nC2/5CYx5YcuaD56JmDFKNIozZ89VIo6o6Y9FMhssics4e2madEKYDNEpZz3+glPGz0yWMOag==", "dev": true, "dependencies": { - "@types/react": "*" + "@adobe/css-tools": "^4.3.2", + "@babel/runtime": "^7.9.2", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + }, + "peerDependencies": { + "@jest/globals": ">= 28", + "@types/bun": "latest", + "@types/jest": ">= 28", + "jest": ">= 28", + "vitest": ">= 0.32" + }, + "peerDependenciesMeta": { + "@jest/globals": { + "optional": true + }, + "@types/bun": { + "optional": true + }, + "@types/jest": { + "optional": true + }, + "jest": { + "optional": true + }, + "vitest": { + "optional": true + } } }, - "node_modules/@types/react-transition-group": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz", - "integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==", + "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true + }, + "node_modules/@testing-library/jest-dom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.2.1.tgz", + "integrity": "sha512-sGdjws32ai5TLerhvzThYFbpnF9XtL65Cjf+gB0Dhr29BGqK+mAeN7SURSdu+eqgET4ANcWoC7FQpkaiGvBr+A==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^9.0.0", + "@types/react-dom": "^18.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@twa-dev/types": { + "version": "7.0.0", + "resolved": "git+ssh://git@github.com/UselessStudio/twa-types.git#aefaba90388592c85af3939a75a1a2f8260dc627", + "dev": true + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/crypto-js": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.1.2.tgz", + "integrity": "sha512-t33RNmTu5ufG/sorROIafiCVJMx3jz95bXUMoPAZcUD14fxMXnuTzqzXZoxpR0tNx2xpw11Dlmem9vGCsrSOfA==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g==", + "dev": true + }, + "node_modules/@types/markdown-it": { + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "dev": true, + "dependencies": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.3.tgz", + "integrity": "sha512-T5k6kTXak79gwmIOaDF2UUQXFbnBE0zBUzF20pz7wDYu0RQMzWg+Ml/Pz50214NsFHBITkoi5VtdjFZnJ2ijjA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.12.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.3.tgz", + "integrity": "sha512-sD+ia2ubTeWrOu+YMF+MTAB7E+O7qsMqAbMfW7DG3K1URwhZ5hN1pLlRVGbf4wDFzSfikL05M17EyorS86jShw==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.7", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.7.tgz", + "integrity": "sha512-FbtmBWCcSa2J4zL781Zf1p5YUBXQomPEcep9QZCfRfQgTxz3pJWiDFLebohZ9fFntX5ibzOkSsrJ0TEew8cAog==" + }, + "node_modules/@types/react": { + "version": "18.2.74", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.74.tgz", + "integrity": "sha512-9AEqNZZyBx8OdZpxzQlaFEVCSFUM2YXJH46yPOiOpm078k6ZLOCcuAzGum/zK8YBwY+dbahVNbHrbgrAwIRlqw==", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.23", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.23.tgz", + "integrity": "sha512-ZQ71wgGOTmDYpnav2knkjr3qXdAFu0vsk8Ci5w3pGAIdj7/kKAyn+VsQDhXsmzzzepAiI9leWMmubXz690AI/A==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz", + "integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==", "dependencies": { "@types/react": "*" } @@ -2090,6 +2542,27 @@ "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "7.5.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.5.0.tgz", @@ -2304,52 +2777,316 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "node_modules/@uiw/color-convert": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@uiw/color-convert/-/color-convert-2.1.1.tgz", + "integrity": "sha512-L421mBAT2NRsmYv7BQvofOEwV0iKee1upPVxMjo2NnkJWyIu4I+H1RxK9m3uT8yvcOlStZhv7BQBsFyJCGmIMg==", + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0" + } }, - "node_modules/@vitejs/plugin-react": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", - "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", - "dev": true, + "node_modules/@uiw/react-color-alpha": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@uiw/react-color-alpha/-/react-color-alpha-2.0.6.tgz", + "integrity": "sha512-EWV54kU6cWT+cpq6QTqJwtSgh3Hjdu/1umVrEC7v6vp3abHgKpmLBMznybY6zoeIh6+TnLnNLoyc8M+Jm0Aj7g==", "dependencies": { - "@babel/core": "^7.23.5", - "@babel/plugin-transform-react-jsx-self": "^7.23.3", - "@babel/plugin-transform-react-jsx-source": "^7.23.3", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.14.0" + "@uiw/color-convert": "2.0.6", + "@uiw/react-drag-event-interactive": "2.0.6" }, - "engines": { - "node": "^14.18.0 || >=16.0.0" + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" }, "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0" + "@babel/runtime": ">=7.19.0", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" } }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" + "node_modules/@uiw/react-color-alpha/node_modules/@uiw/color-convert": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@uiw/color-convert/-/color-convert-2.0.6.tgz", + "integrity": "sha512-LDu9r8geEjUgGzsuTkUu6rV5SCqR9r2liVYQxH42tZ5NkFx87Oswz/lpwthCoulhgjSWA+QEjjE3XB8Z9ove1g==", + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" }, - "engines": { - "node": ">=0.4.0" + "peerDependencies": { + "@babel/runtime": ">=7.19.0" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "node_modules/@uiw/react-color-colorful": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@uiw/react-color-colorful/-/react-color-colorful-2.0.6.tgz", + "integrity": "sha512-ZCUFeuviRJcJiu1MB1n1MbouzmrUMYYgLcWU3ZvGQOT0NkJ3PgCRJrKR/9p6X3zkDBfQ4QCUG88c9X7XiEb+SQ==", + "dependencies": { + "@uiw/color-convert": "2.0.6", + "@uiw/react-color-alpha": "2.0.6", + "@uiw/react-color-hue": "2.0.6", + "@uiw/react-color-saturation": "2.0.6" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@uiw/react-color-colorful/node_modules/@uiw/color-convert": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@uiw/color-convert/-/color-convert-2.0.6.tgz", + "integrity": "sha512-LDu9r8geEjUgGzsuTkUu6rV5SCqR9r2liVYQxH42tZ5NkFx87Oswz/lpwthCoulhgjSWA+QEjjE3XB8Z9ove1g==", + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0" + } + }, + "node_modules/@uiw/react-color-hue": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@uiw/react-color-hue/-/react-color-hue-2.0.6.tgz", + "integrity": "sha512-ytn3yH2SDM761IwoyXPBLKFSGpGxBHKopE3bgyw/5nuDq12J/oFy2uOLjBNAUy0qfZC2FARt6yCYqQcON9aChQ==", + "dependencies": { + "@uiw/color-convert": "2.0.6", + "@uiw/react-color-alpha": "2.0.6" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@uiw/react-color-hue/node_modules/@uiw/color-convert": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@uiw/color-convert/-/color-convert-2.0.6.tgz", + "integrity": "sha512-LDu9r8geEjUgGzsuTkUu6rV5SCqR9r2liVYQxH42tZ5NkFx87Oswz/lpwthCoulhgjSWA+QEjjE3XB8Z9ove1g==", + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0" + } + }, + "node_modules/@uiw/react-color-saturation": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@uiw/react-color-saturation/-/react-color-saturation-2.0.6.tgz", + "integrity": "sha512-wnM1GlxKjvFuEHhSOA/rxho2lqZyywcwscTPzgAxg59hrQ6ddUdDaiAWJiujJ+mkmGqf4xO6llAvf9epJC3AZg==", + "dependencies": { + "@uiw/color-convert": "2.0.6", + "@uiw/react-drag-event-interactive": "2.0.6" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@uiw/react-color-saturation/node_modules/@uiw/color-convert": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@uiw/color-convert/-/color-convert-2.0.6.tgz", + "integrity": "sha512-LDu9r8geEjUgGzsuTkUu6rV5SCqR9r2liVYQxH42tZ5NkFx87Oswz/lpwthCoulhgjSWA+QEjjE3XB8Z9ove1g==", + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0" + } + }, + "node_modules/@uiw/react-drag-event-interactive": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@uiw/react-drag-event-interactive/-/react-drag-event-interactive-2.0.6.tgz", + "integrity": "sha512-LO3Q5x7NMAiIiZMwd6Yulpim+bYafs8ZYOhp+uOgY3Isvbke/me2Ix62qM+gQimEQjOYuH/9GZx5aC+uOcYo2w==", + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.19.0", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", + "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.5", + "@babel/plugin-transform-react-jsx-self": "^7.23.3", + "@babel/plugin-transform-react-jsx-source": "^7.23.3", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/@vitest/expect": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.5.2.tgz", + "integrity": "sha512-rf7MTD1WCoDlN3FfYJ9Llfp0PbdtOMZ3FIF0AVkDnKbp3oiMW1c8AmvRZBcqbAhDUAvF52e9zx4WQM1r3oraVA==", + "dev": true, + "dependencies": { + "@vitest/spy": "1.5.2", + "@vitest/utils": "1.5.2", + "chai": "^4.3.10" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.5.2.tgz", + "integrity": "sha512-7IJ7sJhMZrqx7HIEpv3WrMYcq8ZNz9L6alo81Y6f8hV5mIE6yVZsFoivLZmr0D777klm1ReqonE9LyChdcmw6g==", + "dev": true, + "dependencies": { + "@vitest/utils": "1.5.2", + "p-limit": "^5.0.0", + "pathe": "^1.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner/node_modules/p-limit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", + "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/runner/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/snapshot": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.5.2.tgz", + "integrity": "sha512-CTEp/lTYos8fuCc9+Z55Ga5NVPKUgExritjF5VY7heRFUfheoAqBneUlvXSUJHUZPjnPmyZA96yLRJDP1QATFQ==", + "dev": true, + "dependencies": { + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.5.2.tgz", + "integrity": "sha512-xCcPvI8JpCtgikT9nLpHPL1/81AYqZy1GCy4+MCHBE7xi8jgsYkULpW5hrx5PGLgOQjUpb6fd15lqcriJ40tfQ==", + "dev": true, + "dependencies": { + "tinyspy": "^2.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.5.2.tgz", + "integrity": "sha512-sWOmyofuXLJ85VvXNsroZur7mOJGiQeM0JN3/0D1uU8U9bGFM69X1iqHaRXl6R8BwaLY6yPCogP257zxTzkUdA==", + "dev": true, + "dependencies": { + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -2392,6 +3129,15 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "dependencies": { + "deep-equal": "^2.0.5" + } + }, "node_modules/array-buffer-byte-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", @@ -2539,6 +3285,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -2650,6 +3411,15 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -2721,6 +3491,24 @@ "node": ">= 10" } }, + "node_modules/chai": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -2734,6 +3522,33 @@ "node": ">=4" } }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, "node_modules/clsx": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", @@ -2755,6 +3570,18 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2811,11 +3638,42 @@ "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", + "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==", + "dev": true, + "dependencies": { + "rrweb-cssom": "^0.6.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/csstype": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/data-view-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", @@ -2884,6 +3742,56 @@ } } }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true + }, + "node_modules/deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -2924,10 +3832,28 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "dependencies": { "path-type": "^4.0.0" @@ -2936,6 +3862,28 @@ "node": ">=8" } }, + "node_modules/dnd-core": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-16.0.1.tgz", + "integrity": "sha512-HK294sl7tbw6F6IeuK16YSBUoorvHpY8RHO+9yFfaJyCDVb6n7PRcezrOEOa2SBCqiYpemh5Jx20ZcjKdFAVng==", + "dependencies": { + "@react-dnd/asap": "^5.0.1", + "@react-dnd/invariant": "^4.0.1", + "redux": "^4.2.0" + } + }, + "node_modules/dnd-multi-backend": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/dnd-multi-backend/-/dnd-multi-backend-8.0.3.tgz", + "integrity": "sha512-yFFARotr+OEJk787Fsj+V52pi6j7+Pt/CRp3IR2Ai3fnxA/z6J54T7+gxkXzXu4cvxTNE7NiBzzAaJ2f7JjFTw==", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/LouisBrunner" + }, + "peerDependencies": { + "dnd-core": "^16.0.1" + } + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -2948,6 +3896,12 @@ "node": ">=6.0.0" } }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true + }, "node_modules/dom-helpers": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", @@ -2968,9 +3922,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.723", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.723.tgz", - "integrity": "sha512-rxFVtrMGMFROr4qqU6n95rUi9IlfIm+lIAt+hOToy/9r6CDv0XiEcQdC3VP71y1pE5CFTzKV0RvxOGYCPWWHPw==", + "version": "1.4.724", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.724.tgz", + "integrity": "sha512-RTRvkmRkGhNBPPpdrgtDKvmOEYTrPlXDfc0J/Nfq5s29tEahAwhiX4mmhNzj6febWMleulxVYPh7QwCSL/EldA==", "dev": true }, "node_modules/entities": { @@ -3074,6 +4028,26 @@ "node": ">= 0.4" } }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/es-iterator-helpers": { "version": "1.0.18", "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", @@ -3630,11 +4604,49 @@ "node": ">=0.10.0" } }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { "version": "3.3.2", @@ -3750,6 +4762,18 @@ "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, + "node_modules/flip-toolkit": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/flip-toolkit/-/flip-toolkit-7.1.0.tgz", + "integrity": "sha512-tvids+uibr8gVFUp1xHMkNSIFvM4++Xr4jAJouUVsId2hv3YvhvC4Ht2FJzdxBZHhI4AeULPFAF6z9fhc20XWQ==", + "dependencies": { + "rematrix": "0.2.2" + }, + "engines": { + "node": ">=8", + "npm": ">=5" + } + }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -3759,6 +4783,20 @@ "is-callable": "^1.1.3" } }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3814,6 +4852,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/fuse.js": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.0.0.tgz", + "integrity": "sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q==", + "engines": { + "node": ">=10" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -3823,6 +4869,15 @@ "node": ">=6.9.0" } }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -3842,6 +4897,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-symbol-description": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", @@ -4058,6 +5125,65 @@ "react-is": "^16.7.0" } }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -4091,6 +5217,15 @@ "node": ">=0.8.19" } }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -4121,6 +5256,22 @@ "node": ">= 0.4" } }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-array-buffer": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", @@ -4287,13 +5438,10 @@ } }, "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", "dev": true, - "engines": { - "node": ">= 0.4" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4343,6 +5491,12 @@ "node": ">=8" } }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -4360,13 +5514,10 @@ } }, "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", "dev": true, - "engines": { - "node": ">= 0.4" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4386,6 +5537,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", @@ -4432,13 +5595,10 @@ } }, "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", "dev": true, - "engines": { - "node": ">= 0.4" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4456,16 +5616,13 @@ } }, "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", "dev": true, "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4477,23 +5634,379 @@ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/js-tokens": { @@ -4560,6 +6073,46 @@ "node": ">=8" } }, + "node_modules/jsdom": { + "version": "24.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.0.0.tgz", + "integrity": "sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==", + "dev": true, + "dependencies": { + "cssstyle": "^4.0.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.7", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.3", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.16.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^2.11.2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -4607,6 +6160,12 @@ "node": ">=6" } }, + "node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true + }, "node_modules/jssha": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/jssha/-/jssha-3.3.1.tgz", @@ -4675,6 +6234,22 @@ "uc.micro": "^1.0.1" } }, + "node_modules/local-pkg": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "dev": true, + "dependencies": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -4735,6 +6310,15 @@ "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.12.2.tgz", "integrity": "sha512-uvhvYPC8kGPjXT3MyKMrL3JitEAmDMp30lVkuq/590Mw9ok6pWcFCwXJveo0t5uqYw1UREQHofD+jVpdjBv8wg==" }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.1" + } + }, "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", @@ -4753,6 +6337,24 @@ "yallist": "^3.0.2" } }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", + "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, "node_modules/markdown-it": { "version": "12.3.2", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", @@ -4806,6 +6408,12 @@ "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", "dev": true }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -4828,6 +6436,48 @@ "node": ">=8.6" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -4861,6 +6511,18 @@ "node": ">=10" } }, + "node_modules/mlly": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.5.0.tgz", + "integrity": "sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==", + "dev": true, + "dependencies": { + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.0.3", + "ufo": "^1.3.2" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -4906,6 +6568,39 @@ "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, + "node_modules/npm-run-path": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", + "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "dev": true + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -4923,6 +6618,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -5020,6 +6731,21 @@ "wrappy": "1" } }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -5106,6 +6832,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -5146,6 +6884,21 @@ "node": ">=8" } }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -5163,6 +6916,17 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pkg-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, "node_modules/plausible-tracker": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/plausible-tracker/-/plausible-tracker-0.3.8.tgz", @@ -5235,6 +6999,38 @@ "node": ">= 0.8.0" } }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -5406,6 +7202,12 @@ "node": ">=8" } }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -5415,6 +7217,12 @@ "node": ">=6" } }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -5435,6 +7243,20 @@ } ] }, + "node_modules/rdndmb-html5-to-touch": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/rdndmb-html5-to-touch/-/rdndmb-html5-to-touch-8.0.3.tgz", + "integrity": "sha512-VfIbLjlL9NAnZzc2M5fGPCNkDyK12+ahgILGO5RjS7jkgUlxwB0c/XvxVQNfY/2ocg7isTY/G7tqxJk5fSTZAA==", + "dependencies": { + "dnd-multi-backend": "^8.0.3", + "react-dnd-html5-backend": "^16.0.1", + "react-dnd-touch-backend": "^16.0.1" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/LouisBrunner" + } + }, "node_modules/react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", @@ -5446,6 +7268,84 @@ "node": ">=0.10.0" } }, + "node_modules/react-dnd": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/react-dnd/-/react-dnd-16.0.1.tgz", + "integrity": "sha512-QeoM/i73HHu2XF9aKksIUuamHPDvRglEwdHL4jsp784BgUuWcg6mzfxT0QDdQz8Wj0qyRKx2eMg8iZtWvU4E2Q==", + "dependencies": { + "@react-dnd/invariant": "^4.0.1", + "@react-dnd/shallowequal": "^4.0.1", + "dnd-core": "^16.0.1", + "fast-deep-equal": "^3.1.3", + "hoist-non-react-statics": "^3.3.2" + }, + "peerDependencies": { + "@types/hoist-non-react-statics": ">= 3.3.1", + "@types/node": ">= 12", + "@types/react": ">= 16", + "react": ">= 16.14" + }, + "peerDependenciesMeta": { + "@types/hoist-non-react-statics": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-dnd-html5-backend": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/react-dnd-html5-backend/-/react-dnd-html5-backend-16.0.1.tgz", + "integrity": "sha512-Wu3dw5aDJmOGw8WjH1I1/yTH+vlXEL4vmjk5p+MHxP8HuHJS1lAGeIdG/hze1AvNeXWo/JgULV87LyQOr+r5jw==", + "dependencies": { + "dnd-core": "^16.0.1" + } + }, + "node_modules/react-dnd-multi-backend": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/react-dnd-multi-backend/-/react-dnd-multi-backend-8.0.3.tgz", + "integrity": "sha512-IwH7Mf6R05KIFohX0hHMTluoAvuUD8SO15KCD+9fY0nJ4nc1FGCMCSyMZw8R1XNStKp+JnNg3ZMtiaf5DebSUg==", + "dependencies": { + "dnd-multi-backend": "^8.0.3", + "react-dnd-preview": "^8.0.3" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/LouisBrunner" + }, + "peerDependencies": { + "dnd-core": "^16.0.1", + "react": "^16.14.0 || ^17.0.2 || ^18.0.0", + "react-dnd": "^16.0.1", + "react-dom": "^16.14.0 || ^17.0.2 || ^18.0.0" + } + }, + "node_modules/react-dnd-preview": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/react-dnd-preview/-/react-dnd-preview-8.0.3.tgz", + "integrity": "sha512-s69Ro47QYDthDhj73iQ0VioMCjtlZ1AytKBDkQaHKm5DTjA8D2bIaFKCBQd330QEW0SIzqLJrZGCSlIY2xraJg==", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/LouisBrunner" + }, + "peerDependencies": { + "react": "^16.14.0 || ^17.0.2 || ^18.0.0", + "react-dnd": "^16.0.1" + } + }, + "node_modules/react-dnd-touch-backend": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/react-dnd-touch-backend/-/react-dnd-touch-backend-16.0.1.tgz", + "integrity": "sha512-NonoCABzzjyWGZuDxSG77dbgMZ2Wad7eQiCd/ECtsR2/NBLTjGksPUx9UPezZ1nQ/L7iD130Tz3RUshL/ClKLA==", + "dependencies": { + "@react-dnd/invariant": "^4.0.1", + "dnd-core": "^16.0.1" + } + }, "node_modules/react-dom": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", @@ -5458,6 +7358,42 @@ "react": "^18.2.0" } }, + "node_modules/react-flip-toolkit": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/react-flip-toolkit/-/react-flip-toolkit-7.1.0.tgz", + "integrity": "sha512-KJ2IecKpYOJWgtXY9myyJzzC96FJaE9/8pFSAKgIoG54tiUAZ64ksDpmB+QmMofqFTa06RK7xWb9Rfavf8qz4Q==", + "dependencies": { + "flip-toolkit": "7.1.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=8", + "npm": ">=5" + }, + "peerDependencies": { + "react": ">= 16.x", + "react-dom": ">= 16.x" + } + }, + "node_modules/react-from-dom": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/react-from-dom/-/react-from-dom-0.7.3.tgz", + "integrity": "sha512-9IK6R7+eD1wOAMC2ZCrENev0eK1625cb7vX+cnnOR9LBRNbjKiaJk4ij2zQbcefEXTWjXFhA7CTO1cd8wMONnw==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-inlinesvg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/react-inlinesvg/-/react-inlinesvg-4.1.3.tgz", + "integrity": "sha512-p1+wkr1UQZyLw/3bdpnHO3v3tMNVWyxWnAEY6ML/Ql9ldDYTBTy6HqAyNl7u3au925XPffLMiXKnQrqZeJAldw==", + "dependencies": { + "react-from-dom": "^0.7.2" + }, + "peerDependencies": { + "react": "16.8 - 18" + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -5517,6 +7453,27 @@ "react-dom": ">=16.6.0" } }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/redux": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "dependencies": { + "@babel/runtime": "^7.9.2" + } + }, "node_modules/reflect.getprototypeof": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", @@ -5561,6 +7518,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/rematrix": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/rematrix/-/rematrix-0.2.2.tgz", + "integrity": "sha512-agFFS3RzrLXJl5LY5xg/xYyXvUuVAnkhgKO7RaO9J1Ssth6yvbO+PIiV67V59MB5NCdAK2flvGvNT4mdKVniFA==" + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, "node_modules/requizzle": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", @@ -5620,6 +7588,46 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rollup": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.14.0.tgz", + "integrity": "sha512-Qe7w62TyawbDzB4yt32R0+AbIo6m1/sqO7UPzFS8Z/ksL5mrfhA0v4CavfdmFav3D+ub4QeAgsGEe84DoWe/nQ==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.14.0", + "@rollup/rollup-android-arm64": "4.14.0", + "@rollup/rollup-darwin-arm64": "4.14.0", + "@rollup/rollup-darwin-x64": "4.14.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.14.0", + "@rollup/rollup-linux-arm64-gnu": "4.14.0", + "@rollup/rollup-linux-arm64-musl": "4.14.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.14.0", + "@rollup/rollup-linux-riscv64-gnu": "4.14.0", + "@rollup/rollup-linux-s390x-gnu": "4.14.0", + "@rollup/rollup-linux-x64-gnu": "4.14.0", + "@rollup/rollup-linux-x64-musl": "4.14.0", + "@rollup/rollup-win32-arm64-msvc": "4.14.0", + "@rollup/rollup-win32-ia32-msvc": "4.14.0", + "@rollup/rollup-win32-x64-msvc": "4.14.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", + "dev": true + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -5678,6 +7686,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, "node_modules/scheduler": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", @@ -5785,6 +7811,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -5821,6 +7865,51 @@ "node": ">=0.10.0" } }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true + }, + "node_modules/std-env": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", + "dev": true + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/string.prototype.matchall": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", @@ -5902,6 +7991,30 @@ "node": ">=8" } }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -5914,6 +8027,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strip-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.0.tgz", + "integrity": "sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==", + "dev": true, + "dependencies": { + "js-tokens": "^9.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.0.tgz", + "integrity": "sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==", + "dev": true + }, "node_modules/stylis": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", @@ -5947,12 +8078,42 @@ "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", "dev": true }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/tinybench": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", + "integrity": "sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==", + "dev": true + }, + "node_modules/tinypool": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.4.tgz", + "integrity": "sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", + "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -5985,6 +8146,33 @@ "node": ">=8.0" } }, + "node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", + "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", + "dev": true, + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/ts-api-utils": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", @@ -6015,6 +8203,15 @@ "node": ">= 0.8.0" } }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -6119,6 +8316,12 @@ "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", "dev": true }, + "node_modules/ufo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz", + "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==", + "dev": true + }, "node_modules/uglify-js": { "version": "3.17.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", @@ -6157,6 +8360,15 @@ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", @@ -6196,6 +8408,27 @@ "punycode": "^2.1.0" } }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/use-debounce": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/use-debounce/-/use-debounce-10.0.0.tgz", + "integrity": "sha512-XRjvlvCB46bah9IBXVnq/ACP2lxqXyZj0D9hj4K5OzNroMDpTEBg8Anuh1/UfRTRs7pLhQ+RiNxxwZu9+MVl1A==", + "engines": { + "node": ">= 16.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, "node_modules/vite": { "version": "5.2.7", "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.7.tgz", @@ -6251,6 +8484,28 @@ } } }, + "node_modules/vite-node": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.5.2.tgz", + "integrity": "sha512-Y8p91kz9zU+bWtF7HGt6DVw2JbhyuB2RlZix3FPYAYmUyZ3n7iTp8eSyLyY6sxtPegvxQtmlTMhfPhUfCUF93A==", + "dev": true, + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, "node_modules/vite-plugin-svgr": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-4.2.0.tgz", @@ -6265,38 +8520,124 @@ "vite": "^2.6.0 || 3 || 4 || 5" } }, - "node_modules/vite/node_modules/rollup": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.2.tgz", - "integrity": "sha512-MIlLgsdMprDBXC+4hsPgzWUasLO9CE4zOkj/u6j+Z6j5A4zRY+CtiXAdJyPtgCsc42g658Aeh1DlrdVEJhsL2g==", + "node_modules/vitest": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.5.2.tgz", + "integrity": "sha512-l9gwIkq16ug3xY7BxHwcBQovLZG75zZL0PlsiYQbf76Rz6QGs54416UWMtC0jXeihvHvcHrf2ROEjkQRVpoZYw==", "dev": true, "dependencies": { - "@types/estree": "1.0.5" + "@vitest/expect": "1.5.2", + "@vitest/runner": "1.5.2", + "@vitest/snapshot": "1.5.2", + "@vitest/spy": "1.5.2", + "@vitest/utils": "1.5.2", + "acorn-walk": "^8.3.2", + "chai": "^4.3.10", + "debug": "^4.3.4", + "execa": "^8.0.1", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "std-env": "^3.5.0", + "strip-literal": "^2.0.0", + "tinybench": "^2.5.1", + "tinypool": "^0.8.3", + "vite": "^5.0.0", + "vite-node": "1.5.2", + "why-is-node-running": "^2.2.2" }, "bin": { - "rollup": "dist/bin/rollup" + "vitest": "vitest.mjs" }, "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" + "node": "^18.0.0 || >=20.0.0" }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.13.2", - "@rollup/rollup-android-arm64": "4.13.2", - "@rollup/rollup-darwin-arm64": "4.13.2", - "@rollup/rollup-darwin-x64": "4.13.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.13.2", - "@rollup/rollup-linux-arm64-gnu": "4.13.2", - "@rollup/rollup-linux-arm64-musl": "4.13.2", - "@rollup/rollup-linux-powerpc64le-gnu": "4.13.2", - "@rollup/rollup-linux-riscv64-gnu": "4.13.2", - "@rollup/rollup-linux-s390x-gnu": "4.13.2", - "@rollup/rollup-linux-x64-gnu": "4.13.2", - "@rollup/rollup-linux-x64-musl": "4.13.2", - "@rollup/rollup-win32-arm64-msvc": "4.13.2", - "@rollup/rollup-win32-ia32-msvc": "4.13.2", - "@rollup/rollup-win32-x64-msvc": "4.13.2", - "fsevents": "~2.3.2" + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "1.5.2", + "@vitest/ui": "1.5.2", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", + "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", + "dev": true, + "dependencies": { + "tr46": "^5.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" } }, "node_modules/which": { @@ -6357,18 +8698,15 @@ } }, "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", "dev": true, "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6393,6 +8731,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/why-is-node-running": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", + "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", + "dev": true, + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -6408,6 +8762,42 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "node_modules/ws": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, "node_modules/xmlcreate": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", diff --git a/package.json b/package.json index 4784f5c..0704f47 100644 --- a/package.json +++ b/package.json @@ -1,15 +1,16 @@ { "name": "teleotp", "private": true, - "version": "0.2.1", + "version": "0.3.0", "type": "module", "homepage": "https://github.com/UselessStudio/TeleOTP", "scripts": { - "dev": "vite", + "dev": "vite --host", "build": "npm run generate && tsc && vite build", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "preview": "vite preview", - "generate": "npx mkdirp src/migration/proto/generated && pbjs -t static-module -w es6 src/migration/proto/migration.proto -o src/migration/proto/generated/migration.js && pbts -o src/migration/proto/generated/migration.d.ts src/migration/proto/generated/migration.js" + "generate": "npx mkdirp src/migration/proto/generated && pbjs -t static-module -w es6 src/migration/proto/migration.proto -o src/migration/proto/generated/migration.js && pbts -o src/migration/proto/generated/migration.d.ts src/migration/proto/generated/migration.js", + "test": "vitest" }, "dependencies": { "@emotion/react": "^11.11.1", @@ -17,20 +18,35 @@ "@fontsource/inter": "^5.0.8", "@mui/icons-material": "^5.14.9", "@mui/material": "^5.14.10", + "@uiw/color-convert": "^2.1.1", + "@uiw/react-color-colorful": "^2.0.6", "copy-text-to-clipboard": "^3.2.0", - "crypto-js": "^4.1.1", + "crypto-js": "4.1.1", + "fuse.js": "^7.0.0", "lottie-react": "^2.4.0", "nanoid": "^5.0.1", "otpauth": "^9.1.4", "plausible-tracker": "^0.3.8", "protobufjs": "^7.2.5", + "rdndmb-html5-to-touch": "^8.0.3", "react": "^18.2.0", + "react-dnd": "^16.0.1", + "react-dnd-html5-backend": "^16.0.1", + "react-dnd-multi-backend": "^8.0.3", + "react-dnd-preview": "^8.0.3", + "react-dnd-touch-backend": "^16.0.1", "react-dom": "^18.2.0", - "react-router-dom": "^6.16.0" + "react-flip-toolkit": "7.1.0", + "react-inlinesvg": "^4.1.3", + "react-router-dom": "^6.16.0", + "use-debounce": "^10.0.0" }, "devDependencies": { + "@testing-library/jest-dom": "^6.4.1", + "@testing-library/react": "^14.2.1", "@twa-dev/types": "github:UselessStudio/twa-types", "@types/crypto-js": "^4.1.2", + "@types/jest": "^29.5.12", "@types/node": "^20.12.2", "@types/react": "^18.2.73", "@types/react-dom": "^18.2.23", @@ -41,9 +57,11 @@ "eslint-plugin-react": "^7.34.1", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.6", + "jsdom": "^24.0.0", "protobufjs-cli": "^1.1.2", "typescript": "^5.4.3", "vite": "5.2.7", - "vite-plugin-svgr": "^4.2.0" + "vite-plugin-svgr": "^4.2.0", + "vitest": "^1.5.2" } } diff --git a/src/Root.tsx b/src/Root.tsx index 9f8879b..7802473 100644 --- a/src/Root.tsx +++ b/src/Root.tsx @@ -1,15 +1,17 @@ import {Box, CircularProgress, CssBaseline, Stack, ThemeProvider} from "@mui/material"; import {Outlet, useLocation} from "react-router-dom"; -import {FC, useContext} from "react"; +import {FC, lazy, useContext} from "react"; import useTelegramBackButton from "./hooks/telegram/useTelegramBackButton.ts"; import useTelegramTheme from "./hooks/telegram/useTelegramTheme.ts"; import {EncryptionManagerContext} from "./managers/encryption.tsx"; +import {StorageManagerContext} from "./managers/storage/storage.tsx"; + import Decrypt from "./pages/Decrypt.tsx"; -import {StorageManagerContext} from "./managers/storage.tsx"; -import PasswordSetup from "./pages/PasswordSetup.tsx"; -import ExportAccounts from "./pages/ExportAccounts.tsx"; -function LoadingIndicator() { +const PasswordSetup = lazy(() => import("./pages/PasswordSetup.tsx")); +const ExportAccounts = lazy(() => import("./pages/ExportAccounts.tsx")); + +export function LoadingIndicator() { return diff --git a/src/assets/icons/cloudflare.svg b/src/assets/icons/cloudflare.svg deleted file mode 100644 index a1cf2d6..0000000 --- a/src/assets/icons/cloudflare.svg +++ /dev/null @@ -1 +0,0 @@ -Cloudflare \ No newline at end of file diff --git a/src/assets/icons/discord.svg b/src/assets/icons/discord.svg deleted file mode 100644 index 9d7796b..0000000 --- a/src/assets/icons/discord.svg +++ /dev/null @@ -1 +0,0 @@ -Discord \ No newline at end of file diff --git a/src/assets/icons/docker.svg b/src/assets/icons/docker.svg deleted file mode 100644 index 0021a8a..0000000 --- a/src/assets/icons/docker.svg +++ /dev/null @@ -1 +0,0 @@ -Docker \ No newline at end of file diff --git a/src/assets/icons/npm.svg b/src/assets/icons/npm.svg deleted file mode 100644 index e04468d..0000000 --- a/src/assets/icons/npm.svg +++ /dev/null @@ -1 +0,0 @@ -npm \ No newline at end of file diff --git a/src/assets/icons/paypal.svg b/src/assets/icons/paypal.svg deleted file mode 100644 index 4b4b78b..0000000 --- a/src/assets/icons/paypal.svg +++ /dev/null @@ -1 +0,0 @@ -PayPal \ No newline at end of file diff --git a/src/assets/icons/pterodactyl.svg b/src/assets/icons/pterodactyl.svg deleted file mode 100644 index f364db0..0000000 --- a/src/assets/icons/pterodactyl.svg +++ /dev/null @@ -1 +0,0 @@ -Pterodactyl \ No newline at end of file diff --git a/src/assets/icons/twitch.svg b/src/assets/icons/twitch.svg deleted file mode 100644 index 8aaa4a9..0000000 --- a/src/assets/icons/twitch.svg +++ /dev/null @@ -1 +0,0 @@ -Twitch \ No newline at end of file diff --git a/src/assets/icons/vk.svg b/src/assets/icons/vk.svg deleted file mode 100644 index 2eed899..0000000 --- a/src/assets/icons/vk.svg +++ /dev/null @@ -1 +0,0 @@ -VK \ No newline at end of file diff --git a/src/assets/magnification_glass_lottie.json b/src/assets/magnification_glass_lottie.json new file mode 100644 index 0000000..199630f --- /dev/null +++ b/src/assets/magnification_glass_lottie.json @@ -0,0 +1 @@ +{"tgs":1,"v":"5.5.2","fr":60,"ip":0,"op":180,"w":512,"h":512,"nm":"Magnification glass - right","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Handle new","sr":1,"ks":{"r":{"a":0,"k":1},"p":{"a":0,"k":[129.262,374.479,0]},"a":{"a":0,"k":[138.762,365.479,0]},"s":{"a":0,"k":[99,99,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[8.941,11.312],[-1.929,-7.173],[0.919,-3.281],[0,0]],"o":[[0,0],[1.481,5.507],[0,0],[0,0]],"v":[[-6.814,-13.943],[5.965,2.039],[5.806,13.943],[-1.324,9.7]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.29411765933,0.349019616842,0.388235300779,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[216.283,328.92]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[15.651,5.402],[-16.992,9.701]],"o":[[-6.851,3.348],[0,0],[0,0]],"v":[[14,-5.421],[-17.631,-0.836],[17.631,1.677]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.29411765933,0.349019616842,0.388235300779,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[103.03,444.412]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.482,2.482],[0,0],[-2.482,2.482],[0,0],[-2.482,-2.482],[0,0],[2.482,-2.482],[0,0]],"o":[[0,0],[-2.482,-2.482],[0,0],[2.482,-2.482],[0,0],[2.482,2.482],[0,0],[-2.482,2.482]],"v":[[-48.443,48.443],[-48.443,48.443],[-48.443,39.454],[39.455,-48.443],[48.443,-48.443],[48.443,-48.443],[48.443,-39.455],[-39.455,48.443]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.054901961237,0.058823529631,0.066666670144,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[151.179,385.309]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-18.37,18.37],[-0.906,10.578]],"o":[[12.119,-6.039],[35.378,-35.378],[0,0]],"v":[[-50.069,51.976],[-6.472,13.369],[50.069,-51.976]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.29411765933,0.349019616842,0.388235300779,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[168.891,390.597]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[3.02,1.186]],"o":[[-3.418,-3.513],[0,0]],"v":[[4.563,3.494],[-4.563,-3.494]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.435294121504,0.537254929543,0.607843160629,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[173.589,285.593]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":30},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-24.617,24.617],[-0.906,10.578],[18.238,18.238],[11.598,-0.993],[35.377,-35.377],[0.036,-16],[-6.989,-6.989],[-16,0.035]],"o":[[35.378,-35.378],[0.993,-11.598],[-18.441,-18.441],[-10.578,0.906],[-24.617,24.617],[-0.035,16],[6.989,6.989],[16,-0.035]],"v":[[25.682,40.53],[82.223,-24.815],[57.453,-57.457],[24.816,-82.222],[-40.529,-25.681],[-82.309,30.105],[-64.162,64.163],[-30.104,82.31]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.058823529631,0.06274510175,0.066666670144,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[136.737,363.435]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[8.234,8.234],[0,0],[-8.234,8.234],[0,0],[-6.613,-6.613],[0,0],[6.613,-6.613],[0,0]],"o":[[0,0],[-8.234,-8.234],[0,0],[6.613,-6.613],[0,0],[6.613,6.613],[0,0],[-8.234,8.234]],"v":[[-52.32,52.32],[-52.32,52.32],[-52.32,22.502],[23.718,-53.535],[47.666,-53.535],[53.535,-47.666],[53.535,-23.718],[-22.502,52.32]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0,0.553,0.592,0.635,0.139,0.557,0.596,0.637,0.492,0.561,0.6,0.639,0.839,0.551,0.59,0.633,0.999,0.541,0.58,0.627,0,0,0.139,0.5,0.492,1,0.839,0.5,0.999,0]}},"s":{"a":0,"k":[-10.915,-18.839]},"e":{"a":0,"k":[19.277,10.854]},"t":1,"nm":"Gradient Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[121.95,351.273]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-24.617,24.617],[-0.906,10.578],[18.238,18.238],[11.598,-0.993],[35.377,-35.377],[0.036,-16],[-6.989,-6.989],[-16,0.035]],"o":[[35.378,-35.378],[0.993,-11.598],[-18.441,-18.441],[-10.578,0.906],[-24.617,24.617],[-0.035,16],[6.989,6.989],[16,-0.035]],"v":[[25.682,40.53],[82.223,-24.815],[57.453,-57.457],[24.816,-82.222],[-40.529,-25.681],[-82.309,30.105],[-64.162,64.163],[-30.104,82.31]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.082,0.114,0.165,0.201,0.069,0.084,0.114,0.313,0.055,0.055,0.063]}},"s":{"a":0,"k":[86.76,63.518]},"e":{"a":0,"k":[-15.984,166.26]},"t":1,"nm":"Gradient Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[136.737,363.435]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 8","bm":0,"hd":false}],"ip":0,"op":9999,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"glass 2","sr":1,"ks":{"r":{"a":0,"k":45.436},"p":{"a":0,"k":[297.107,206.008,0]},"a":{"a":0,"k":[-4.714,-102.353,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":1,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[57.449,-1.813],[1.813,57.449],[-57.449,1.813],[-1.813,-57.449]],"o":[[-57.449,1.813],[-1.813,-57.449],[57.449,-1.813],[1.813,57.449]],"v":[[-1.421,1.659],[-108.72,-99.075],[-7.986,-206.374],[99.313,-105.64]],"c":true}]},{"t":9,"s":[{"i":[[6.83,-1.813],[0.216,57.449],[-6.83,1.813],[-0.216,-57.449]],"o":[[-6.83,1.813],[-0.216,-57.449],[6.83,-1.813],[0.215,57.449]],"v":[[16.348,1.799],[3.592,-98.935],[15.567,-206.234],[28.323,-105.5]],"c":true}],"h":1},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[-0.099,-1.813],[-0.003,57.449],[0.099,1.813],[0.003,-57.449]],"o":[[0.099,1.813],[0.003,-57.449],[-0.099,-1.813],[-0.003,57.449]],"v":[[-27.22,1.636],[-27.034,-99.098],[-27.209,-206.397],[-27.394,-105.662]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[57.449,-1.813],[1.813,57.449],[-57.449,1.813],[-1.813,-57.449]],"o":[[-57.449,1.813],[-1.813,-57.449],[57.449,-1.813],[1.813,57.449]],"v":[[-1.421,1.659],[-108.72,-99.075],[-7.986,-206.374],[99.313,-105.64]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[57.449,-1.813],[1.813,57.449],[-57.449,1.813],[-1.813,-57.449]],"o":[[-57.449,1.813],[-1.813,-57.449],[57.449,-1.813],[1.813,57.449]],"v":[[-1.421,1.659],[-108.72,-99.075],[-7.986,-206.374],[99.313,-105.64]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[-0.099,-1.813],[-0.003,57.449],[0.099,1.813],[0.003,-57.449]],"o":[[0.099,1.813],[0.003,-57.449],[-0.099,-1.813],[-0.003,57.449]],"v":[[-27.22,1.636],[-27.034,-99.098],[-27.209,-206.397],[-27.394,-105.662]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":151,"s":[{"i":[[6.83,-1.813],[0.216,57.449],[-6.83,1.813],[-0.216,-57.449]],"o":[[-6.83,1.813],[-0.216,-57.449],[6.83,-1.813],[0.215,57.449]],"v":[[16.348,1.799],[3.592,-98.935],[15.567,-206.234],[28.323,-105.5]],"c":true}]},{"t":160,"s":[{"i":[[57.449,-1.813],[1.813,57.449],[-57.449,1.813],[-1.813,-57.449]],"o":[[-57.449,1.813],[-1.813,-57.449],[57.449,-1.813],[1.813,57.449]],"v":[[-1.421,1.659],[-108.72,-99.075],[-7.986,-206.374],[99.313,-105.64]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":1,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[2.119,67.151],[67.151,-2.119],[-2.119,-67.151],[-67.143,2.126]],"o":[[-2.111,-67.144],[-67.151,2.119],[2.119,67.151],[67.151,-2.119]],"v":[[116.87,-106.194],[-8.547,-223.938],[-126.299,-98.513],[-0.881,19.231]],"c":true}]},{"t":9,"s":[{"i":[[0.252,67.151],[7.983,-2.119],[-0.252,-67.151],[-7.982,2.126]],"o":[[-0.251,-67.144],[-7.983,2.119],[0.252,67.151],[7.983,-2.119]],"v":[[30.41,-106.054],[15.501,-223.798],[1.502,-98.373],[16.412,19.371]],"c":true}],"h":1},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[-0.004,67.151],[-0.116,-2.119],[0.004,-67.151],[0.117,2.126]],"o":[[0.004,-67.144],[0.116,2.119],[-0.004,67.151],[-0.116,-2.119]],"v":[[-27.425,-106.217],[-27.208,-223.961],[-27.004,-98.536],[-27.221,19.208]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[2.119,67.151],[67.151,-2.119],[-2.119,-67.151],[-67.143,2.126]],"o":[[-2.111,-67.144],[-67.151,2.119],[2.119,67.151],[67.151,-2.119]],"v":[[116.87,-106.194],[-8.547,-223.938],[-126.299,-98.513],[-0.881,19.231]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[2.119,67.151],[67.151,-2.119],[-2.119,-67.151],[-67.143,2.126]],"o":[[-2.111,-67.144],[-67.151,2.119],[2.119,67.151],[67.151,-2.119]],"v":[[116.87,-106.194],[-8.547,-223.938],[-126.299,-98.513],[-0.881,19.231]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[-0.004,67.151],[-0.116,-2.119],[0.004,-67.151],[0.117,2.126]],"o":[[0.004,-67.144],[0.116,2.119],[-0.004,67.151],[-0.116,-2.119]],"v":[[-27.425,-106.217],[-27.208,-223.961],[-27.004,-98.536],[-27.221,19.208]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":151,"s":[{"i":[[0.252,67.151],[7.983,-2.119],[-0.252,-67.151],[-7.982,2.126]],"o":[[-0.251,-67.144],[-7.983,2.119],[0.252,67.151],[7.983,-2.119]],"v":[[30.41,-106.054],[15.501,-223.798],[1.502,-98.373],[16.412,19.371]],"c":true}]},{"t":160,"s":[{"i":[[2.119,67.151],[67.151,-2.119],[-2.119,-67.151],[-67.143,2.126]],"o":[[-2.111,-67.144],[-67.151,2.119],[2.119,67.151],[67.151,-2.119]],"v":[[116.87,-106.194],[-8.547,-223.938],[-126.299,-98.513],[-0.881,19.231]],"c":true}]}]},"nm":"Контур 2","hd":false},{"ty":"fl","c":{"a":0,"k":[0.415686279535,0.435294121504,0.46274510026,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":10},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":1,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0.361,-67.182],[67.182,0.361],[-0.361,67.182],[-67.182,-0.361]],"o":[[-0.361,67.182],[-67.182,-0.361],[0.361,-67.182],[67.182,0.361]],"v":[[116.932,-101.699],[-5.366,19.289],[-126.354,-103.008],[-4.057,-223.997]],"c":true}]},{"t":9,"s":[{"i":[[0.043,-67.182],[7.987,0.361],[-0.043,67.182],[-7.987,-0.361]],"o":[[-0.043,67.182],[-7.987,-0.361],[0.043,-67.182],[7.987,0.361]],"v":[[30.418,-101.559],[15.879,19.429],[1.495,-102.868],[16.034,-223.857]],"c":true}],"h":1},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[-0.001,-67.182],[-0.116,0.361],[0.001,67.182],[0.116,-0.361]],"o":[[0.001,67.182],[0.116,-0.361],[-0.001,-67.182],[-0.116,0.361]],"v":[[-27.425,-101.722],[-27.213,19.267],[-27.004,-103.031],[-27.215,-224.019]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0.361,-67.182],[67.182,0.361],[-0.361,67.182],[-67.182,-0.361]],"o":[[-0.361,67.182],[-67.182,-0.361],[0.361,-67.182],[67.182,0.361]],"v":[[116.932,-101.699],[-5.366,19.289],[-126.354,-103.008],[-4.057,-223.997]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0.361,-67.182],[67.182,0.361],[-0.361,67.182],[-67.182,-0.361]],"o":[[-0.361,67.182],[-67.182,-0.361],[0.361,-67.182],[67.182,0.361]],"v":[[116.932,-101.699],[-5.366,19.289],[-126.354,-103.008],[-4.057,-223.997]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[-0.001,-67.182],[-0.116,0.361],[0.001,67.182],[0.116,-0.361]],"o":[[0.001,67.182],[0.116,-0.361],[-0.001,-67.182],[-0.116,0.361]],"v":[[-27.425,-101.722],[-27.213,19.267],[-27.004,-103.031],[-27.215,-224.019]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":151,"s":[{"i":[[0.043,-67.182],[7.987,0.361],[-0.043,67.182],[-7.987,-0.361]],"o":[[-0.043,67.182],[-7.987,-0.361],[0.043,-67.182],[7.987,0.361]],"v":[[30.418,-101.559],[15.879,19.429],[1.495,-102.868],[16.034,-223.857]],"c":true}]},{"t":160,"s":[{"i":[[0.361,-67.182],[67.182,0.361],[-0.361,67.182],[-67.182,-0.361]],"o":[[-0.361,67.182],[-67.182,-0.361],[0.361,-67.182],[67.182,0.361]],"v":[[116.932,-101.699],[-5.366,19.289],[-126.354,-103.008],[-4.057,-223.997]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.713725507259,0.729411780834,0.745098054409,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":50},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":1,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[2.601,-1.199],[0,0],[0.718,2.938],[0,0],[-2.098,0.96],[0,0],[-1.376,-1.731],[-2.19,-3.709]],"o":[[0,0],[-2.747,1.266],[0,0],[-0.548,-2.241],[0,0],[2.011,-0.92],[2.742,3.45],[1.456,2.466]],"v":[[75.909,-148.294],[25.912,-125.258],[19.227,-128.485],[16.232,-140.742],[18.904,-146.258],[64.851,-167.272],[70.624,-165.895],[78.023,-155.141]],"c":true}]},{"t":9,"s":[{"i":[[0.309,-1.199],[0,0],[0.085,2.938],[0,0],[-0.249,0.96],[0,0],[-0.164,-1.731],[-0.26,-3.709]],"o":[[0,0],[-0.327,1.266],[0,0],[-0.065,-2.241],[0,0],[0.239,-0.92],[0.326,3.45],[0.173,2.466]],"v":[[25.541,-148.154],[19.597,-125.118],[18.802,-128.345],[18.446,-140.602],[18.764,-146.118],[24.226,-167.132],[24.913,-165.755],[25.792,-155.002]],"c":true}],"h":1},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[-0.005,-1.199],[0,0],[-0.001,2.938],[0,0],[0.004,0.96],[0,0],[0.002,-1.731],[0.004,-3.709]],"o":[[0,0],[0.005,1.266],[0,0],[0.001,-2.241],[0,0],[-0.003,-0.92],[-0.005,3.45],[-0.003,2.466]],"v":[[-27.354,-148.316],[-27.267,-125.281],[-27.256,-128.508],[-27.25,-140.765],[-27.255,-146.28],[-27.335,-167.295],[-27.345,-165.918],[-27.357,-155.164]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[2.601,-1.199],[0,0],[0.718,2.938],[0,0],[-2.098,0.96],[0,0],[-1.376,-1.731],[-2.19,-3.709]],"o":[[0,0],[-2.747,1.266],[0,0],[-0.548,-2.241],[0,0],[2.011,-0.92],[2.742,3.45],[1.456,2.466]],"v":[[75.909,-148.294],[25.912,-125.258],[19.227,-128.485],[16.232,-140.742],[18.904,-146.258],[64.851,-167.272],[70.624,-165.895],[78.023,-155.141]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[2.601,-1.199],[0,0],[0.718,2.938],[0,0],[-2.098,0.96],[0,0],[-1.376,-1.731],[-2.19,-3.709]],"o":[[0,0],[-2.747,1.266],[0,0],[-0.548,-2.241],[0,0],[2.011,-0.92],[2.742,3.45],[1.456,2.466]],"v":[[75.909,-148.294],[25.912,-125.258],[19.227,-128.485],[16.232,-140.742],[18.904,-146.258],[64.851,-167.272],[70.624,-165.895],[78.023,-155.141]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[-0.005,-1.199],[0,0],[-0.001,2.938],[0,0],[0.004,0.96],[0,0],[0.002,-1.731],[0.004,-3.709]],"o":[[0,0],[0.005,1.266],[0,0],[0.001,-2.241],[0,0],[-0.003,-0.92],[-0.005,3.45],[-0.003,2.466]],"v":[[-27.354,-148.316],[-27.267,-125.281],[-27.256,-128.508],[-27.25,-140.765],[-27.255,-146.28],[-27.335,-167.295],[-27.345,-165.918],[-27.357,-155.164]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":151,"s":[{"i":[[0.309,-1.199],[0,0],[0.085,2.938],[0,0],[-0.249,0.96],[0,0],[-0.164,-1.731],[-0.26,-3.709]],"o":[[0,0],[-0.327,1.266],[0,0],[-0.065,-2.241],[0,0],[0.239,-0.92],[0.326,3.45],[0.173,2.466]],"v":[[25.541,-148.154],[19.597,-125.118],[18.802,-128.345],[18.446,-140.602],[18.764,-146.118],[24.226,-167.132],[24.913,-165.755],[25.792,-155.002]],"c":true}]},{"t":160,"s":[{"i":[[2.601,-1.199],[0,0],[0.718,2.938],[0,0],[-2.098,0.96],[0,0],[-1.376,-1.731],[-2.19,-3.709]],"o":[[0,0],[-2.747,1.266],[0,0],[-0.548,-2.241],[0,0],[2.011,-0.92],[2.742,3.45],[1.456,2.466]],"v":[[75.909,-148.294],[25.912,-125.258],[19.227,-128.485],[16.232,-140.742],[18.904,-146.258],[64.851,-167.272],[70.624,-165.895],[78.023,-155.141]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":20},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":1,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[2.052,-0.946],[0,0],[0.477,3.168],[0,0],[-1.951,0.892],[0,0],[-0.657,-2.994],[0,0]],"o":[[0,0],[-2.91,1.341],[0,0],[-0.319,-2.121],[0,0],[2.788,-1.275],[0,0],[0.485,2.207]],"v":[[7.963,-116.992],[-22.51,-106.459],[-29.279,-110.111],[-29.919,-114.355],[-27.163,-119.445],[1.218,-138.174],[7.916,-134.832],[10.648,-122.392]],"c":true}]},{"t":9,"s":[{"i":[[0.244,-0.946],[0,0],[0.057,3.168],[0,0],[-0.232,0.892],[0,0],[-0.078,-2.994],[0,0]],"o":[[0,0],[-0.346,1.341],[0,0],[-0.038,-2.121],[0,0],[0.331,-1.275],[0,0],[0.058,2.207]],"v":[[17.463,-116.852],[13.841,-106.319],[13.036,-109.971],[12.96,-114.215],[13.288,-119.305],[16.661,-138.034],[17.458,-134.692],[17.783,-122.252]],"c":true}],"h":1},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[-0.004,-0.946],[0,0],[-0.001,3.168],[0,0],[0.003,0.892],[0,0],[0.001,-2.994],[0,0]],"o":[[0,0],[0.005,1.341],[0,0],[0.001,-2.121],[0,0],[-0.005,-1.275],[0,0],[-0.001,2.207]],"v":[[-27.236,-117.015],[-27.183,-106.482],[-27.172,-110.134],[-27.171,-114.378],[-27.175,-119.468],[-27.224,-138.197],[-27.236,-134.855],[-27.241,-122.414]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[2.052,-0.946],[0,0],[0.477,3.168],[0,0],[-1.951,0.892],[0,0],[-0.657,-2.994],[0,0]],"o":[[0,0],[-2.91,1.341],[0,0],[-0.319,-2.121],[0,0],[2.788,-1.275],[0,0],[0.485,2.207]],"v":[[7.963,-116.992],[-22.51,-106.459],[-29.279,-110.111],[-29.919,-114.355],[-27.163,-119.445],[1.218,-138.174],[7.916,-134.832],[10.648,-122.392]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[2.052,-0.946],[0,0],[0.477,3.168],[0,0],[-1.951,0.892],[0,0],[-0.657,-2.994],[0,0]],"o":[[0,0],[-2.91,1.341],[0,0],[-0.319,-2.121],[0,0],[2.788,-1.275],[0,0],[0.485,2.207]],"v":[[7.963,-116.992],[-22.51,-106.459],[-29.279,-110.111],[-29.919,-114.355],[-27.163,-119.445],[1.218,-138.174],[7.916,-134.832],[10.648,-122.392]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[-0.004,-0.946],[0,0],[-0.001,3.168],[0,0],[0.003,0.892],[0,0],[0.001,-2.994],[0,0]],"o":[[0,0],[0.005,1.341],[0,0],[0.001,-2.121],[0,0],[-0.005,-1.275],[0,0],[-0.001,2.207]],"v":[[-27.236,-117.015],[-27.183,-106.482],[-27.172,-110.134],[-27.171,-114.378],[-27.175,-119.468],[-27.224,-138.197],[-27.236,-134.855],[-27.241,-122.414]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":151,"s":[{"i":[[0.244,-0.946],[0,0],[0.057,3.168],[0,0],[-0.232,0.892],[0,0],[-0.078,-2.994],[0,0]],"o":[[0,0],[-0.346,1.341],[0,0],[-0.038,-2.121],[0,0],[0.331,-1.275],[0,0],[0.058,2.207]],"v":[[17.463,-116.852],[13.841,-106.319],[13.036,-109.971],[12.96,-114.215],[13.288,-119.305],[16.661,-138.034],[17.458,-134.692],[17.783,-122.252]],"c":true}]},{"t":160,"s":[{"i":[[2.052,-0.946],[0,0],[0.477,3.168],[0,0],[-1.951,0.892],[0,0],[-0.657,-2.994],[0,0]],"o":[[0,0],[-2.91,1.341],[0,0],[-0.319,-2.121],[0,0],[2.788,-1.275],[0,0],[0.485,2.207]],"v":[[7.963,-116.992],[-22.51,-106.459],[-29.279,-110.111],[-29.919,-114.355],[-27.163,-119.445],[1.218,-138.174],[7.916,-134.832],[10.648,-122.392]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":20},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":1,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[1.124,-0.518],[0,0],[0.315,1.92],[0,0],[-1.207,0.552],[0,0],[-0.168,-2.034],[0,0]],"o":[[0,0],[-1.767,0.814],[0,0],[-0.215,-1.31],[0,0],[1.856,-0.849],[0,0],[0.102,1.233]],"v":[[-72.908,-84.704],[-75.5,-83.509],[-79.638,-85.707],[-80.94,-93.644],[-79.259,-96.799],[-76.044,-98.27],[-71.884,-95.834],[-71.206,-87.621]],"c":true}]},{"t":9,"s":[{"i":[[0.134,-0.518],[0,0],[0.037,1.92],[0,0],[-0.144,0.552],[0,0],[-0.02,-2.034],[0,0]],"o":[[0,0],[-0.21,0.814],[0,0],[-0.026,-1.31],[0,0],[0.221,-0.849],[0,0],[0.012,1.233]],"v":[[7.849,-84.564],[7.541,-83.37],[7.049,-85.567],[6.894,-93.505],[7.094,-96.659],[7.477,-98.13],[7.971,-95.694],[8.052,-87.481]],"c":true}],"h":1},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[-0.002,-0.518],[0,0],[-0.001,1.92],[0,0],[0.002,0.552],[0,0],[0,-2.034],[0,0]],"o":[[0,0],[0.003,0.814],[0,0],[0,-1.31],[0,0],[-0.003,-0.849],[0,0],[0,1.233]],"v":[[-27.096,-84.727],[-27.092,-83.532],[-27.084,-85.73],[-27.082,-93.667],[-27.085,-96.821],[-27.091,-98.293],[-27.098,-95.857],[-27.099,-87.643]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[1.124,-0.518],[0,0],[0.315,1.92],[0,0],[-1.207,0.552],[0,0],[-0.168,-2.034],[0,0]],"o":[[0,0],[-1.767,0.814],[0,0],[-0.215,-1.31],[0,0],[1.856,-0.849],[0,0],[0.102,1.233]],"v":[[-72.908,-84.704],[-75.5,-83.509],[-79.638,-85.707],[-80.94,-93.644],[-79.259,-96.799],[-76.044,-98.27],[-71.884,-95.834],[-71.206,-87.621]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[1.124,-0.518],[0,0],[0.315,1.92],[0,0],[-1.207,0.552],[0,0],[-0.168,-2.034],[0,0]],"o":[[0,0],[-1.767,0.814],[0,0],[-0.215,-1.31],[0,0],[1.856,-0.849],[0,0],[0.102,1.233]],"v":[[-72.908,-84.704],[-75.5,-83.509],[-79.638,-85.707],[-80.94,-93.644],[-79.259,-96.799],[-76.044,-98.27],[-71.884,-95.834],[-71.206,-87.621]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[-0.002,-0.518],[0,0],[-0.001,1.92],[0,0],[0.002,0.552],[0,0],[0,-2.034],[0,0]],"o":[[0,0],[0.003,0.814],[0,0],[0,-1.31],[0,0],[-0.003,-0.849],[0,0],[0,1.233]],"v":[[-27.096,-84.727],[-27.092,-83.532],[-27.084,-85.73],[-27.082,-93.667],[-27.085,-96.821],[-27.091,-98.293],[-27.098,-95.857],[-27.099,-87.643]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":151,"s":[{"i":[[0.134,-0.518],[0,0],[0.037,1.92],[0,0],[-0.144,0.552],[0,0],[-0.02,-2.034],[0,0]],"o":[[0,0],[-0.21,0.814],[0,0],[-0.026,-1.31],[0,0],[0.221,-0.849],[0,0],[0.012,1.233]],"v":[[7.849,-84.564],[7.541,-83.37],[7.049,-85.567],[6.894,-93.505],[7.094,-96.659],[7.477,-98.13],[7.971,-95.694],[8.052,-87.481]],"c":true}]},{"t":160,"s":[{"i":[[1.124,-0.518],[0,0],[0.315,1.92],[0,0],[-1.207,0.552],[0,0],[-0.168,-2.034],[0,0]],"o":[[0,0],[-1.767,0.814],[0,0],[-0.215,-1.31],[0,0],[1.856,-0.849],[0,0],[0.102,1.233]],"v":[[-72.908,-84.704],[-75.5,-83.509],[-79.638,-85.707],[-80.94,-93.644],[-79.259,-96.799],[-76.044,-98.27],[-71.884,-95.834],[-71.206,-87.621]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":20},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":1,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-0.182,-1.043],[0,0],[0.666,-0.307],[0,0],[0.313,0.912],[0.281,1.49],[-0.676,0.309],[0,0]],"o":[[0,0],[0.126,0.722],[0,0],[-0.875,0.404],[-0.496,-1.446],[-0.137,-0.73],[0,0],[0.963,-0.44]],"v":[[-87.149,-87.819],[-86.389,-83.465],[-87.305,-81.72],[-89.202,-80.846],[-91.413,-81.804],[-92.578,-86.214],[-91.66,-87.983],[-89.413,-89.011]],"c":true}]},{"t":9,"s":[{"i":[[-0.022,-1.043],[0,0],[0.079,-0.307],[0,0],[0.037,0.912],[0.033,1.49],[-0.08,0.309],[0,0]],"o":[[0,0],[0.015,0.722],[0,0],[-0.104,0.404],[-0.059,-1.446],[-0.016,-0.73],[0,0],[0.114,-0.44]],"v":[[6.156,-87.679],[6.247,-83.325],[6.138,-81.58],[5.912,-80.706],[5.649,-81.665],[5.511,-86.074],[5.62,-87.843],[5.887,-88.871]],"c":true}],"h":1},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,-1.043],[0,0],[-0.001,-0.307],[0,0],[-0.001,0.912],[0,1.49],[0.001,0.309],[0,0]],"o":[[0,0],[0,0.722],[0,0],[0.002,0.404],[0.001,-1.446],[0,-0.73],[0,0],[-0.002,-0.44]],"v":[[-27.071,-87.842],[-27.073,-83.488],[-27.071,-81.743],[-27.068,-80.868],[-27.064,-81.827],[-27.062,-86.237],[-27.064,-88.006],[-27.068,-89.034]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[-0.182,-1.043],[0,0],[0.666,-0.307],[0,0],[0.313,0.912],[0.281,1.49],[-0.676,0.309],[0,0]],"o":[[0,0],[0.126,0.722],[0,0],[-0.875,0.404],[-0.496,-1.446],[-0.137,-0.73],[0,0],[0.963,-0.44]],"v":[[-87.149,-87.819],[-86.389,-83.465],[-87.305,-81.72],[-89.202,-80.846],[-91.413,-81.804],[-92.578,-86.214],[-91.66,-87.983],[-89.413,-89.011]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-0.182,-1.043],[0,0],[0.666,-0.307],[0,0],[0.313,0.912],[0.281,1.49],[-0.676,0.309],[0,0]],"o":[[0,0],[0.126,0.722],[0,0],[-0.875,0.404],[-0.496,-1.446],[-0.137,-0.73],[0,0],[0.963,-0.44]],"v":[[-87.149,-87.819],[-86.389,-83.465],[-87.305,-81.72],[-89.202,-80.846],[-91.413,-81.804],[-92.578,-86.214],[-91.66,-87.983],[-89.413,-89.011]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0,-1.043],[0,0],[-0.001,-0.307],[0,0],[-0.001,0.912],[0,1.49],[0.001,0.309],[0,0]],"o":[[0,0],[0,0.722],[0,0],[0.002,0.404],[0.001,-1.446],[0,-0.73],[0,0],[-0.002,-0.44]],"v":[[-27.071,-87.842],[-27.073,-83.488],[-27.071,-81.743],[-27.068,-80.868],[-27.064,-81.827],[-27.062,-86.237],[-27.064,-88.006],[-27.068,-89.034]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":151,"s":[{"i":[[-0.022,-1.043],[0,0],[0.079,-0.307],[0,0],[0.037,0.912],[0.033,1.49],[-0.08,0.309],[0,0]],"o":[[0,0],[0.015,0.722],[0,0],[-0.104,0.404],[-0.059,-1.446],[-0.016,-0.73],[0,0],[0.114,-0.44]],"v":[[6.156,-87.679],[6.247,-83.325],[6.138,-81.58],[5.912,-80.706],[5.649,-81.665],[5.511,-86.074],[5.62,-87.843],[5.887,-88.871]],"c":true}]},{"t":160,"s":[{"i":[[-0.182,-1.043],[0,0],[0.666,-0.307],[0,0],[0.313,0.912],[0.281,1.49],[-0.676,0.309],[0,0]],"o":[[0,0],[0.126,0.722],[0,0],[-0.875,0.404],[-0.496,-1.446],[-0.137,-0.73],[0,0],[0.963,-0.44]],"v":[[-87.149,-87.819],[-86.389,-83.465],[-87.305,-81.72],[-89.202,-80.846],[-91.413,-81.804],[-92.578,-86.214],[-91.66,-87.983],[-89.413,-89.011]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":20},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"base-details 2","sr":1,"ks":{"r":{"a":0,"k":45.436},"p":{"a":0,"k":[279.992,220.637,0]},"a":{"a":0,"k":[-6.301,-79.894,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[19.628,16.939],[-10,-18.623],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[86.801,-208.277],[126.042,-171.807],[118.572,-168.909]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0.009,16.939],[-0.005,-18.623],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[15.467,-208.316],[15.485,-171.846],[15.482,-168.948]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0.009,16.939],[-0.005,-18.623],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[15.467,-208.316],[15.485,-171.846],[15.482,-168.948]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0.009,16.939],[-0.005,-18.623],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[15.467,-208.316],[15.485,-171.846],[15.482,-168.948]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0.009,16.939],[-0.005,-18.623],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[15.467,-208.316],[15.485,-171.846],[15.482,-168.948]],"c":true}]},{"t":160,"s":[{"i":[[19.628,16.939],[-10,-18.623],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[86.801,-208.277],[126.042,-171.807],[118.572,-168.909]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.603921592236,0.556862771511,0.501960813999,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[45.514,8.781],[-24.215,-33.57],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[30.873,-214.492],[90.197,-171.714],[96.705,-176.544]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0.02,8.781],[-0.011,-33.57],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[15.442,-214.531],[15.469,-171.753],[15.472,-176.583]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0.02,8.781],[-0.011,-33.57],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[15.442,-214.531],[15.469,-171.753],[15.472,-176.583]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0.02,8.781],[-0.011,-33.57],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[15.442,-214.531],[15.469,-171.753],[15.472,-176.583]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0.02,8.781],[-0.011,-33.57],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[15.442,-214.531],[15.469,-171.753],[15.472,-176.583]],"c":true}]},{"t":160,"s":[{"i":[[45.514,8.781],[-24.215,-33.57],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[30.873,-214.492],[90.197,-171.714],[96.705,-176.544]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.596078455448,0.647058844566,0.729411780834,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0.296,-1.243],[1.556,-20.315],[-2.157,13.842],[0,0],[0,0]],"o":[[0,0],[0,0],[2.157,-13.842],[0,0],[0,0]],"v":[[-140.112,-137.119],[-152.156,-94.342],[-151.312,-122.074],[-146.548,-143.94],[-139.109,-140.8]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,-1.243],[0.001,-20.315],[-0.001,13.842],[0,0],[0,0]],"o":[[0,0],[0,0],[0.001,-13.842],[0,0],[0,0]],"v":[[-24.635,-137.27],[-24.64,-94.493],[-24.64,-122.225],[-24.637,-144.092],[-24.634,-140.952]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0,-1.243],[0.001,-20.315],[-0.001,13.842],[0,0],[0,0]],"o":[[0,0],[0,0],[0.001,-13.842],[0,0],[0,0]],"v":[[-24.635,-137.27],[-24.64,-94.493],[-24.64,-122.225],[-24.637,-144.092],[-24.634,-140.952]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,-1.243],[0.001,-20.315],[-0.001,13.842],[0,0],[0,0]],"o":[[0,0],[0,0],[0.001,-13.842],[0,0],[0,0]],"v":[[-24.635,-137.27],[-24.64,-94.493],[-24.64,-122.225],[-24.637,-144.092],[-24.634,-140.952]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0,-1.243],[0.001,-20.315],[-0.001,13.842],[0,0],[0,0]],"o":[[0,0],[0,0],[0.001,-13.842],[0,0],[0,0]],"v":[[-24.635,-137.27],[-24.64,-94.493],[-24.64,-122.225],[-24.637,-144.092],[-24.634,-140.952]],"c":true}]},{"t":160,"s":[{"i":[[0.296,-1.243],[1.556,-20.315],[-2.157,13.842],[0,0],[0,0]],"o":[[0,0],[0,0],[2.157,-13.842],[0,0],[0,0]],"v":[[-140.112,-137.119],[-152.156,-94.342],[-151.312,-122.074],[-146.548,-143.94],[-139.109,-140.8]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.392156869173,0.596078455448,0.749019622803,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-11.716,23.528],[-10.343,-37.016],[0,0]],"o":[[0,0],[0,0],[-6.274,-20.242]],"v":[[-116.974,-137.597],[-117.819,-69.923],[-125.592,-68.049]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[-0.005,23.528],[-0.005,-37.016],[0,0]],"o":[[0,0],[0,0],[-0.003,-20.242]],"v":[[15.376,-137.636],[15.375,-69.962],[15.372,-68.088]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[-0.005,23.528],[-0.005,-37.016],[0,0]],"o":[[0,0],[0,0],[-0.003,-20.242]],"v":[[15.376,-137.636],[15.375,-69.962],[15.372,-68.088]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-0.005,23.528],[-0.005,-37.016],[0,0]],"o":[[0,0],[0,0],[-0.003,-20.242]],"v":[[15.376,-137.636],[15.375,-69.962],[15.372,-68.088]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[-0.005,23.528],[-0.005,-37.016],[0,0]],"o":[[0,0],[0,0],[-0.003,-20.242]],"v":[[15.376,-137.636],[15.375,-69.962],[15.372,-68.088]],"c":true}]},{"t":160,"s":[{"i":[[-11.716,23.528],[-10.343,-37.016],[0,0]],"o":[[0,0],[0,0],[-6.274,-20.242]],"v":[[-116.974,-137.597],[-117.819,-69.923],[-125.592,-68.049]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.596078455448,0.647058844566,0.729411780834,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[39.949,-53.683],[50.88,70.829],[-81.857,46.009]],"o":[[0,0],[-44.845,60.261],[0,0],[65.74,-36.95]],"v":[[122.174,-124.285],[98.91,-20.454],[-100.491,-22.998],[61.025,0.282]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,0],[0.018,-53.683],[0.023,70.829],[-0.037,46.009]],"o":[[0,0],[-0.02,60.261],[0,0],[0.03,-36.95]],"v":[[15.483,-124.324],[15.473,-20.494],[15.383,-23.037],[15.456,0.243]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0,0],[0.018,-53.683],[0.023,70.829],[-0.037,46.009]],"o":[[0,0],[-0.02,60.261],[0,0],[0.03,-36.95]],"v":[[15.483,-124.324],[15.473,-20.494],[15.383,-23.037],[15.456,0.243]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[0.018,-53.683],[0.023,70.829],[-0.037,46.009]],"o":[[0,0],[-0.02,60.261],[0,0],[0.03,-36.95]],"v":[[15.483,-124.324],[15.473,-20.494],[15.383,-23.037],[15.456,0.243]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0,0],[0.018,-53.683],[0.023,70.829],[-0.037,46.009]],"o":[[0,0],[-0.02,60.261],[0,0],[0.03,-36.95]],"v":[[15.483,-124.324],[15.473,-20.494],[15.383,-23.037],[15.456,0.243]],"c":true}]},{"t":160,"s":[{"i":[[0,0],[39.949,-53.683],[50.88,70.829],[-81.857,46.009]],"o":[[0,0],[-44.845,60.261],[0,0],[65.74,-36.95]],"v":[[122.174,-124.285],[98.91,-20.454],[-100.491,-22.998],[61.025,0.282]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.29411765933,0.301960796118,0.309803932905,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":60},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[2.981,-1.281]],"o":[[-4.9,-0.093],[0,0]],"v":[[-28.685,53.104],[-40.086,54.555]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,0],[0.001,-1.281]],"o":[[-0.002,-0.093],[0,0]],"v":[[-35.608,54.4],[-35.613,55.85]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0,0],[0.001,-1.281]],"o":[[-0.002,-0.093],[0,0]],"v":[[-36.052,54.138],[-36.057,55.588]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[0.001,-1.281]],"o":[[-0.002,-0.093],[0,0]],"v":[[-36.052,54.138],[-36.057,55.588]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0,0],[0.001,-1.281]],"o":[[-0.002,-0.093],[0,0]],"v":[[-35.608,54.4],[-35.613,55.85]],"c":false}]},{"t":160,"s":[{"i":[[0,0],[2.981,-1.281]],"o":[[-4.9,-0.093],[0,0]],"v":[[-28.685,53.104],[-40.086,54.555]],"c":false}]}]},"nm":"Контур 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.411764711142,0.537254929543,0.611764729023,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":30},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[68.948,-3.921],[-37.061,-97.117],[55.005,-26.361],[-0.455,-31.703],[0,0],[-25.777,10.455],[-18.086,44.216],[21.507,24.355]],"o":[[0,0],[28.693,75.19],[-8.792,4.213],[0,0],[0,0],[25.777,-10.455],[18.086,-44.216],[-21.507,-24.355]],"v":[[-26.688,-220.424],[130.635,-151.664],[62.531,25.204],[28.32,64.49],[9.363,64.388],[28.611,10.377],[103.379,-56.158],[92.574,-174.816]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0.031,-3.921],[-0.017,-97.117],[0.025,-26.361],[0,-31.703],[0,0],[-0.012,10.455],[-0.008,44.216],[0.01,24.355]],"o":[[0,0],[0.013,75.19],[-0.004,4.213],[0,0],[0,0],[0.012,-10.455],[0.008,-44.216],[-0.01,-24.355]],"v":[[15.416,-220.463],[15.487,-151.703],[15.456,25.165],[26.034,62.603],[26.025,62.501],[15.441,10.338],[15.475,-56.197],[15.47,-174.855]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0.031,-3.921],[-0.017,-97.117],[0.025,-26.361],[-0.818,-27.074],[0,0],[-0.012,10.455],[-0.008,44.216],[0.01,24.355]],"o":[[0,0],[0.013,75.19],[-0.004,4.213],[0,0],[0,0],[0.012,-10.455],[0.008,-44.216],[-0.01,-24.355]],"v":[[15.416,-220.463],[15.487,-151.703],[15.456,25.165],[26.564,62.599],[26.556,62.497],[15.441,10.338],[15.475,-56.197],[15.47,-174.855]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0.031,-3.921],[-0.017,-97.117],[0.025,-26.361],[-0.818,-27.074],[0,0],[-0.012,10.455],[-0.008,44.216],[0.01,24.355]],"o":[[0,0],[0.013,75.19],[-0.004,4.213],[0,0],[0,0],[0.012,-10.455],[0.008,-44.216],[-0.01,-24.355]],"v":[[15.416,-220.463],[15.487,-151.703],[15.456,25.165],[26.564,62.599],[26.556,62.497],[15.441,10.338],[15.475,-56.197],[15.47,-174.855]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0.031,-3.921],[-0.017,-97.117],[0.025,-26.361],[0,-31.703],[0,0],[-0.012,10.455],[-0.008,44.216],[0.01,24.355]],"o":[[0,0],[0.013,75.19],[-0.004,4.213],[0,0],[0,0],[0.012,-10.455],[0.008,-44.216],[-0.01,-24.355]],"v":[[15.416,-220.463],[15.487,-151.703],[15.456,25.165],[26.034,62.603],[26.025,62.501],[15.441,10.338],[15.475,-56.197],[15.47,-174.855]],"c":true}]},{"t":160,"s":[{"i":[[68.948,-3.921],[-37.061,-97.117],[55.005,-26.361],[-0.455,-31.703],[0,0],[-25.777,10.455],[-18.086,44.216],[21.507,24.355]],"o":[[0,0],[28.693,75.19],[-8.792,4.213],[0,0],[0,0],[25.777,-10.455],[18.086,-44.216],[-21.507,-24.355]],"v":[[-26.688,-220.424],[130.635,-151.664],[62.531,25.204],[28.32,64.49],[9.363,64.388],[28.611,10.377],[103.379,-56.158],[92.574,-174.816]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.702,0.647,0.6,0.499,0.702,0.647,0.6,0.999,0.702,0.647,0.6,0,1,0.499,0.5,0.999,0]}},"s":{"a":0,"k":[108.028,-143.79]},"e":{"a":0,"k":[46.613,-124.447]},"t":1,"nm":"Gradient Fill 2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":60},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 10","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-15.862,33.164],[33.071,-31.44],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[137.464,-60.382],[96.615,5.732],[90.996,0.052]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[-0.007,33.164],[0.015,-31.44],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[15.49,-60.421],[15.472,5.693],[15.469,0.013]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[-0.007,33.164],[0.015,-31.44],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[15.49,-60.421],[15.472,5.693],[15.469,0.013]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-0.007,33.164],[0.015,-31.44],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[15.49,-60.421],[15.472,5.693],[15.469,0.013]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[-0.007,33.164],[0.015,-31.44],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[15.49,-60.421],[15.472,5.693],[15.469,0.013]],"c":true}]},{"t":160,"s":[{"i":[[-15.862,33.164],[33.071,-31.44],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[137.464,-60.382],[96.615,5.732],[90.996,0.052]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.29411765933,0.301960796118,0.309803932905,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 11","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[12.946,26.091],[-26.672,-25.373],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-143.236,-50.684],[-106.926,4.636],[-104.018,-3.724]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[2.736,22.317],[-0.324,-8.162],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-25.986,-53.067],[-28.176,0.162],[-20.393,-0.324]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[2.736,22.317],[-0.324,-8.162],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-25.986,-53.067],[-28.176,0.162],[-20.393,-0.324]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[2.736,22.317],[-0.324,-8.162],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-25.986,-53.067],[-28.176,0.162],[-20.393,-0.324]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[2.736,22.317],[-0.324,-8.162],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-25.986,-53.067],[-28.176,0.162],[-20.393,-0.324]],"c":true}]},{"t":160,"s":[{"i":[[12.946,26.091],[-26.672,-25.373],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-143.236,-50.684],[-106.926,4.636],[-104.018,-3.724]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.29411765933,0.301960796118,0.309803932905,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 12","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[-28.158,-93.848],[-37.446,11.739],[34.763,71.472]],"o":[[0,0],[19.552,65.165],[0,0],[-45.514,-87.493]],"v":[[-94.063,-210.164],[-139.019,-61.937],[1.958,22.829],[-118.76,-49.273]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,0],[-0.13,-93.848],[-0.173,11.739],[0.16,71.472]],"o":[[0,0],[0.09,65.165],[0,0],[-0.21,-87.493]],"v":[[14.837,-210.164],[14.63,-61.937],[15.28,22.829],[14.763,-44.023]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0,0],[-0.13,-93.848],[-0.173,11.739],[0.16,71.472]],"o":[[0,0],[0.09,65.165],[0,0],[-0.21,-87.493]],"v":[[14.837,-210.164],[14.63,-61.937],[15.28,22.829],[14.763,-44.023]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[-0.13,-93.848],[-0.173,11.739],[0.16,71.472]],"o":[[0,0],[0.09,65.165],[0,0],[-0.21,-87.493]],"v":[[14.837,-210.164],[14.63,-61.937],[15.28,22.829],[14.763,-44.023]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0,0],[-0.13,-93.848],[-0.173,11.739],[0.16,71.472]],"o":[[0,0],[0.09,65.165],[0,0],[-0.21,-87.493]],"v":[[14.837,-210.164],[14.63,-61.937],[15.28,22.829],[14.763,-44.023]],"c":true}]},{"t":160,"s":[{"i":[[0,0],[-28.158,-93.848],[-37.446,11.739],[34.763,71.472]],"o":[[0,0],[19.552,65.165],[0,0],[-45.514,-87.493]],"v":[[-94.063,-210.164],[-139.019,-61.937],[1.958,22.829],[-118.76,-49.273]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":40},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 13","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[-6.301,-79.894]},"a":{"a":0,"k":[-6.301,-79.894]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":7,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":140,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":153,"s":[0]},{"t":160,"s":[100]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"hide","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[-4.148,1.682],[-15.839,15.68]],"o":[[-1.614,-16.089],[19.748,-6.813],[0,0]],"v":[[28.52,59.211],[42.503,33.884],[96.665,0.149]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,0],[-0.002,1.682],[-0.007,15.68]],"o":[[-0.001,-16.089],[0.009,-6.813],[0,0]],"v":[[26.034,57.324],[15.094,33.847],[15.472,0.11]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0,0],[-4.148,1.682],[-15.839,15.68]],"o":[[-1.614,-16.089],[19.748,-6.813],[0,0]],"v":[[28.52,59.211],[42.503,33.884],[96.665,0.149]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[-4.148,1.682],[-15.839,15.68]],"o":[[-1.614,-16.089],[19.748,-6.813],[0,0]],"v":[[28.52,59.211],[42.503,33.884],[96.665,0.149]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0,0],[-0.002,1.682],[-0.007,15.68]],"o":[[-0.001,-16.089],[0.009,-6.813],[0,0]],"v":[[26.034,57.324],[15.094,33.847],[15.472,0.11]],"c":false}]},{"t":160,"s":[{"i":[[0,0],[-4.148,1.682],[-15.839,15.68]],"o":[[-1.614,-16.089],[19.748,-6.813],[0,0]],"v":[[28.52,59.211],[42.503,33.884],[96.665,0.149]],"c":false}]}]},"nm":"Контур 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.29411765933,0.301960796118,0.309803932905,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 9","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[-19.684,-7.025],[1.677,-16.475]],"o":[[15.68,15.849],[4.13,1.645],[0,0]],"v":[[-106.896,-0.946],[-53.089,33.369],[-39.39,58.846]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,0],[-0.009,-7.025],[0.001,-16.475]],"o":[[0.007,15.849],[0.002,1.645],[0,0]],"v":[[-24.87,-0.97],[-24.845,33.345],[-35.613,60.141]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0,0],[-19.684,-7.025],[1.677,-16.475]],"o":[[15.68,15.849],[4.13,1.645],[0,0]],"v":[[-106.896,-0.946],[-53.089,33.369],[-39.39,58.846]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[-19.684,-7.025],[1.677,-16.475]],"o":[[15.68,15.849],[4.13,1.645],[0,0]],"v":[[-106.896,-0.946],[-53.089,33.369],[-39.39,58.846]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0,0],[-0.009,-7.025],[0.001,-16.475]],"o":[[0.007,15.849],[0.002,1.645],[0,0]],"v":[[-24.87,-0.97],[-24.845,33.345],[-35.613,60.141]],"c":false}]},{"t":160,"s":[{"i":[[0,0],[-19.684,-7.025],[1.677,-16.475]],"o":[[15.68,15.849],[4.13,1.645],[0,0]],"v":[[-106.896,-0.946],[-53.089,33.369],[-39.39,58.846]],"c":false}]}]},"nm":"Контур 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.29411765933,0.301960796118,0.309803932905,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 13","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[1.665,-14.166]],"o":[[8.627,1.385],[0,0]],"v":[[-45.118,38.691],[-31.391,58.889]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,0],[0.001,-14.166]],"o":[[0.004,1.385],[0,0]],"v":[[-29.074,40.113],[-35.609,60.184]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0,0],[1.665,-14.166]],"o":[[8.627,1.385],[0,0]],"v":[[-45.118,38.691],[-31.391,58.889]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[1.665,-14.166]],"o":[[8.627,1.385],[0,0]],"v":[[-45.118,38.691],[-31.391,58.889]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0,0],[0.001,-14.166]],"o":[[0.004,1.385],[0,0]],"v":[[-29.074,40.113],[-35.609,60.184]],"c":false}]},{"t":160,"s":[{"i":[[0,0],[1.665,-14.166]],"o":[[8.627,1.385],[0,0]],"v":[[-45.118,38.691],[-31.391,58.889]],"c":false}]}]},"nm":"Контур 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.886274516582,0.913725495338,0.92549020052,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":70},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0.029,-5.319],[0,0],[5.319,0.029],[0,0],[0.781,4.592],[3.399,1.359],[1.527,0.608],[0,0]],"o":[[0,0],[-0.029,5.319],[0,0],[-4.658,-0.025],[-1.869,-10.986],[-1.547,-0.548],[0,0],[5.319,0.029]],"v":[[1.306,40.58],[1.263,48.437],[-8.42,58.016],[-28.173,57.91],[-37.603,49.938],[-51.082,32.376],[-55.683,30.642],[-8.274,30.897]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,-5.319],[0,0],[0.002,0.029],[0,0],[0,4.592],[0.002,1.359],[0.001,0.608],[0,0]],"o":[[0,0],[0,5.319],[0,0],[-0.002,-0.025],[-0.001,-10.986],[-0.001,-0.548],[0,0],[0.002,0.029]],"v":[[7.054,40.612],[7.054,48.469],[-2.95,57.992],[-35.608,59.206],[-35.612,51.234],[-24.845,32.352],[-24.847,30.618],[-15.325,30.87]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0.029,-5.319],[0,0],[5.319,0.029],[0,0],[0.781,4.592],[3.399,1.359],[1.527,0.608],[0,0]],"o":[[0,0],[-0.029,5.319],[0,0],[-4.658,-0.025],[-1.869,-10.986],[-1.547,-0.548],[0,0],[5.319,0.029]],"v":[[1.306,40.58],[1.263,48.437],[-8.42,58.016],[-28.173,57.91],[-37.603,49.938],[-51.082,32.376],[-55.683,30.642],[-8.274,30.897]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0.029,-5.319],[0,0],[5.319,0.029],[0,0],[0.781,4.592],[3.399,1.359],[1.527,0.608],[0,0]],"o":[[0,0],[-0.029,5.319],[0,0],[-4.658,-0.025],[-1.869,-10.986],[-1.547,-0.548],[0,0],[5.319,0.029]],"v":[[1.306,40.58],[1.263,48.437],[-8.42,58.016],[-28.173,57.91],[-37.603,49.938],[-51.082,32.376],[-55.683,30.642],[-8.274,30.897]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0,-5.319],[0,0],[0.002,0.029],[0,0],[0,4.592],[0.002,1.359],[0.001,0.608],[0,0]],"o":[[0,0],[0,5.319],[0,0],[-0.002,-0.025],[-0.001,-10.986],[-0.001,-0.548],[0,0],[0.002,0.029]],"v":[[7.054,40.612],[7.054,48.469],[-2.95,57.992],[-35.608,59.206],[-35.612,51.234],[-24.845,32.352],[-24.847,30.618],[-15.325,30.87]],"c":true}]},{"t":160,"s":[{"i":[[0.029,-5.319],[0,0],[5.319,0.029],[0,0],[0.781,4.592],[3.399,1.359],[1.527,0.608],[0,0]],"o":[[0,0],[-0.029,5.319],[0,0],[-4.658,-0.025],[-1.869,-10.986],[-1.547,-0.548],[0,0],[5.319,0.029]],"v":[[1.306,40.58],[1.263,48.437],[-8.42,58.016],[-28.173,57.91],[-37.603,49.938],[-51.082,32.376],[-55.683,30.642],[-8.274,30.897]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,0.641,0.647,0.653,1,0.282,0.294,0.306]}},"s":{"a":0,"k":[-25.068,57.011]},"e":{"a":0,"k":[-24.245,37.72]},"t":1,"nm":"Gradient Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 8","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"base-round 2","sr":1,"ks":{"r":{"a":0,"k":45.436},"p":{"a":0,"k":[290.875,212.356,0]},"a":{"a":0,"k":[-4.564,-93.458,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[-4.148,1.682]],"o":[[-1.614,-16.089],[19.748,-6.813]],"v":[[28.52,59.211],[42.503,33.884]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,0],[0.006,1.682]],"o":[[0.002,-16.089],[-0.03,-6.813]],"v":[[27.295,59.537],[15.78,33.767]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0,0],[-4.148,1.682]],"o":[[-1.614,-16.089],[19.748,-6.813]],"v":[[28.52,59.211],[42.503,33.884]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[-4.148,1.682]],"o":[[-1.614,-16.089],[19.748,-6.813]],"v":[[28.52,59.211],[42.503,33.884]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0,0],[0.006,1.682]],"o":[[0.002,-16.089],[-0.03,-6.813]],"v":[[27.295,59.537],[15.78,33.767]],"c":false}]},{"t":160,"s":[{"i":[[0,0],[-4.148,1.682]],"o":[[-1.614,-16.089],[19.748,-6.813]],"v":[[28.52,59.211],[42.503,33.884]],"c":false}]}]},"nm":"Контур 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[0.603921592236,0.556862771511,0.501960813999,1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.001]},"t":10,"s":[0.443137288094,0.462745130062,0.486274540424,1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[0.603921592236,0.556862771511,0.501960813999,1]},{"i":{"x":[0.833],"y":[1.001]},"o":{"x":[0.333],"y":[0]},"t":140,"s":[0.603921592236,0.556862771511,0.501960813999,1]},{"i":{"x":[0.833],"y":[0.999]},"o":{"x":[0.167],"y":[0.001]},"t":150,"s":[0.443137288094,0.462745130062,0.486274540424,1]},{"t":160,"s":[0.603921592236,0.556862771511,0.501960813999,1]}]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-19.684,-7.025],[1.677,-16.475]],"o":[[4.13,1.645],[0,0]],"v":[[-53.089,33.369],[-39.39,58.846]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0.131,-7.025],[-0.011,-16.475]],"o":[[-0.027,1.645],[0,0]],"v":[[-24.398,33.489],[-35.805,58.698]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[-19.684,-7.025],[1.677,-16.475]],"o":[[4.13,1.645],[0,0]],"v":[[-53.089,33.369],[-39.39,58.846]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-19.684,-7.025],[1.677,-16.475]],"o":[[4.13,1.645],[0,0]],"v":[[-53.089,33.369],[-39.39,58.846]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0.131,-7.025],[-0.011,-16.475]],"o":[[-0.027,1.645],[0,0]],"v":[[-24.398,33.489],[-35.805,58.698]],"c":false}]},{"t":160,"s":[{"i":[[-19.684,-7.025],[1.677,-16.475]],"o":[[4.13,1.645],[0,0]],"v":[[-53.089,33.369],[-39.39,58.846]],"c":false}]}]},"nm":"Контур 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[0.57647061348,0.564705908298,0.596078455448,1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.001]},"t":10,"s":[0.443137288094,0.462745130062,0.486274540424,1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[0.57647061348,0.564705908298,0.596078455448,1]},{"i":{"x":[0.833],"y":[1.001]},"o":{"x":[0.333],"y":[0]},"t":140,"s":[0.57647061348,0.564705908298,0.596078455448,1]},{"i":{"x":[0.833],"y":[0.999]},"o":{"x":[0.167],"y":[0.001]},"t":150,"s":[0.443137288094,0.462745130062,0.486274540424,1]},{"t":160,"s":[0.57647061348,0.564705908298,0.596078455448,1]}]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-19.684,-7.025],[1.677,-16.475],[0,0],[-4.148,1.682]],"o":[[4.13,1.645],[0,0],[-1.614,-16.089],[19.748,-6.813]],"v":[[-53.089,33.369],[-39.39,58.846],[28.52,59.211],[42.503,33.884]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0.131,-7.025],[-0.011,-16.475],[0,0],[0.006,1.682]],"o":[[-0.027,1.645],[0,0],[0.002,-16.089],[-0.03,-6.813]],"v":[[-24.398,33.489],[-35.805,58.697],[27.295,59.537],[15.78,33.767]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[-19.684,-7.025],[1.677,-16.475],[0,0],[-4.148,1.682]],"o":[[4.13,1.645],[0,0],[-1.614,-16.089],[19.748,-6.813]],"v":[[-53.089,33.369],[-39.39,58.846],[28.52,59.211],[42.503,33.884]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-19.684,-7.025],[1.677,-16.475],[0,0],[-4.148,1.682]],"o":[[4.13,1.645],[0,0],[-1.614,-16.089],[19.748,-6.813]],"v":[[-53.089,33.369],[-39.39,58.846],[28.52,59.211],[42.503,33.884]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0.131,-7.025],[-0.011,-16.475],[0,0],[0.006,1.682]],"o":[[-0.027,1.645],[0,0],[0.002,-16.089],[-0.03,-6.813]],"v":[[-24.398,33.489],[-35.805,58.697],[27.295,59.537],[15.78,33.767]],"c":true}]},{"t":160,"s":[{"i":[[-19.684,-7.025],[1.677,-16.475],[0,0],[-4.148,1.682]],"o":[[4.13,1.645],[0,0],[-1.614,-16.089],[19.748,-6.813]],"v":[[-53.089,33.369],[-39.39,58.846],[28.52,59.211],[42.503,33.884]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.282,0.294,0.306,0.5,0.283,0.294,0.306,1,0.284,0.293,0.306]}},"s":{"a":1,"k":[{"i":{"x":0.667,"y":0.667},"o":{"x":0.167,"y":0.167},"t":0,"s":[-22.476,-223.466],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":20,"s":[-22.476,-223.466],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0.333},"t":140,"s":[-22.476,-223.466],"to":[0,0],"ti":[0,0]},{"t":160,"s":[-22.476,-223.466]}]},"e":{"a":1,"k":[{"i":{"x":0.667,"y":0.667},"o":{"x":0.167,"y":0.167},"t":0,"s":[48.472,31.505],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":20,"s":[48.472,31.505],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0.333},"t":140,"s":[48.472,31.505],"to":[0,0],"ti":[0,0]},{"t":160,"s":[48.472,31.505]}]},"t":1,"nm":"Gradient Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 8","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"base-side8","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":4,"s":[100]},{"i":{"x":[1],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[100]},{"t":19,"s":[25.75],"h":1},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":20,"s":[1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":140,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":141,"s":[25.75]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":144,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":156,"s":[100]},{"t":160,"s":[1]}]},"r":{"a":0,"k":45.436},"p":{"a":0,"k":[290.875,212.356,0]},"a":{"a":0,"k":[-4.564,-93.458,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-192.5,0],[-0.192,0.531],[-191.567,0],[0.496,-0.364]],"o":[[-0.5,0],[-193.567,0],[-0.192,-0.054],[-191.504,0]],"v":[[-4.5,-245.657],[-4.433,-245.656],[-4.433,41.242],[-4.496,40.864]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":5,"s":[{"i":[[-132.091,0],[-0.122,0.338],[-122.04,0],[0.316,-0.232]],"o":[[-0.319,0],[-123.315,0],[-0.122,-0.035],[-97.39,0]],"v":[[2.716,-245.657],[-11.603,-245.654],[-11.593,41.243],[2.39,40.864]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[15.382,-245.657],[-24.189,-245.652],[-24.161,41.246],[14.476,40.864]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":12,"s":[{"i":[[47.224,0],[0.042,0.115],[48.434,0],[-0.107,-0.079]],"o":[[0.108,0],[44.956,0],[0.042,-0.012],[51.434,-2.364]],"v":[[11.276,-245.657],[-19.706,-245.653],[-19.684,41.245],[10.566,40.864]],"c":true}]},{"i":{"x":1,"y":1},"o":{"x":0.167,"y":0},"t":16,"s":[{"i":[[140.935,0],[0.125,0.346],[124.502,0],[-0.322,-0.237]],"o":[[0.324,0],[125.807,0],[0.125,-0.035],[143.253,0]],"v":[[3.065,-245.657],[-10.74,-245.654],[-10.73,41.243],[2.747,40.864]],"c":true}]},{"t":19,"s":[{"i":[[187.362,0],[0.187,0.519],[181.553,0],[-0.482,-0.356]],"o":[[0.487,0],[186.444,0],[0.187,-0.053],[178.556,0]],"v":[[-3.094,-245.657],[-4.016,-245.656],[-4.015,41.242],[-3.118,40.864]],"c":true}],"h":1},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[-192.5,0],[-0.192,0.531],[-191.567,0],[0.496,-0.364]],"o":[[-0.5,0],[-193.567,0],[-0.192,-0.054],[-191.504,0]],"v":[[-4.5,-245.657],[-4.433,-245.656],[-4.433,41.242],[-4.496,40.864]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-192.5,0],[-0.192,0.531],[-191.567,0],[0.496,-0.364]],"o":[[-0.5,0],[-193.567,0],[-0.192,-0.054],[-191.504,0]],"v":[[-4.5,-245.657],[-4.433,-245.656],[-4.433,41.242],[-4.496,40.864]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":141,"s":[{"i":[[187.362,0],[0.187,0.519],[181.553,0],[-0.482,-0.356]],"o":[[0.487,0],[186.444,0],[0.187,-0.053],[178.556,0]],"v":[[-3.094,-245.657],[-4.016,-245.656],[-4.015,41.242],[-3.118,40.864]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":144,"s":[{"i":[[140.935,0],[0.125,0.346],[124.502,0],[-0.322,-0.237]],"o":[[0.324,0],[125.807,0],[0.125,-0.035],[143.253,0]],"v":[[3.065,-245.657],[-10.74,-245.654],[-10.73,41.243],[2.747,40.864]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":148,"s":[{"i":[[47.224,0],[0.042,0.115],[48.434,0],[-0.107,-0.079]],"o":[[0.108,0],[44.956,0],[0.042,-0.012],[51.434,-2.364]],"v":[[11.276,-245.657],[-19.706,-245.653],[-19.684,41.245],[10.566,40.864]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[15.382,-245.657],[-24.189,-245.652],[-24.161,41.246],[14.476,40.864]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":155,"s":[{"i":[[-132.091,0],[-0.122,0.338],[-122.04,0],[0.316,-0.232]],"o":[[-0.319,0],[-123.315,0],[-0.122,-0.035],[-97.39,0]],"v":[[2.716,-245.657],[-11.603,-245.654],[-11.593,41.243],[2.39,40.864]],"c":true}]},{"t":160,"s":[{"i":[[-192.5,0],[-0.192,0.531],[-191.567,0],[0.496,-0.364]],"o":[[-0.5,0],[-193.567,0],[-0.192,-0.054],[-191.504,0]],"v":[[-4.5,-245.657],[-4.433,-245.656],[-4.433,41.242],[-4.496,40.864]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.4392157197,0.458823561668,0.482352972031,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[0]},{"i":{"x":[1],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":8,"s":[0]},{"t":10,"s":[0],"h":1},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":12,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":140,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":148,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":150,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":152,"s":[0]},{"t":160,"s":[0]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[57]},{"i":{"x":[1],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[57]},{"t":10,"s":[100],"h":1},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":11,"s":[57]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":12,"s":[57]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[57]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":140,"s":[57]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":148,"s":[57]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":149,"s":[57]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":150,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":151,"s":[57]},{"t":160,"s":[57]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[-4]},{"i":{"x":[1],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":8,"s":[-4]},{"t":10,"s":[-4],"h":1},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[177]},{"i":{"x":[1],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[171]},{"t":16,"s":[166],"h":1},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":20,"s":[-4]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":140,"s":[-4]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":144,"s":[166]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":148,"s":[171]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":149,"s":[177]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":150,"s":[-4]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":152,"s":[-4]},{"t":160,"s":[-4]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 8","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-192.5,0],[-0.192,0.531],[-191.567,0],[0.496,-0.364]],"o":[[-0.5,0],[-193.567,0],[-0.192,-0.054],[-191.504,0]],"v":[[-4.5,-245.657],[-4.433,-245.656],[-4.433,41.242],[-4.496,40.864]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":5,"s":[{"i":[[-103.966,24.032],[-0.122,0.338],[-122.04,0],[0.316,-0.232]],"o":[[-0.319,0],[-123.315,0],[-0.122,-0.035],[-111.39,-41.114]],"v":[[2.716,-245.657],[-11.603,-245.654],[-11.593,41.243],[2.39,40.864]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":8,"s":[{"i":[[-51.315,61.657],[-0.049,0.135],[-48.816,0],[0.126,-0.093]],"o":[[-0.127,0],[-49.326,0],[-0.049,-0.014],[-41.641,-51.364]],"v":[[10.315,-245.657],[-19.155,-245.653],[-19.134,41.245],[9.641,40.864]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[15.382,-245.657],[-24.189,-245.652],[-24.161,41.246],[14.476,40.864]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":12,"s":[{"i":[[41.636,0],[0.042,0.115],[47.934,-36.745],[-0.107,-0.079]],"o":[[0.108,0],[42.706,32.903],[0.042,-0.012],[39.679,0]],"v":[[11.276,-245.657],[-19.706,-245.653],[-19.684,41.245],[10.566,40.864]],"c":true}]},{"i":{"x":1,"y":1},"o":{"x":0.167,"y":0},"t":16,"s":[{"i":[[152.935,0],[0.125,0.346],[124.288,-15.748],[-0.322,-0.237]],"o":[[0.324,0],[124.842,14.101],[0.125,-0.035],[139.253,0]],"v":[[3.065,-245.657],[-10.74,-245.654],[-10.73,41.243],[2.747,40.864]],"c":true}]},{"t":19,"s":[{"i":[[187.362,0],[0.187,0.519],[181.553,0],[-0.482,-0.356]],"o":[[0.487,0],[186.444,0],[0.187,-0.053],[178.556,0]],"v":[[-3.094,-245.657],[-4.016,-245.656],[-4.015,41.242],[-3.118,40.864]],"c":true}],"h":1},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[-192.5,0],[-0.192,0.531],[-191.567,0],[0.496,-0.364]],"o":[[-0.5,0],[-193.567,0],[-0.192,-0.054],[-191.504,0]],"v":[[-4.5,-245.657],[-4.433,-245.656],[-4.433,41.242],[-4.496,40.864]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-192.5,0],[-0.192,0.531],[-191.567,0],[0.496,-0.364]],"o":[[-0.5,0],[-193.567,0],[-0.192,-0.054],[-191.504,0]],"v":[[-4.5,-245.657],[-4.433,-245.656],[-4.433,41.242],[-4.496,40.864]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":141,"s":[{"i":[[187.362,0],[0.187,0.519],[181.553,0],[-0.482,-0.356]],"o":[[0.487,0],[186.444,0],[0.187,-0.053],[178.556,0]],"v":[[-3.094,-245.657],[-4.016,-245.656],[-4.015,41.242],[-3.118,40.864]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":144,"s":[{"i":[[152.935,0],[0.125,0.346],[124.288,-15.748],[-0.322,-0.237]],"o":[[0.324,0],[124.842,14.101],[0.125,-0.035],[139.253,0]],"v":[[3.065,-245.657],[-10.74,-245.654],[-10.73,41.243],[2.747,40.864]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":148,"s":[{"i":[[41.636,0],[0.042,0.115],[47.934,-36.745],[-0.107,-0.079]],"o":[[0.108,0],[42.706,32.903],[0.042,-0.012],[39.679,0]],"v":[[11.276,-245.657],[-19.706,-245.653],[-19.684,41.245],[10.566,40.864]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[15.382,-245.657],[-24.189,-245.652],[-24.161,41.246],[14.476,40.864]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":152,"s":[{"i":[[-51.315,61.657],[-0.049,0.135],[-48.816,0],[0.126,-0.093]],"o":[[-0.127,0],[-49.326,0],[-0.049,-0.014],[-41.641,-51.364]],"v":[[10.315,-245.657],[-19.155,-245.653],[-19.134,41.245],[9.641,40.864]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":155,"s":[{"i":[[-103.966,24.032],[-0.122,0.338],[-122.04,0],[0.316,-0.232]],"o":[[-0.319,0],[-123.315,0],[-0.122,-0.035],[-111.39,-41.114]],"v":[[2.716,-245.657],[-11.603,-245.654],[-11.593,41.243],[2.39,40.864]],"c":true}]},{"t":160,"s":[{"i":[[-192.5,0],[-0.192,0.531],[-191.567,0],[0.496,-0.364]],"o":[[-0.5,0],[-193.567,0],[-0.192,-0.054],[-191.504,0]],"v":[[-4.5,-245.657],[-4.433,-245.656],[-4.433,41.242],[-4.496,40.864]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":2,"k":{"a":0,"k":[0,1,1,1,1,0,0,0]}},"s":{"a":1,"k":[{"i":{"x":0.667,"y":0.667},"o":{"x":0.167,"y":0.167},"t":0,"s":[-22.476,-223.466],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":20,"s":[-22.476,-223.466],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0.333},"t":140,"s":[-22.476,-223.466],"to":[0,0],"ti":[0,0]},{"t":160,"s":[-22.476,-223.466]}]},"e":{"a":1,"k":[{"i":{"x":0.667,"y":0.667},"o":{"x":0.167,"y":0.167},"t":0,"s":[48.472,31.505],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":20,"s":[48.472,31.505],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0.333},"t":140,"s":[48.472,31.505],"to":[0,0],"ti":[0,0]},{"t":160,"s":[48.472,31.505]}]},"t":1,"nm":"Gradient Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"base-glass 7","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":11,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.318],"y":[0]},"t":20,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":140,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":149,"s":[0]},{"i":{"x":[0.613],"y":[0.579]},"o":{"x":[0.276],"y":[0.237]},"t":150,"s":[100]},{"t":160,"s":[92.25]}]},"r":{"a":0,"k":45.436},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":0,"s":[290.875,212.356,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[304.909,226.606,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":20,"s":[290.875,212.356,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":140,"s":[290.875,212.356,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[304.909,226.606,0],"to":[0,0,0],"ti":[0,0,0]},{"t":160,"s":[290.875,212.356,0]}]},"a":{"a":0,"k":[-4.564,-93.458,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[31.028,-14.025],[6.197,4.851],[-50.572,27.857],[-2.083,-10.446]],"o":[[-41.362,18.696],[-6.866,-5.375],[55.205,-30.409],[2.104,10.551]],"v":[[-21.078,-143.551],[-104.67,-114.018],[-54.391,-193.84],[54.341,-186.825]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[-0.11,-14.025],[-0.022,4.851],[0.18,27.857],[0.007,-10.446]],"o":[[0.147,18.696],[0.024,-5.375],[-0.196,-30.409],[-0.007,10.551]],"v":[[-4.504,-143.551],[-4.207,-114.018],[-4.386,-193.84],[-4.772,-186.825]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[31.028,-14.025],[6.197,4.851],[-50.572,27.857],[-2.083,-10.446]],"o":[[-41.362,18.696],[-6.866,-5.375],[55.205,-30.409],[2.104,10.551]],"v":[[-21.078,-143.551],[-104.67,-114.018],[-54.391,-193.84],[54.341,-186.825]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[31.028,-14.025],[6.197,4.851],[-50.572,27.857],[-2.083,-10.446]],"o":[[-41.362,18.696],[-6.866,-5.375],[55.205,-30.409],[2.104,10.551]],"v":[[-21.078,-143.551],[-104.67,-114.018],[-54.391,-193.84],[54.341,-186.825]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[-0.11,-14.025],[-0.022,4.851],[0.18,27.857],[0.007,-10.446]],"o":[[0.147,18.696],[0.024,-5.375],[-0.196,-30.409],[-0.007,10.551]],"v":[[-4.504,-143.551],[-4.207,-114.018],[-4.386,-193.84],[-4.772,-186.825]],"c":true}]},{"t":160,"s":[{"i":[[31.028,-14.025],[6.197,4.851],[-50.572,27.857],[-2.083,-10.446]],"o":[[-41.362,18.696],[-6.866,-5.375],[55.205,-30.409],[2.104,10.551]],"v":[[-21.078,-143.551],[-104.67,-114.018],[-54.391,-193.84],[54.341,-186.825]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":6,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[10]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":140,"s":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":154,"s":[10]},{"t":160,"s":[0]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-4.148,1.682],[-15.839,15.68],[30.438,54.988]],"o":[[51.497,-0.634],[46.887,-46.376],[0,0]],"v":[[-2.497,41.384],[96.665,0.149],[121.444,-171.832]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0.015,1.682],[0.056,15.68],[-0.108,54.988]],"o":[[-0.183,-0.634],[-0.167,-46.376],[0,0]],"v":[[-4.57,41.384],[-4.923,0.149],[-5.011,-171.832]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[-4.148,1.682],[-15.839,15.68],[30.438,54.988]],"o":[[51.497,-0.634],[46.887,-46.376],[0,0]],"v":[[-2.497,41.384],[96.665,0.149],[121.444,-171.832]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-4.148,1.682],[-15.839,15.68],[30.438,54.988]],"o":[[51.497,-0.634],[46.887,-46.376],[0,0]],"v":[[-2.497,41.384],[96.665,0.149],[121.444,-171.832]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0.015,1.682],[0.056,15.68],[-0.108,54.988]],"o":[[-0.183,-0.634],[-0.167,-46.376],[0,0]],"v":[[-4.57,41.384],[-4.923,0.149],[-5.011,-171.832]],"c":false}]},{"t":160,"s":[{"i":[[-4.148,1.682],[-15.839,15.68],[30.438,54.988]],"o":[[51.497,-0.634],[46.887,-46.376],[0,0]],"v":[[-2.497,41.384],[96.665,0.149],[121.444,-171.832]],"c":false}]}]},"nm":"Контур 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.603921592236,0.556862771511,0.501960813999,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[0.596,-2.167]],"o":[[-0.474,2.191],[0,0]],"v":[[114.179,-76.54],[112.575,-70.002]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,0],[-0.002,-2.167]],"o":[[0.002,2.191],[0,0]],"v":[[-4.985,-76.54],[-4.979,-70.002]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0,0],[0.596,-2.167]],"o":[[-0.474,2.191],[0,0]],"v":[[114.179,-76.54],[112.575,-70.002]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[0.596,-2.167]],"o":[[-0.474,2.191],[0,0]],"v":[[114.179,-76.54],[112.575,-70.002]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0,0],[-0.002,-2.167]],"o":[[0.002,2.191],[0,0]],"v":[[-4.985,-76.54],[-4.979,-70.002]],"c":false}]},{"t":160,"s":[{"i":[[0,0],[0.596,-2.167]],"o":[[-0.474,2.191],[0,0]],"v":[[114.179,-76.54],[112.575,-70.002]],"c":false}]}]},"nm":"Контур 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[8.923,-8.828]],"o":[[-5.616,10.521],[0,0]],"v":[[102.649,-45.089],[80.839,-15.873]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,0],[-0.032,-8.828]],"o":[[0.02,10.521],[0,0]],"v":[[-4.944,-45.089],[-4.867,-15.873]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0,0],[8.923,-8.828]],"o":[[-5.616,10.521],[0,0]],"v":[[102.649,-45.089],[80.839,-15.873]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[8.923,-8.828]],"o":[[-5.616,10.521],[0,0]],"v":[[102.649,-45.089],[80.839,-15.873]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0,0],[-0.032,-8.828]],"o":[[0.02,10.521],[0,0]],"v":[[-4.944,-45.089],[-4.867,-15.873]],"c":false}]},{"t":160,"s":[{"i":[[0,0],[8.923,-8.828]],"o":[[-5.616,10.521],[0,0]],"v":[[102.649,-45.089],[80.839,-15.873]],"c":false}]}]},"nm":"Контур 2","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[8]},{"t":7,"s":[0],"h":1},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":20,"s":[8]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":140,"s":[8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":153,"s":[0]},{"t":160,"s":[8]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[43.59,-43.124],[47.254,47.754],[5.416,19.102]],"o":[[35.521,47.838],[-47.754,47.243],[-14.949,-15.114],[0,0]],"v":[[93.062,-174.751],[80.839,-15.873],[-91.192,-16.799],[-121.734,-69.057]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,0],[-0.155,-43.124],[-0.168,47.754],[-0.019,19.102]],"o":[[-0.126,47.838],[0.17,47.243],[0.053,-15.114],[0,0]],"v":[[-4.91,-174.751],[-4.867,-15.873],[-4.255,-16.799],[-4.146,-69.057]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0,0],[43.59,-43.124],[47.254,47.754],[5.416,19.102]],"o":[[35.521,47.838],[-47.754,47.243],[-14.949,-15.114],[0,0]],"v":[[93.062,-174.751],[80.839,-15.873],[-91.192,-16.799],[-121.734,-69.057]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[43.59,-43.124],[47.254,47.754],[5.416,19.102]],"o":[[35.521,47.838],[-47.754,47.243],[-14.949,-15.114],[0,0]],"v":[[93.062,-174.751],[80.839,-15.873],[-91.192,-16.799],[-121.734,-69.057]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0,0],[-0.155,-43.124],[-0.168,47.754],[-0.019,19.102]],"o":[[-0.126,47.838],[0.17,47.243],[0.053,-15.114],[0,0]],"v":[[-4.91,-174.751],[-4.867,-15.873],[-4.255,-16.799],[-4.146,-69.057]],"c":false}]},{"t":160,"s":[{"i":[[0,0],[43.59,-43.124],[47.254,47.754],[5.416,19.102]],"o":[[35.521,47.838],[-47.754,47.243],[-14.949,-15.114],[0,0]],"v":[[93.062,-174.751],[80.839,-15.873],[-91.192,-16.799],[-121.734,-69.057]],"c":false}]}]},"nm":"Контур 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.596078455448,0.647058844566,0.729411780834,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[47.765,-47.254],[47.254,47.754],[-47.754,47.243],[-47.243,-47.765]],"o":[[-47.754,47.243],[-47.243,-47.765],[47.765,-47.254],[47.254,47.754]],"v":[[80.838,-15.873],[-91.192,-16.799],[-90.267,-188.83],[81.764,-187.904]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[-0.17,-47.254],[-0.168,47.765],[0.17,47.243],[0.168,-47.754]],"o":[[0.17,47.243],[0.168,-47.765],[-0.17,-47.254],[-0.168,47.754]],"v":[[-4.867,-15.873],[-4.255,-16.799],[-4.258,-188.83],[-4.87,-187.904]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[47.765,-47.254],[47.254,47.754],[-47.754,47.243],[-47.243,-47.765]],"o":[[-47.754,47.243],[-47.243,-47.765],[47.765,-47.254],[47.254,47.754]],"v":[[80.838,-15.873],[-91.192,-16.799],[-90.267,-188.83],[81.764,-187.904]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[47.765,-47.254],[47.254,47.754],[-47.754,47.243],[-47.243,-47.765]],"o":[[-47.754,47.243],[-47.243,-47.765],[47.765,-47.254],[47.254,47.754]],"v":[[80.838,-15.873],[-91.192,-16.799],[-90.267,-188.83],[81.764,-187.904]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[-0.17,-47.254],[-0.168,47.765],[0.17,47.243],[0.168,-47.754]],"o":[[0.17,47.243],[0.168,-47.765],[-0.17,-47.254],[-0.168,47.754]],"v":[[-4.867,-15.873],[-4.255,-16.799],[-4.258,-188.83],[-4.87,-187.904]],"c":true}]},{"t":160,"s":[{"i":[[47.765,-47.254],[47.254,47.754],[-47.754,47.243],[-47.243,-47.765]],"o":[[-47.754,47.243],[-47.243,-47.765],[47.765,-47.254],[47.254,47.754]],"v":[[80.838,-15.873],[-91.192,-16.799],[-90.267,-188.83],[81.764,-187.904]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.415686279535,0.435294121504,0.46274510026,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[-36.771,-37.169],[-51.661,2.131]],"o":[[-11.915,47.25],[15.68,15.849],[4.13,1.645]],"v":[[-144.126,-137.511],[-106.896,-0.946],[-2.339,41.369]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,0],[0.131,-37.169],[0.184,2.131]],"o":[[0.042,47.25],[-0.056,15.849],[-0.015,1.645]],"v":[[-4.066,-137.511],[-4.199,-0.946],[-4.571,41.369]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0,0],[-36.771,-37.169],[-51.661,2.131]],"o":[[-11.915,47.25],[15.68,15.849],[4.13,1.645]],"v":[[-144.126,-137.511],[-106.896,-0.946],[-2.339,41.369]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[-36.771,-37.169],[-51.661,2.131]],"o":[[-11.915,47.25],[15.68,15.849],[4.13,1.645]],"v":[[-144.126,-137.511],[-106.896,-0.946],[-2.339,41.369]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0,0],[0.131,-37.169],[0.184,2.131]],"o":[[0.042,47.25],[-0.056,15.849],[-0.015,1.645]],"v":[[-4.066,-137.511],[-4.199,-0.946],[-4.571,41.369]],"c":false}]},{"t":160,"s":[{"i":[[0,0],[-36.771,-37.169],[-51.661,2.131]],"o":[[-11.915,47.25],[15.68,15.849],[4.13,1.645]],"v":[[-144.126,-137.511],[-106.896,-0.946],[-2.339,41.369]],"c":false}]}]},"nm":"Контур 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.57647061348,0.564705908298,0.596078455448,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[-36.771,-37.169],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68],[30.439,54.988]],"o":[[-11.915,47.25],[15.68,15.849],[39.089,15.631],[19.748,-6.813],[46.887,-46.376],[0,0]],"v":[[-144.126,-137.511],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149],[121.444,-171.832]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,0],[0.131,-37.169],[0.07,-7.025],[0.015,1.682],[0.056,15.68],[-0.108,54.988]],"o":[[0.042,47.25],[-0.056,15.849],[-0.139,15.631],[-0.07,-6.813],[-0.167,-46.376],[0,0]],"v":[[-4.066,-137.511],[-4.199,-0.946],[-4.39,33.369],[-4.73,33.884],[-4.923,0.149],[-5.011,-171.832]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0,0],[-36.771,-37.169],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68],[30.439,54.988]],"o":[[-11.915,47.25],[15.68,15.849],[39.089,15.631],[19.748,-6.813],[46.887,-46.376],[0,0]],"v":[[-144.126,-137.511],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149],[121.444,-171.832]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[-36.771,-37.169],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68],[30.439,54.988]],"o":[[-11.915,47.25],[15.68,15.849],[39.089,15.631],[19.748,-6.813],[46.887,-46.376],[0,0]],"v":[[-144.126,-137.511],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149],[121.444,-171.832]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0,0],[0.131,-37.169],[0.07,-7.025],[0.015,1.682],[0.056,15.68],[-0.108,54.988]],"o":[[0.042,47.25],[-0.056,15.849],[-0.139,15.631],[-0.07,-6.813],[-0.167,-46.376],[0,0]],"v":[[-4.066,-137.511],[-4.199,-0.946],[-4.39,33.369],[-4.73,33.884],[-4.923,0.149],[-5.011,-171.832]],"c":false}]},{"t":160,"s":[{"i":[[0,0],[-36.771,-37.169],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68],[30.439,54.988]],"o":[[-11.915,47.25],[15.68,15.849],[39.089,15.631],[19.748,-6.813],[46.887,-46.376],[0,0]],"v":[[-144.126,-137.511],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149],[121.444,-171.832]],"c":false}]}]},"nm":"Контур 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[55.919,56.513],[56.513,-55.919],[-55.908,-56.513],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68]],"o":[[-55.908,-56.523],[-56.513,55.908],[15.68,15.849],[52.339,15.381],[19.748,-6.813],[56.523,-55.908]],"v":[[97.76,-203.411],[-105.8,-204.506],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[-0.199,56.523],[-0.201,-55.919],[0.199,-56.513],[0.07,-7.025],[0.015,1.682],[0.056,15.68]],"o":[[0.199,-56.523],[0.201,55.908],[-0.056,15.849],[-0.186,15.381],[-0.07,-6.813],[-0.201,-55.908]],"v":[[-4.927,-203.411],[-4.203,-204.506],[-4.199,-0.946],[-4.39,33.369],[-4.73,33.884],[-4.923,0.149]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[55.919,56.513],[56.513,-55.919],[-55.908,-56.513],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68]],"o":[[-55.908,-56.523],[-56.513,55.908],[15.68,15.849],[52.339,15.381],[19.748,-6.813],[56.523,-55.908]],"v":[[97.76,-203.411],[-105.8,-204.506],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[55.919,56.513],[56.513,-55.919],[-55.908,-56.513],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68]],"o":[[-55.908,-56.523],[-56.513,55.908],[15.68,15.849],[52.339,15.381],[19.748,-6.813],[56.523,-55.908]],"v":[[97.76,-203.411],[-105.8,-204.506],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[-0.199,56.523],[-0.201,-55.919],[0.199,-56.513],[0.07,-7.025],[0.015,1.682],[0.056,15.68]],"o":[[0.199,-56.523],[0.201,55.908],[-0.056,15.849],[-0.186,15.381],[-0.07,-6.813],[-0.201,-55.908]],"v":[[-4.927,-203.411],[-4.203,-204.506],[-4.199,-0.946],[-4.39,33.369],[-4.73,33.884],[-4.923,0.149]],"c":true}]},{"t":160,"s":[{"i":[[55.919,56.513],[56.513,-55.919],[-55.908,-56.513],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68]],"o":[[-55.908,-56.523],[-56.513,55.908],[15.68,15.849],[52.339,15.381],[19.748,-6.813],[56.523,-55.908]],"v":[[97.76,-203.411],[-105.8,-204.506],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149]],"c":true}]}]},"nm":"Контур 2","hd":false},{"ty":"st","c":{"a":0,"k":[0.392156869173,0.596078455448,0.749019622803,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[47.771,-47.26],[47.26,47.76],[-47.76,47.249],[-47.249,-47.771]],"o":[[-47.76,47.249],[-47.249,-47.771],[47.771,-47.26],[47.26,47.76]],"v":[[80.995,-15.689],[-91.057,-16.615],[-90.131,-188.667],[81.921,-187.742]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[-0.17,-47.26],[-0.168,47.771],[0.17,47.249],[0.168,-47.76]],"o":[[0.17,47.249],[0.168,-47.771],[-0.17,-47.26],[-0.168,47.76]],"v":[[-4.867,-15.689],[-4.255,-16.615],[-4.258,-188.667],[-4.87,-187.742]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[47.771,-47.26],[47.26,47.76],[-47.76,47.249],[-47.249,-47.771]],"o":[[-47.76,47.249],[-47.249,-47.771],[47.771,-47.26],[47.26,47.76]],"v":[[80.995,-15.689],[-91.057,-16.615],[-90.131,-188.667],[81.921,-187.742]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[47.771,-47.26],[47.26,47.76],[-47.76,47.249],[-47.249,-47.771]],"o":[[-47.76,47.249],[-47.249,-47.771],[47.771,-47.26],[47.26,47.76]],"v":[[80.995,-15.689],[-91.057,-16.615],[-90.131,-188.667],[81.921,-187.742]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[-0.17,-47.26],[-0.168,47.771],[0.17,47.249],[0.168,-47.76]],"o":[[0.17,47.249],[0.168,-47.771],[-0.17,-47.26],[-0.168,47.76]],"v":[[-4.867,-15.689],[-4.255,-16.615],[-4.258,-188.667],[-4.87,-187.742]],"c":true}]},{"t":160,"s":[{"i":[[47.771,-47.26],[47.26,47.76],[-47.76,47.249],[-47.249,-47.771]],"o":[[-47.76,47.249],[-47.249,-47.771],[47.771,-47.26],[47.26,47.76]],"v":[[80.995,-15.689],[-91.057,-16.615],[-90.131,-188.667],[81.921,-187.742]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[55.919,56.513],[56.513,-55.919],[-55.908,-56.513],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68]],"o":[[-55.908,-56.523],[-56.513,55.908],[15.68,15.849],[47.589,14.631],[19.748,-6.813],[56.523,-55.908]],"v":[[97.76,-203.411],[-105.8,-204.506],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[-0.199,56.523],[-0.201,-55.919],[0.199,-56.513],[0.07,-7.025],[0.015,1.682],[0.056,15.68]],"o":[[0.199,-56.523],[0.201,55.908],[-0.056,15.849],[-0.169,14.631],[-0.07,-6.813],[-0.201,-55.908]],"v":[[-4.927,-203.411],[-4.203,-204.506],[-4.199,-0.946],[-4.39,33.369],[-4.73,33.884],[-4.923,0.149]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[55.919,56.513],[56.513,-55.919],[-55.908,-56.513],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68]],"o":[[-55.908,-56.523],[-56.513,55.908],[15.68,15.849],[47.589,14.631],[19.748,-6.813],[56.523,-55.908]],"v":[[97.76,-203.411],[-105.8,-204.506],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[55.919,56.513],[56.513,-55.919],[-55.908,-56.513],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68]],"o":[[-55.908,-56.523],[-56.513,55.908],[15.68,15.849],[47.589,14.631],[19.748,-6.813],[56.523,-55.908]],"v":[[97.76,-203.411],[-105.8,-204.506],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[-0.199,56.523],[-0.201,-55.919],[0.199,-56.513],[0.07,-7.025],[0.015,1.682],[0.056,15.68]],"o":[[0.199,-56.523],[0.201,55.908],[-0.056,15.849],[-0.169,14.631],[-0.07,-6.813],[-0.201,-55.908]],"v":[[-4.927,-203.411],[-4.203,-204.506],[-4.199,-0.946],[-4.39,33.369],[-4.73,33.884],[-4.923,0.149]],"c":true}]},{"t":160,"s":[{"i":[[55.919,56.513],[56.513,-55.919],[-55.908,-56.513],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68]],"o":[[-55.908,-56.523],[-56.513,55.908],[15.68,15.849],[47.589,14.631],[19.748,-6.813],[56.523,-55.908]],"v":[[97.76,-203.411],[-105.8,-204.506],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149]],"c":true}]}]},"nm":"Контур 2","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0,0.627,0.733,0.859,0.25,0.812,0.865,0.927,0.5,0.996,0.996,0.996,0.75,0.635,0.639,0.645,1,0.275,0.282,0.294]}},"s":{"a":0,"k":[-40.657,-257.764]},"e":{"a":0,"k":[-64.94,27.475]},"t":1,"nm":"Gradient Fill 2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 8","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"base-glass 6","sr":1,"ks":{"r":{"a":0,"k":45.436},"p":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[290.875,212.356,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":10,"s":[276.841,198.107,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":20,"s":[290.875,212.356,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[290.875,212.356,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":150,"s":[276.841,198.107,0],"to":[0,0,0],"ti":[0,0,0]},{"t":160,"s":[290.875,212.356,0]}]},"a":{"a":0,"k":[-4.564,-93.458,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-4.148,1.682],[-15.839,15.68],[30.438,54.988]],"o":[[51.497,-0.634],[46.887,-46.376],[0,0]],"v":[[-2.497,41.384],[96.665,0.149],[121.444,-171.832]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0.015,1.682],[0.056,15.68],[-0.108,54.988]],"o":[[-0.183,-0.634],[-0.167,-46.376],[0,0]],"v":[[-4.57,41.384],[-4.923,0.149],[-5.011,-171.832]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[-4.148,1.682],[-15.839,15.68],[30.438,54.988]],"o":[[51.497,-0.634],[46.887,-46.376],[0,0]],"v":[[-2.497,41.384],[96.665,0.149],[121.444,-171.832]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-4.148,1.682],[-15.839,15.68],[30.438,54.988]],"o":[[51.497,-0.634],[46.887,-46.376],[0,0]],"v":[[-2.497,41.384],[96.665,0.149],[121.444,-171.832]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0.015,1.682],[0.056,15.68],[-0.108,54.988]],"o":[[-0.183,-0.634],[-0.167,-46.376],[0,0]],"v":[[-4.57,41.384],[-4.923,0.149],[-5.011,-171.832]],"c":false}]},{"t":160,"s":[{"i":[[-4.148,1.682],[-15.839,15.68],[30.438,54.988]],"o":[[51.497,-0.634],[46.887,-46.376],[0,0]],"v":[[-2.497,41.384],[96.665,0.149],[121.444,-171.832]],"c":false}]}]},"nm":"Контур 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.603921592236,0.556862771511,0.501960813999,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[43.59,-43.124],[47.254,47.754],[5.416,19.102]],"o":[[35.521,47.838],[-47.754,47.243],[-14.949,-15.114],[0,0]],"v":[[93.062,-174.751],[80.839,-15.873],[-91.192,-16.799],[-121.734,-69.057]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,0],[-0.155,-43.124],[-0.168,47.754],[-0.019,19.102]],"o":[[-0.126,47.838],[0.17,47.243],[0.053,-15.114],[0,0]],"v":[[-4.91,-174.751],[-4.867,-15.873],[-4.255,-16.799],[-4.146,-69.057]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0,0],[43.59,-43.124],[47.254,47.754],[5.416,19.102]],"o":[[35.521,47.838],[-47.754,47.243],[-14.949,-15.114],[0,0]],"v":[[93.062,-174.751],[80.839,-15.873],[-91.192,-16.799],[-121.734,-69.057]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[43.59,-43.124],[47.254,47.754],[5.416,19.102]],"o":[[35.521,47.838],[-47.754,47.243],[-14.949,-15.114],[0,0]],"v":[[93.062,-174.751],[80.839,-15.873],[-91.192,-16.799],[-121.734,-69.057]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0,0],[-0.155,-43.124],[-0.168,47.754],[-0.019,19.102]],"o":[[-0.126,47.838],[0.17,47.243],[0.053,-15.114],[0,0]],"v":[[-4.91,-174.751],[-4.867,-15.873],[-4.255,-16.799],[-4.146,-69.057]],"c":false}]},{"t":160,"s":[{"i":[[0,0],[43.59,-43.124],[47.254,47.754],[5.416,19.102]],"o":[[35.521,47.838],[-47.754,47.243],[-14.949,-15.114],[0,0]],"v":[[93.062,-174.751],[80.839,-15.873],[-91.192,-16.799],[-121.734,-69.057]],"c":false}]}]},"nm":"Контур 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.596078455448,0.647058844566,0.729411780834,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[-3.855,-104.374]},"a":{"a":0,"k":[-3.855,-104.374]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":-0.036},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":1,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":11,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":140,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":149,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":150,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":159,"s":[0]},{"t":160,"s":[100]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"vischeck","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[31.028,-14.025],[6.197,4.851],[-50.572,27.857],[-2.083,-10.446]],"o":[[-41.362,18.696],[-6.866,-5.375],[55.205,-30.409],[2.104,10.551]],"v":[[-21.078,-143.551],[-104.67,-114.018],[-54.391,-193.84],[54.341,-186.825]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[-0.11,-14.025],[-0.022,4.851],[0.18,27.857],[0.007,-10.446]],"o":[[0.147,18.696],[0.024,-5.375],[-0.196,-30.409],[-0.007,10.551]],"v":[[-4.504,-143.551],[-4.207,-114.018],[-4.386,-193.84],[-4.772,-186.825]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[31.028,-14.025],[6.197,4.851],[-50.572,27.857],[-2.083,-10.446]],"o":[[-41.362,18.696],[-6.866,-5.375],[55.205,-30.409],[2.104,10.551]],"v":[[-21.078,-143.551],[-104.67,-114.018],[-54.391,-193.84],[54.341,-186.825]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[31.028,-14.025],[6.197,4.851],[-50.572,27.857],[-2.083,-10.446]],"o":[[-41.362,18.696],[-6.866,-5.375],[55.205,-30.409],[2.104,10.551]],"v":[[-21.078,-143.551],[-104.67,-114.018],[-54.391,-193.84],[54.341,-186.825]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[-0.11,-14.025],[-0.022,4.851],[0.18,27.857],[0.007,-10.446]],"o":[[0.147,18.696],[0.024,-5.375],[-0.196,-30.409],[-0.007,10.551]],"v":[[-4.504,-143.551],[-4.207,-114.018],[-4.386,-193.84],[-4.772,-186.825]],"c":true}]},{"t":160,"s":[{"i":[[31.028,-14.025],[6.197,4.851],[-50.572,27.857],[-2.083,-10.446]],"o":[[-41.362,18.696],[-6.866,-5.375],[55.205,-30.409],[2.104,10.551]],"v":[[-21.078,-143.551],[-104.67,-114.018],[-54.391,-193.84],[54.341,-186.825]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":10},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[47.765,-47.254],[47.254,47.754],[-47.754,47.243],[-47.243,-47.765]],"o":[[-47.754,47.243],[-47.243,-47.765],[47.765,-47.254],[47.254,47.754]],"v":[[80.838,-15.873],[-91.192,-16.799],[-90.267,-188.83],[81.764,-187.904]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[-0.17,-47.254],[-0.168,47.765],[0.17,47.243],[0.168,-47.754]],"o":[[0.17,47.243],[0.168,-47.765],[-0.17,-47.254],[-0.168,47.754]],"v":[[-4.867,-15.873],[-4.255,-16.799],[-4.258,-188.83],[-4.87,-187.904]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[47.765,-47.254],[47.254,47.754],[-47.754,47.243],[-47.243,-47.765]],"o":[[-47.754,47.243],[-47.243,-47.765],[47.765,-47.254],[47.254,47.754]],"v":[[80.838,-15.873],[-91.192,-16.799],[-90.267,-188.83],[81.764,-187.904]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[47.765,-47.254],[47.254,47.754],[-47.754,47.243],[-47.243,-47.765]],"o":[[-47.754,47.243],[-47.243,-47.765],[47.765,-47.254],[47.254,47.754]],"v":[[80.838,-15.873],[-91.192,-16.799],[-90.267,-188.83],[81.764,-187.904]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[-0.17,-47.254],[-0.168,47.765],[0.17,47.243],[0.168,-47.754]],"o":[[0.17,47.243],[0.168,-47.765],[-0.17,-47.254],[-0.168,47.754]],"v":[[-4.867,-15.873],[-4.255,-16.799],[-4.258,-188.83],[-4.87,-187.904]],"c":true}]},{"t":160,"s":[{"i":[[47.765,-47.254],[47.254,47.754],[-47.754,47.243],[-47.243,-47.765]],"o":[[-47.754,47.243],[-47.243,-47.765],[47.765,-47.254],[47.254,47.754]],"v":[[80.838,-15.873],[-91.192,-16.799],[-90.267,-188.83],[81.764,-187.904]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.415686279535,0.435294121504,0.46274510026,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[-36.771,-37.169],[-51.661,2.131]],"o":[[-11.915,47.25],[15.68,15.849],[4.13,1.645]],"v":[[-144.126,-137.511],[-106.896,-0.946],[-2.339,41.369]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,0],[0.131,-37.169],[0.184,2.131]],"o":[[0.042,47.25],[-0.056,15.849],[-0.015,1.645]],"v":[[-4.066,-137.511],[-4.199,-0.946],[-4.571,41.369]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0,0],[-36.771,-37.169],[-51.661,2.131]],"o":[[-11.915,47.25],[15.68,15.849],[4.13,1.645]],"v":[[-144.126,-137.511],[-106.896,-0.946],[-2.339,41.369]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[-36.771,-37.169],[-51.661,2.131]],"o":[[-11.915,47.25],[15.68,15.849],[4.13,1.645]],"v":[[-144.126,-137.511],[-106.896,-0.946],[-2.339,41.369]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0,0],[0.131,-37.169],[0.184,2.131]],"o":[[0.042,47.25],[-0.056,15.849],[-0.015,1.645]],"v":[[-4.066,-137.511],[-4.199,-0.946],[-4.571,41.369]],"c":false}]},{"t":160,"s":[{"i":[[0,0],[-36.771,-37.169],[-51.661,2.131]],"o":[[-11.915,47.25],[15.68,15.849],[4.13,1.645]],"v":[[-144.126,-137.511],[-106.896,-0.946],[-2.339,41.369]],"c":false}]}]},"nm":"Контур 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.57647061348,0.564705908298,0.596078455448,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[-36.771,-37.169],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68],[30.439,54.988]],"o":[[-11.915,47.25],[15.68,15.849],[39.089,15.631],[19.748,-6.813],[46.887,-46.376],[0,0]],"v":[[-144.126,-137.511],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149],[121.444,-171.832]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,0],[0.131,-37.169],[0.07,-7.025],[0.015,1.682],[0.056,15.68],[-0.108,54.988]],"o":[[0.042,47.25],[-0.056,15.849],[-0.139,15.631],[-0.07,-6.813],[-0.167,-46.376],[0,0]],"v":[[-4.066,-137.511],[-4.199,-0.946],[-4.39,33.369],[-4.73,33.884],[-4.923,0.149],[-5.011,-171.832]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0,0],[-36.771,-37.169],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68],[30.439,54.988]],"o":[[-11.915,47.25],[15.68,15.849],[39.089,15.631],[19.748,-6.813],[46.887,-46.376],[0,0]],"v":[[-144.126,-137.511],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149],[121.444,-171.832]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[-36.771,-37.169],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68],[30.439,54.988]],"o":[[-11.915,47.25],[15.68,15.849],[39.089,15.631],[19.748,-6.813],[46.887,-46.376],[0,0]],"v":[[-144.126,-137.511],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149],[121.444,-171.832]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0,0],[0.131,-37.169],[0.07,-7.025],[0.015,1.682],[0.056,15.68],[-0.108,54.988]],"o":[[0.042,47.25],[-0.056,15.849],[-0.139,15.631],[-0.07,-6.813],[-0.167,-46.376],[0,0]],"v":[[-4.066,-137.511],[-4.199,-0.946],[-4.39,33.369],[-4.73,33.884],[-4.923,0.149],[-5.011,-171.832]],"c":false}]},{"t":160,"s":[{"i":[[0,0],[-36.771,-37.169],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68],[30.439,54.988]],"o":[[-11.915,47.25],[15.68,15.849],[39.089,15.631],[19.748,-6.813],[46.887,-46.376],[0,0]],"v":[[-144.126,-137.511],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149],[121.444,-171.832]],"c":false}]}]},"nm":"Контур 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[55.919,56.513],[56.513,-55.919],[-55.908,-56.513],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68]],"o":[[-55.908,-56.523],[-56.513,55.908],[15.68,15.849],[52.339,15.381],[19.748,-6.813],[56.523,-55.908]],"v":[[97.76,-203.411],[-105.8,-204.506],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[-0.199,56.523],[-0.201,-55.919],[0.199,-56.513],[0.07,-7.025],[0.015,1.682],[0.056,15.68]],"o":[[0.199,-56.523],[0.201,55.908],[-0.056,15.849],[-0.186,15.381],[-0.07,-6.813],[-0.201,-55.908]],"v":[[-4.927,-203.411],[-4.203,-204.506],[-4.199,-0.946],[-4.39,33.369],[-4.73,33.884],[-4.923,0.149]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[55.919,56.513],[56.513,-55.919],[-55.908,-56.513],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68]],"o":[[-55.908,-56.523],[-56.513,55.908],[15.68,15.849],[52.339,15.381],[19.748,-6.813],[56.523,-55.908]],"v":[[97.76,-203.411],[-105.8,-204.506],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[55.919,56.513],[56.513,-55.919],[-55.908,-56.513],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68]],"o":[[-55.908,-56.523],[-56.513,55.908],[15.68,15.849],[52.339,15.381],[19.748,-6.813],[56.523,-55.908]],"v":[[97.76,-203.411],[-105.8,-204.506],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[-0.199,56.523],[-0.201,-55.919],[0.199,-56.513],[0.07,-7.025],[0.015,1.682],[0.056,15.68]],"o":[[0.199,-56.523],[0.201,55.908],[-0.056,15.849],[-0.186,15.381],[-0.07,-6.813],[-0.201,-55.908]],"v":[[-4.927,-203.411],[-4.203,-204.506],[-4.199,-0.946],[-4.39,33.369],[-4.73,33.884],[-4.923,0.149]],"c":true}]},{"t":160,"s":[{"i":[[55.919,56.513],[56.513,-55.919],[-55.908,-56.513],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68]],"o":[[-55.908,-56.523],[-56.513,55.908],[15.68,15.849],[52.339,15.381],[19.748,-6.813],[56.523,-55.908]],"v":[[97.76,-203.411],[-105.8,-204.506],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149]],"c":true}]}]},"nm":"Контур 2","hd":false},{"ty":"st","c":{"a":0,"k":[0.392156869173,0.596078455448,0.749019622803,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":1,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":11,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":140,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":149,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":150,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":159,"s":[0]},{"t":160,"s":[100]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[47.771,-47.26],[47.26,47.76],[-47.76,47.249],[-47.249,-47.771]],"o":[[-47.76,47.249],[-47.249,-47.771],[47.771,-47.26],[47.26,47.76]],"v":[[80.995,-15.689],[-91.057,-16.615],[-90.131,-188.667],[81.921,-187.742]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[-0.17,-47.26],[-0.168,47.771],[0.17,47.249],[0.168,-47.76]],"o":[[0.17,47.249],[0.168,-47.771],[-0.17,-47.26],[-0.168,47.76]],"v":[[-4.867,-15.689],[-4.255,-16.615],[-4.258,-188.667],[-4.87,-187.742]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[47.771,-47.26],[47.26,47.76],[-47.76,47.249],[-47.249,-47.771]],"o":[[-47.76,47.249],[-47.249,-47.771],[47.771,-47.26],[47.26,47.76]],"v":[[80.995,-15.689],[-91.057,-16.615],[-90.131,-188.667],[81.921,-187.742]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[47.771,-47.26],[47.26,47.76],[-47.76,47.249],[-47.249,-47.771]],"o":[[-47.76,47.249],[-47.249,-47.771],[47.771,-47.26],[47.26,47.76]],"v":[[80.995,-15.689],[-91.057,-16.615],[-90.131,-188.667],[81.921,-187.742]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[-0.17,-47.26],[-0.168,47.771],[0.17,47.249],[0.168,-47.76]],"o":[[0.17,47.249],[0.168,-47.771],[-0.17,-47.26],[-0.168,47.76]],"v":[[-4.867,-15.689],[-4.255,-16.615],[-4.258,-188.667],[-4.87,-187.742]],"c":true}]},{"t":160,"s":[{"i":[[47.771,-47.26],[47.26,47.76],[-47.76,47.249],[-47.249,-47.771]],"o":[[-47.76,47.249],[-47.249,-47.771],[47.771,-47.26],[47.26,47.76]],"v":[[80.995,-15.689],[-91.057,-16.615],[-90.131,-188.667],[81.921,-187.742]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[55.919,56.513],[56.513,-55.919],[-55.908,-56.513],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68]],"o":[[-55.908,-56.523],[-56.513,55.908],[15.68,15.849],[47.589,14.631],[19.748,-6.813],[56.523,-55.908]],"v":[[97.76,-203.411],[-105.8,-204.506],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[-0.199,56.523],[-0.201,-55.919],[0.199,-56.513],[0.07,-7.025],[0.015,1.682],[0.056,15.68]],"o":[[0.199,-56.523],[0.201,55.908],[-0.056,15.849],[-0.169,14.631],[-0.07,-6.813],[-0.201,-55.908]],"v":[[-4.927,-203.411],[-4.203,-204.506],[-4.199,-0.946],[-4.39,33.369],[-4.73,33.884],[-4.923,0.149]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[55.919,56.513],[56.513,-55.919],[-55.908,-56.513],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68]],"o":[[-55.908,-56.523],[-56.513,55.908],[15.68,15.849],[47.589,14.631],[19.748,-6.813],[56.523,-55.908]],"v":[[97.76,-203.411],[-105.8,-204.506],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[55.919,56.513],[56.513,-55.919],[-55.908,-56.513],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68]],"o":[[-55.908,-56.523],[-56.513,55.908],[15.68,15.849],[47.589,14.631],[19.748,-6.813],[56.523,-55.908]],"v":[[97.76,-203.411],[-105.8,-204.506],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[-0.199,56.523],[-0.201,-55.919],[0.199,-56.513],[0.07,-7.025],[0.015,1.682],[0.056,15.68]],"o":[[0.199,-56.523],[0.201,55.908],[-0.056,15.849],[-0.169,14.631],[-0.07,-6.813],[-0.201,-55.908]],"v":[[-4.927,-203.411],[-4.203,-204.506],[-4.199,-0.946],[-4.39,33.369],[-4.73,33.884],[-4.923,0.149]],"c":true}]},{"t":160,"s":[{"i":[[55.919,56.513],[56.513,-55.919],[-55.908,-56.513],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68]],"o":[[-55.908,-56.523],[-56.513,55.908],[15.68,15.849],[47.589,14.631],[19.748,-6.813],[56.523,-55.908]],"v":[[97.76,-203.411],[-105.8,-204.506],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149]],"c":true}]}]},"nm":"Контур 2","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0,0.627,0.733,0.859,0.25,0.812,0.865,0.927,0.5,0.996,0.996,0.996,0.75,0.635,0.639,0.645,1,0.275,0.282,0.294]}},"s":{"a":0,"k":[-52.984,-297.977]},"e":{"a":0,"k":[-64.94,27.475]},"t":1,"nm":"Gradient Fill 2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 8","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"base-glass 5","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":11,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.318],"y":[0]},"t":20,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":140,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":149,"s":[100]},{"i":{"x":[0.613],"y":[0.579]},"o":{"x":[0.276],"y":[0.237]},"t":150,"s":[0]},{"t":160,"s":[7.75]}]},"r":{"a":0,"k":45.436},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":0,"s":[290.875,212.356,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[304.909,226.606,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":20,"s":[290.875,212.356,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":140,"s":[290.875,212.356,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[304.909,226.606,0],"to":[0,0,0],"ti":[0,0,0]},{"t":160,"s":[290.875,212.356,0]}]},"a":{"a":0,"k":[-4.564,-93.458,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[31.028,-14.025],[6.197,4.851],[-50.572,27.857],[-2.083,-10.446]],"o":[[-41.362,18.696],[-6.866,-5.375],[55.205,-30.409],[2.104,10.551]],"v":[[-21.078,-143.551],[-104.67,-114.018],[-54.391,-193.84],[54.341,-186.825]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[-0.11,-14.025],[-0.022,4.851],[0.18,27.857],[0.007,-10.446]],"o":[[0.147,18.696],[0.024,-5.375],[-0.196,-30.409],[-0.007,10.551]],"v":[[-4.504,-143.551],[-4.207,-114.018],[-4.386,-193.84],[-4.772,-186.825]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[31.028,-14.025],[6.197,4.851],[-50.572,27.857],[-2.083,-10.446]],"o":[[-41.362,18.696],[-6.866,-5.375],[55.205,-30.409],[2.104,10.551]],"v":[[-21.078,-143.551],[-104.67,-114.018],[-54.391,-193.84],[54.341,-186.825]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[31.028,-14.025],[6.197,4.851],[-50.572,27.857],[-2.083,-10.446]],"o":[[-41.362,18.696],[-6.866,-5.375],[55.205,-30.409],[2.104,10.551]],"v":[[-21.078,-143.551],[-104.67,-114.018],[-54.391,-193.84],[54.341,-186.825]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[-0.11,-14.025],[-0.022,4.851],[0.18,27.857],[0.007,-10.446]],"o":[[0.147,18.696],[0.024,-5.375],[-0.196,-30.409],[-0.007,10.551]],"v":[[-4.504,-143.551],[-4.207,-114.018],[-4.386,-193.84],[-4.772,-186.825]],"c":true}]},{"t":160,"s":[{"i":[[31.028,-14.025],[6.197,4.851],[-50.572,27.857],[-2.083,-10.446]],"o":[[-41.362,18.696],[-6.866,-5.375],[55.205,-30.409],[2.104,10.551]],"v":[[-21.078,-143.551],[-104.67,-114.018],[-54.391,-193.84],[54.341,-186.825]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":140,"s":[10]},{"t":160,"s":[10]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-4.148,1.682],[-15.839,15.68],[30.438,54.988]],"o":[[51.497,-0.634],[46.887,-46.376],[0,0]],"v":[[-2.497,41.384],[96.665,0.149],[121.444,-171.832]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0.015,1.682],[0.056,15.68],[-0.108,54.988]],"o":[[-0.183,-0.634],[-0.167,-46.376],[0,0]],"v":[[-4.57,41.384],[-4.923,0.149],[-5.011,-171.832]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[-4.148,1.682],[-15.839,15.68],[30.438,54.988]],"o":[[51.497,-0.634],[46.887,-46.376],[0,0]],"v":[[-2.497,41.384],[96.665,0.149],[121.444,-171.832]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-4.148,1.682],[-15.839,15.68],[30.438,54.988]],"o":[[51.497,-0.634],[46.887,-46.376],[0,0]],"v":[[-2.497,41.384],[96.665,0.149],[121.444,-171.832]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0.015,1.682],[0.056,15.68],[-0.108,54.988]],"o":[[-0.183,-0.634],[-0.167,-46.376],[0,0]],"v":[[-4.57,41.384],[-4.923,0.149],[-5.011,-171.832]],"c":false}]},{"t":160,"s":[{"i":[[-4.148,1.682],[-15.839,15.68],[30.438,54.988]],"o":[[51.497,-0.634],[46.887,-46.376],[0,0]],"v":[[-2.497,41.384],[96.665,0.149],[121.444,-171.832]],"c":false}]}]},"nm":"Контур 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.603921592236,0.556862771511,0.501960813999,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[0.596,-2.167]],"o":[[-0.474,2.191],[0,0]],"v":[[114.179,-76.54],[112.575,-70.002]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,0],[-0.002,-2.167]],"o":[[0.002,2.191],[0,0]],"v":[[-4.985,-76.54],[-4.979,-70.002]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0,0],[0.596,-2.167]],"o":[[-0.474,2.191],[0,0]],"v":[[114.179,-76.54],[112.575,-70.002]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[0.596,-2.167]],"o":[[-0.474,2.191],[0,0]],"v":[[114.179,-76.54],[112.575,-70.002]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0,0],[-0.002,-2.167]],"o":[[0.002,2.191],[0,0]],"v":[[-4.985,-76.54],[-4.979,-70.002]],"c":false}]},{"t":160,"s":[{"i":[[0,0],[0.596,-2.167]],"o":[[-0.474,2.191],[0,0]],"v":[[114.179,-76.54],[112.575,-70.002]],"c":false}]}]},"nm":"Контур 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[8.923,-8.828]],"o":[[-5.616,10.521],[0,0]],"v":[[102.649,-45.089],[80.839,-15.873]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,0],[-0.032,-8.828]],"o":[[0.02,10.521],[0,0]],"v":[[-4.944,-45.089],[-4.867,-15.873]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0,0],[8.923,-8.828]],"o":[[-5.616,10.521],[0,0]],"v":[[102.649,-45.089],[80.839,-15.873]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[8.923,-8.828]],"o":[[-5.616,10.521],[0,0]],"v":[[102.649,-45.089],[80.839,-15.873]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0,0],[-0.032,-8.828]],"o":[[0.02,10.521],[0,0]],"v":[[-4.944,-45.089],[-4.867,-15.873]],"c":false}]},{"t":160,"s":[{"i":[[0,0],[8.923,-8.828]],"o":[[-5.616,10.521],[0,0]],"v":[[102.649,-45.089],[80.839,-15.873]],"c":false}]}]},"nm":"Контур 2","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[43.59,-43.124],[47.254,47.754],[5.416,19.102]],"o":[[35.521,47.838],[-47.754,47.243],[-14.949,-15.114],[0,0]],"v":[[93.062,-174.751],[80.839,-15.873],[-91.192,-16.799],[-121.734,-69.057]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,0],[-0.155,-43.124],[-0.168,47.754],[-0.019,19.102]],"o":[[-0.126,47.838],[0.17,47.243],[0.053,-15.114],[0,0]],"v":[[-4.91,-174.751],[-4.867,-15.873],[-4.255,-16.799],[-4.146,-69.057]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0,0],[43.59,-43.124],[47.254,47.754],[5.416,19.102]],"o":[[35.521,47.838],[-47.754,47.243],[-14.949,-15.114],[0,0]],"v":[[93.062,-174.751],[80.839,-15.873],[-91.192,-16.799],[-121.734,-69.057]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[43.59,-43.124],[47.254,47.754],[5.416,19.102]],"o":[[35.521,47.838],[-47.754,47.243],[-14.949,-15.114],[0,0]],"v":[[93.062,-174.751],[80.839,-15.873],[-91.192,-16.799],[-121.734,-69.057]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0,0],[-0.155,-43.124],[-0.168,47.754],[-0.019,19.102]],"o":[[-0.126,47.838],[0.17,47.243],[0.053,-15.114],[0,0]],"v":[[-4.91,-174.751],[-4.867,-15.873],[-4.255,-16.799],[-4.146,-69.057]],"c":false}]},{"t":160,"s":[{"i":[[0,0],[43.59,-43.124],[47.254,47.754],[5.416,19.102]],"o":[[35.521,47.838],[-47.754,47.243],[-14.949,-15.114],[0,0]],"v":[[93.062,-174.751],[80.839,-15.873],[-91.192,-16.799],[-121.734,-69.057]],"c":false}]}]},"nm":"Контур 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.596078455448,0.647058844566,0.729411780834,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[-1.2,-66.684]},"a":{"a":0,"k":[-1.2,-66.684]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":11,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.318],"y":[0]},"t":20,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":140,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":149,"s":[0]},{"i":{"x":[0.613],"y":[0.579]},"o":{"x":[0.276],"y":[0.237]},"t":150,"s":[100]},{"t":160,"s":[92.25]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"vis1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[47.765,-47.254],[47.254,47.754],[-47.754,47.243],[-47.243,-47.765]],"o":[[-47.754,47.243],[-47.243,-47.765],[47.765,-47.254],[47.254,47.754]],"v":[[80.838,-15.873],[-91.192,-16.799],[-90.267,-188.83],[81.764,-187.904]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[-0.17,-47.254],[-0.168,47.765],[0.17,47.243],[0.168,-47.754]],"o":[[0.17,47.243],[0.168,-47.765],[-0.17,-47.254],[-0.168,47.754]],"v":[[-4.867,-15.873],[-4.255,-16.799],[-4.258,-188.83],[-4.87,-187.904]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[47.765,-47.254],[47.254,47.754],[-47.754,47.243],[-47.243,-47.765]],"o":[[-47.754,47.243],[-47.243,-47.765],[47.765,-47.254],[47.254,47.754]],"v":[[80.838,-15.873],[-91.192,-16.799],[-90.267,-188.83],[81.764,-187.904]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[47.765,-47.254],[47.254,47.754],[-47.754,47.243],[-47.243,-47.765]],"o":[[-47.754,47.243],[-47.243,-47.765],[47.765,-47.254],[47.254,47.754]],"v":[[80.838,-15.873],[-91.192,-16.799],[-90.267,-188.83],[81.764,-187.904]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[-0.17,-47.254],[-0.168,47.765],[0.17,47.243],[0.168,-47.754]],"o":[[0.17,47.243],[0.168,-47.765],[-0.17,-47.254],[-0.168,47.754]],"v":[[-4.867,-15.873],[-4.255,-16.799],[-4.258,-188.83],[-4.87,-187.904]],"c":true}]},{"t":160,"s":[{"i":[[47.765,-47.254],[47.254,47.754],[-47.754,47.243],[-47.243,-47.765]],"o":[[-47.754,47.243],[-47.243,-47.765],[47.765,-47.254],[47.254,47.754]],"v":[[80.838,-15.873],[-91.192,-16.799],[-90.267,-188.83],[81.764,-187.904]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.415686279535,0.435294121504,0.46274510026,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[-36.771,-37.169],[-51.661,2.131]],"o":[[-11.915,47.25],[15.68,15.849],[4.13,1.645]],"v":[[-144.126,-137.511],[-106.896,-0.946],[-2.339,41.369]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,0],[0.131,-37.169],[0.184,2.131]],"o":[[0.042,47.25],[-0.056,15.849],[-0.015,1.645]],"v":[[-4.066,-137.511],[-4.199,-0.946],[-4.571,41.369]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0,0],[-36.771,-37.169],[-51.661,2.131]],"o":[[-11.915,47.25],[15.68,15.849],[4.13,1.645]],"v":[[-144.126,-137.511],[-106.896,-0.946],[-2.339,41.369]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[-36.771,-37.169],[-51.661,2.131]],"o":[[-11.915,47.25],[15.68,15.849],[4.13,1.645]],"v":[[-144.126,-137.511],[-106.896,-0.946],[-2.339,41.369]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0,0],[0.131,-37.169],[0.184,2.131]],"o":[[0.042,47.25],[-0.056,15.849],[-0.015,1.645]],"v":[[-4.066,-137.511],[-4.199,-0.946],[-4.571,41.369]],"c":false}]},{"t":160,"s":[{"i":[[0,0],[-36.771,-37.169],[-51.661,2.131]],"o":[[-11.915,47.25],[15.68,15.849],[4.13,1.645]],"v":[[-144.126,-137.511],[-106.896,-0.946],[-2.339,41.369]],"c":false}]}]},"nm":"Контур 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.57647061348,0.564705908298,0.596078455448,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[-36.771,-37.169],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68],[30.439,54.988]],"o":[[-11.915,47.25],[15.68,15.849],[39.089,15.631],[19.748,-6.813],[46.887,-46.376],[0,0]],"v":[[-144.126,-137.511],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149],[121.444,-171.832]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,0],[0.131,-37.169],[0.07,-7.025],[0.015,1.682],[0.056,15.68],[-0.108,54.988]],"o":[[0.042,47.25],[-0.056,15.849],[-0.139,15.631],[-0.07,-6.813],[-0.167,-46.376],[0,0]],"v":[[-4.066,-137.511],[-4.199,-0.946],[-4.39,33.369],[-4.73,33.884],[-4.923,0.149],[-5.011,-171.832]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0,0],[-36.771,-37.169],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68],[30.439,54.988]],"o":[[-11.915,47.25],[15.68,15.849],[39.089,15.631],[19.748,-6.813],[46.887,-46.376],[0,0]],"v":[[-144.126,-137.511],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149],[121.444,-171.832]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[-36.771,-37.169],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68],[30.439,54.988]],"o":[[-11.915,47.25],[15.68,15.849],[39.089,15.631],[19.748,-6.813],[46.887,-46.376],[0,0]],"v":[[-144.126,-137.511],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149],[121.444,-171.832]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0,0],[0.131,-37.169],[0.07,-7.025],[0.015,1.682],[0.056,15.68],[-0.108,54.988]],"o":[[0.042,47.25],[-0.056,15.849],[-0.139,15.631],[-0.07,-6.813],[-0.167,-46.376],[0,0]],"v":[[-4.066,-137.511],[-4.199,-0.946],[-4.39,33.369],[-4.73,33.884],[-4.923,0.149],[-5.011,-171.832]],"c":false}]},{"t":160,"s":[{"i":[[0,0],[-36.771,-37.169],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68],[30.439,54.988]],"o":[[-11.915,47.25],[15.68,15.849],[39.089,15.631],[19.748,-6.813],[46.887,-46.376],[0,0]],"v":[[-144.126,-137.511],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149],[121.444,-171.832]],"c":false}]}]},"nm":"Контур 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[55.919,56.513],[56.513,-55.919],[-55.908,-56.513],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68]],"o":[[-55.908,-56.523],[-56.513,55.908],[15.68,15.849],[52.339,15.381],[19.748,-6.813],[56.523,-55.908]],"v":[[97.76,-203.411],[-105.8,-204.506],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[-0.199,56.523],[-0.201,-55.919],[0.199,-56.513],[0.07,-7.025],[0.015,1.682],[0.056,15.68]],"o":[[0.199,-56.523],[0.201,55.908],[-0.056,15.849],[-0.186,15.381],[-0.07,-6.813],[-0.201,-55.908]],"v":[[-4.927,-203.411],[-4.203,-204.506],[-4.199,-0.946],[-4.39,33.369],[-4.73,33.884],[-4.923,0.149]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[55.919,56.513],[56.513,-55.919],[-55.908,-56.513],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68]],"o":[[-55.908,-56.523],[-56.513,55.908],[15.68,15.849],[52.339,15.381],[19.748,-6.813],[56.523,-55.908]],"v":[[97.76,-203.411],[-105.8,-204.506],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[55.919,56.513],[56.513,-55.919],[-55.908,-56.513],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68]],"o":[[-55.908,-56.523],[-56.513,55.908],[15.68,15.849],[52.339,15.381],[19.748,-6.813],[56.523,-55.908]],"v":[[97.76,-203.411],[-105.8,-204.506],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[-0.199,56.523],[-0.201,-55.919],[0.199,-56.513],[0.07,-7.025],[0.015,1.682],[0.056,15.68]],"o":[[0.199,-56.523],[0.201,55.908],[-0.056,15.849],[-0.186,15.381],[-0.07,-6.813],[-0.201,-55.908]],"v":[[-4.927,-203.411],[-4.203,-204.506],[-4.199,-0.946],[-4.39,33.369],[-4.73,33.884],[-4.923,0.149]],"c":true}]},{"t":160,"s":[{"i":[[55.919,56.513],[56.513,-55.919],[-55.908,-56.513],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68]],"o":[[-55.908,-56.523],[-56.513,55.908],[15.68,15.849],[52.339,15.381],[19.748,-6.813],[56.523,-55.908]],"v":[[97.76,-203.411],[-105.8,-204.506],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149]],"c":true}]}]},"nm":"Контур 2","hd":false},{"ty":"st","c":{"a":0,"k":[0.392156869173,0.596078455448,0.749019622803,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[-4.563,-102.322]},"a":{"a":0,"k":[-4.563,-102.322]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":11,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.318],"y":[0]},"t":20,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":140,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":149,"s":[0]},{"i":{"x":[0.613],"y":[0.579]},"o":{"x":[0.276],"y":[0.237]},"t":150,"s":[100]},{"t":160,"s":[92.25]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"vis2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[47.771,-47.26],[47.26,47.76],[-47.76,47.249],[-47.249,-47.771]],"o":[[-47.76,47.249],[-47.249,-47.771],[47.771,-47.26],[47.26,47.76]],"v":[[80.995,-15.689],[-91.057,-16.615],[-90.131,-188.667],[81.921,-187.742]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[-0.17,-47.26],[-0.168,47.771],[0.17,47.249],[0.168,-47.76]],"o":[[0.17,47.249],[0.168,-47.771],[-0.17,-47.26],[-0.168,47.76]],"v":[[-4.867,-15.689],[-4.255,-16.615],[-4.258,-188.667],[-4.87,-187.742]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[47.771,-47.26],[47.26,47.76],[-47.76,47.249],[-47.249,-47.771]],"o":[[-47.76,47.249],[-47.249,-47.771],[47.771,-47.26],[47.26,47.76]],"v":[[80.995,-15.689],[-91.057,-16.615],[-90.131,-188.667],[81.921,-187.742]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[47.771,-47.26],[47.26,47.76],[-47.76,47.249],[-47.249,-47.771]],"o":[[-47.76,47.249],[-47.249,-47.771],[47.771,-47.26],[47.26,47.76]],"v":[[80.995,-15.689],[-91.057,-16.615],[-90.131,-188.667],[81.921,-187.742]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[-0.17,-47.26],[-0.168,47.771],[0.17,47.249],[0.168,-47.76]],"o":[[0.17,47.249],[0.168,-47.771],[-0.17,-47.26],[-0.168,47.76]],"v":[[-4.867,-15.689],[-4.255,-16.615],[-4.258,-188.667],[-4.87,-187.742]],"c":true}]},{"t":160,"s":[{"i":[[47.771,-47.26],[47.26,47.76],[-47.76,47.249],[-47.249,-47.771]],"o":[[-47.76,47.249],[-47.249,-47.771],[47.771,-47.26],[47.26,47.76]],"v":[[80.995,-15.689],[-91.057,-16.615],[-90.131,-188.667],[81.921,-187.742]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[55.919,56.513],[56.513,-55.919],[-55.908,-56.513],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68]],"o":[[-55.908,-56.523],[-56.513,55.908],[15.68,15.849],[47.589,14.631],[19.748,-6.813],[56.523,-55.908]],"v":[[97.76,-203.411],[-105.8,-204.506],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[-0.199,56.523],[-0.201,-55.919],[0.199,-56.513],[0.07,-7.025],[0.015,1.682],[0.056,15.68]],"o":[[0.199,-56.523],[0.201,55.908],[-0.056,15.849],[-0.169,14.631],[-0.07,-6.813],[-0.201,-55.908]],"v":[[-4.927,-203.411],[-4.203,-204.506],[-4.199,-0.946],[-4.39,33.369],[-4.73,33.884],[-4.923,0.149]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[55.919,56.513],[56.513,-55.919],[-55.908,-56.513],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68]],"o":[[-55.908,-56.523],[-56.513,55.908],[15.68,15.849],[47.589,14.631],[19.748,-6.813],[56.523,-55.908]],"v":[[97.76,-203.411],[-105.8,-204.506],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[55.919,56.513],[56.513,-55.919],[-55.908,-56.513],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68]],"o":[[-55.908,-56.523],[-56.513,55.908],[15.68,15.849],[47.589,14.631],[19.748,-6.813],[56.523,-55.908]],"v":[[97.76,-203.411],[-105.8,-204.506],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[-0.199,56.523],[-0.201,-55.919],[0.199,-56.513],[0.07,-7.025],[0.015,1.682],[0.056,15.68]],"o":[[0.199,-56.523],[0.201,55.908],[-0.056,15.849],[-0.169,14.631],[-0.07,-6.813],[-0.201,-55.908]],"v":[[-4.927,-203.411],[-4.203,-204.506],[-4.199,-0.946],[-4.39,33.369],[-4.73,33.884],[-4.923,0.149]],"c":true}]},{"t":160,"s":[{"i":[[55.919,56.513],[56.513,-55.919],[-55.908,-56.513],[-19.684,-7.025],[-4.148,1.682],[-15.839,15.68]],"o":[[-55.908,-56.523],[-56.513,55.908],[15.68,15.849],[47.589,14.631],[19.748,-6.813],[56.523,-55.908]],"v":[[97.76,-203.411],[-105.8,-204.506],[-106.896,-0.946],[-53.089,33.369],[42.503,33.884],[96.665,0.149]],"c":true}]}]},"nm":"Контур 2","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0,0.553,0.592,0.635,0.139,0.557,0.596,0.637,0.492,0.561,0.6,0.639,0.839,0.551,0.59,0.633,0.999,0.541,0.58,0.627,0,0,0.139,0.5,0.492,1,0.839,0.5,0.999,0]}},"s":{"a":1,"k":[{"i":{"x":0.667,"y":0.667},"o":{"x":0.167,"y":0.167},"t":0,"s":[-22.476,-223.466],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":20,"s":[-22.476,-223.466],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0.333},"t":140,"s":[-22.476,-223.466],"to":[0,0],"ti":[0,0]},{"t":160,"s":[-22.476,-223.466]}]},"e":{"a":1,"k":[{"i":{"x":0.667,"y":0.667},"o":{"x":0.167,"y":0.167},"t":0,"s":[48.472,31.505],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":20,"s":[48.472,31.505],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0.333},"t":140,"s":[48.472,31.505],"to":[0,0],"ti":[0,0]},{"t":160,"s":[48.472,31.505]}]},"t":1,"nm":"Gradient Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 8","bm":0,"hd":false}],"ip":10,"op":150,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"base-side7","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.31],"y":[0]},"t":20,"s":[16.97]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":140,"s":[16.97]},{"i":{"x":[0.593],"y":[0.559]},"o":{"x":[0.251],"y":[0.205]},"t":141,"s":[1]},{"t":160,"s":[3.333]}]},"r":{"a":0,"k":45.436},"p":{"a":0,"k":[290.875,212.356,0]},"a":{"a":0,"k":[-4.564,-93.458,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":19,"s":[{"i":[[191.508,0],[0.191,0.531],[185.569,0],[-0.493,-0.364]],"o":[[0.497,0],[190.569,0],[0.191,-0.054],[182.507,0]],"v":[[-6.503,-245.657],[-6.569,-245.656],[-6.569,41.242],[-6.507,40.864]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[188.041,0],[0.188,0.521],[182.21,0],[-0.484,-0.357]],"o":[[0.488,0],[187.119,0],[0.188,-0.053],[179.203,0]],"v":[[-6.113,-245.657],[-6.882,-245.656],[-6.881,41.242],[-6.134,40.864]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[188.041,0],[0.188,0.521],[182.21,0],[-0.484,-0.357]],"o":[[0.488,0],[187.119,0],[0.188,-0.053],[179.203,0]],"v":[[-6.113,-245.657],[-6.882,-245.656],[-6.881,41.242],[-6.134,40.864]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":141,"s":[{"i":[[191.508,0],[0.191,0.531],[185.569,0],[-0.493,-0.364]],"o":[[0.497,0],[190.569,0],[0.191,-0.054],[182.507,0]],"v":[[-6.503,-245.657],[-6.569,-245.656],[-6.569,41.242],[-6.507,40.864]],"c":true}]},{"t":160,"s":[{"i":[[191.371,0],[0.191,0.53],[185.437,0],[-0.493,-0.363]],"o":[[0.497,0],[190.433,0],[0.191,-0.054],[182.377,0]],"v":[[-6.487,-245.657],[-6.582,-245.656],[-6.582,41.242],[-6.492,40.864]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0,0.553,0.592,0.635,0.139,0.557,0.596,0.637,0.492,0.561,0.6,0.639,0.839,0.551,0.59,0.633,0.999,0.541,0.58,0.627,0,0,0.139,0.5,0.492,1,0.839,0.5,0.999,0]}},"s":{"a":1,"k":[{"i":{"x":0.667,"y":0.667},"o":{"x":0.167,"y":0.167},"t":0,"s":[-22.476,-223.466],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":20,"s":[-22.476,-223.466],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0.333},"t":140,"s":[-22.476,-223.466],"to":[0,0],"ti":[0,0]},{"t":160,"s":[-22.476,-223.466]}]},"e":{"a":1,"k":[{"i":{"x":0.667,"y":0.667},"o":{"x":0.167,"y":0.167},"t":0,"s":[48.472,31.505],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":20,"s":[48.472,31.505],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0.333},"t":140,"s":[48.472,31.505],"to":[0,0],"ti":[0,0]},{"t":160,"s":[48.472,31.505]}]},"t":1,"nm":"Gradient Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false}],"ip":19,"op":141,"st":19,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"base-side6","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":124,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":136,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":140,"s":[1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":144,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":156,"s":[100]},{"t":160,"s":[1]}]},"r":{"a":0,"k":45.436},"p":{"a":0,"k":[290.875,212.356,0]},"a":{"a":0,"k":[-4.564,-93.458,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":120,"s":[{"i":[[-192.5,0],[-0.192,0.531],[-191.567,0],[0.496,-0.364]],"o":[[-0.5,0],[-193.567,0],[-0.192,-0.054],[-191.504,0]],"v":[[-4.5,-245.657],[-4.433,-245.656],[-4.433,41.242],[-4.496,40.864]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":127,"s":[{"i":[[-57.979,0],[-0.074,0.206],[-74.201,0],[0.192,-0.141]],"o":[[-0.194,0],[-74.975,0],[-0.074,-0.021],[-74.176,0]],"v":[[8.979,-245.657],[-17.835,-245.653],[-17.816,41.244],[8.366,40.864]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":130,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[17.5,-245.657],[-26.308,-245.652],[-26.276,41.246],[16.497,40.864]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[191.508,0],[0.191,0.531],[185.569,0],[-0.493,-0.364]],"o":[[0.497,0],[190.569,0],[0.191,-0.054],[182.507,0]],"v":[[-7.503,-245.657],[-7.569,-245.656],[-7.569,41.242],[-7.507,40.864]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[15.382,-245.657],[-24.189,-245.652],[-24.161,41.246],[14.476,40.864]],"c":true}]},{"t":160,"s":[{"i":[[-192.5,0],[-0.192,0.531],[-191.567,0],[0.496,-0.364]],"o":[[-0.5,0],[-193.567,0],[-0.192,-0.054],[-191.504,0]],"v":[[-4.5,-245.657],[-4.433,-245.656],[-4.433,41.242],[-4.496,40.864]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0,0.553,0.592,0.635,0.139,0.557,0.596,0.637,0.492,0.561,0.6,0.639,0.839,0.551,0.59,0.633,0.999,0.541,0.58,0.627,0,0,0.139,0.5,0.492,1,0.839,0.5,0.999,0]}},"s":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0.333},"t":120,"s":[-22.476,-223.466],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":140,"s":[-22.476,-223.466],"to":[0,0],"ti":[0,0]},{"t":160,"s":[-22.476,-223.466]}]},"e":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0.333},"t":120,"s":[48.472,31.505],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":140,"s":[48.472,31.505],"to":[0,0],"ti":[0,0]},{"t":160,"s":[48.472,31.505]}]},"t":1,"nm":"Gradient Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false}],"ip":141,"op":180,"st":160,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"base-side5","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-20,"s":[1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":-16,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-4,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":4,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[100]},{"t":20,"s":[1]}]},"r":{"a":0,"k":45.436},"p":{"a":0,"k":[290.875,212.356,0]},"a":{"a":0,"k":[-4.564,-93.458,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":-20,"s":[{"i":[[-192.5,0],[-0.192,0.531],[-191.567,0],[0.496,-0.364]],"o":[[-0.5,0],[-193.567,0],[-0.192,-0.054],[-191.504,0]],"v":[[-4.5,-245.657],[-4.433,-245.656],[-4.433,41.242],[-4.496,40.864]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":-10,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[15.382,-245.657],[-24.189,-245.652],[-24.161,41.246],[14.476,40.864]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[191.508,0],[0.191,0.531],[185.569,0],[-0.493,-0.364]],"o":[[0.497,0],[190.569,0],[0.191,-0.054],[182.507,0]],"v":[[-7.503,-245.657],[-7.569,-245.656],[-7.569,41.242],[-7.507,40.864]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[17.5,-245.657],[-26.308,-245.652],[-26.276,41.246],[16.497,40.864]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":13,"s":[{"i":[[-57.979,0],[-0.074,0.206],[-74.201,0],[0.192,-0.141]],"o":[[-0.194,0],[-74.975,0],[-0.074,-0.021],[-74.176,0]],"v":[[8.979,-245.657],[-17.835,-245.653],[-17.816,41.244],[8.366,40.864]],"c":true}]},{"t":20,"s":[{"i":[[-192.5,0],[-0.192,0.531],[-191.567,0],[0.496,-0.364]],"o":[[-0.5,0],[-193.567,0],[-0.192,-0.054],[-191.504,0]],"v":[[-4.5,-245.657],[-4.433,-245.656],[-4.433,41.242],[-4.496,40.864]],"c":true}]}]},"nm":"Контур 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0,0.553,0.592,0.635,0.139,0.557,0.596,0.637,0.492,0.561,0.6,0.639,0.839,0.551,0.59,0.633,0.999,0.541,0.58,0.627,0,0,0.139,0.5,0.492,1,0.839,0.5,0.999,0]}},"s":{"a":1,"k":[{"i":{"x":0.667,"y":0.667},"o":{"x":0.167,"y":0.167},"t":0,"s":[-22.476,-223.466],"to":[0,0],"ti":[0,0]},{"t":20,"s":[-22.476,-223.466]}]},"e":{"a":1,"k":[{"i":{"x":0.667,"y":0.667},"o":{"x":0.167,"y":0.167},"t":0,"s":[48.472,31.505],"to":[0,0],"ti":[0,0]},{"t":20,"s":[48.472,31.505]}]},"t":1,"nm":"Gradient Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false}],"ip":0,"op":20,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"NULL_OBJECT","sr":1,"ks":{"o":{"a":0,"k":0},"p":{"a":0,"k":[250,250,0]},"a":{"a":0,"k":[9,0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":47,"s":[96,96,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":149,"s":[96,96,100]},{"t":179,"s":[100,100,100]}]}},"ao":0,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 1","parent":1,"sr":1,"ks":{},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0]],"o":[[0,0]],"v":[[750,266]],"c":false}},"nm":"Контур 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.674510002136,0.617175996304,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8.2},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":2,"k":{"a":0,"k":[0,1,1,1,1,0,0,0]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[100,0]},"t":1,"nm":"Gradient Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":3,"nm":"mover1","parent":1,"sr":1,"ks":{"o":{"a":0,"k":0},"p":{"a":1,"k":[{"i":{"x":0.34,"y":1},"o":{"x":0.33,"y":0},"t":0,"s":[0,0,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.34,"y":1},"o":{"x":0.33,"y":0},"t":28,"s":[-165,19,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.18,"y":1},"o":{"x":0.167,"y":0},"t":139,"s":[-208,-109,0],"to":[0,0,0],"ti":[0,0,0]},{"t":179,"s":[0,0,0]}]},"s":{"a":0,"k":[-100,100,100]}},"ao":0,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":3,"nm":"masterctrl","parent":4,"sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.33],"y":[0]},"t":0,"s":[45.436]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":47,"s":[-79.417]},{"i":{"x":[0.18],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":139,"s":[-45.691]},{"t":179,"s":[45.436]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":139,"s":[-99,89,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":152,"s":[-99,105,0],"to":[0,0,0],"ti":[0,0,0]},{"t":179,"s":[-99,89,0]}]},"s":{"a":1,"k":[{"i":{"x":[0,0,0],"y":[1,1,1]},"o":{"x":[0.33,0.33,0.33],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.33,0.33,0.33],"y":[0,0,0]},"t":18,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":47,"s":[80,80,100]},{"i":{"x":[0.18,0.18,0.18],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":139,"s":[80,80,100]},{"t":179,"s":[100,100,100]}]}},"ao":0,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":0,"nm":"spinlens2","parent":5,"refId":"comp_0","sr":1,"ks":{"r":{"a":0,"k":-45.436},"p":{"a":0,"k":[6.059,-132.986,0]},"a":{"a":0,"k":[256,256,0]},"s":{"a":0,"k":[105,105,100]}},"ao":0,"w":512,"h":512,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"paw6","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.18],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":122,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.58],"y":[0]},"t":124,"s":[100]},{"t":143,"s":[0]}]},"r":{"a":0,"k":-9.512},"p":{"a":0,"k":[3.324,-179.817,0]},"a":{"a":0,"k":[-194.676,10.183,0]},"s":{"a":0,"k":[96.65,96.65,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.5,-0.375],[0.125,-4.625],[-3.5,0.75],[1.125,3.5]],"o":[[-3.5,0.375],[-0.125,4.625],[3.5,-0.75],[-0.925,-2.878]],"v":[[-173.25,-5.625],[-177.625,0.75],[-169.625,7.625],[-165.125,0.375]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4,0.25],[0.125,-4.875],[-3.25,0.125],[-0.625,4.25]],"o":[[-4,-0.25],[-0.125,4.875],[3.25,-0.125],[0.625,-4.25]],"v":[[-186.875,-16.625],[-193.25,-9],[-184.875,2.25],[-179.625,-7.125]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.25,-3.5],[-1.625,-4],[-4,3.625],[2.163,1.822]],"o":[[-3.25,3.5],[1.625,4],[4,-3.625],[-2.375,-2]],"v":[[-222.5,2],[-222.875,12.75],[-213.625,17.125],[-213.25,4]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3,-0.375],[-1.411,-8.289],[-3.625,0.125],[1,7.875]],"o":[[-3,0.375],[1,5.875],[3.625,-0.125],[-1,-7.875]],"v":[[-205.125,-17.875],[-211.375,-6],[-203.625,2.625],[-198.375,-7.25]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.25,1.375],[3,-7.375],[1.75,-4.625],[-6.156,-1.067],[-7.625,1.75],[-3.75,6.75],[5.875,2.75]],"o":[[-4.25,-1.375],[-3,7.375],[-1.75,4.625],[9.375,1.625],[7.625,-1.75],[3.75,-6.75],[-5.875,-2.75]],"v":[[-187.875,5.25],[-204.75,10],[-208.25,24.375],[-203.625,38],[-186.625,31.75],[-169.75,26.5],[-174.125,13.125]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":47,"op":180,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"paw5","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.18],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":100,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.58],"y":[0]},"t":102,"s":[100]},{"t":140,"s":[0]}]},"r":{"a":0,"k":-48.141},"p":{"a":0,"k":[-42.676,-96.817,0]},"a":{"a":0,"k":[-194.676,10.183,0]},"s":{"a":0,"k":[-100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.5,-0.375],[0.125,-4.625],[-3.5,0.75],[1.125,3.5]],"o":[[-3.5,0.375],[-0.125,4.625],[3.5,-0.75],[-0.925,-2.878]],"v":[[-173.25,-5.625],[-177.625,0.75],[-169.625,7.625],[-165.125,0.375]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4,0.25],[0.125,-4.875],[-3.25,0.125],[-0.625,4.25]],"o":[[-4,-0.25],[-0.125,4.875],[3.25,-0.125],[0.625,-4.25]],"v":[[-186.875,-16.625],[-193.25,-9],[-184.875,2.25],[-179.625,-7.125]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.25,-3.5],[-1.625,-4],[-4,3.625],[2.163,1.822]],"o":[[-3.25,3.5],[1.625,4],[4,-3.625],[-2.375,-2]],"v":[[-222.5,2],[-222.875,12.75],[-213.625,17.125],[-213.25,4]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3,-0.375],[-1.411,-8.289],[-3.625,0.125],[1,7.875]],"o":[[-3,0.375],[1,5.875],[3.625,-0.125],[-1,-7.875]],"v":[[-205.125,-17.875],[-211.375,-6],[-203.625,2.625],[-198.375,-7.25]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.25,1.375],[3,-7.375],[1.75,-4.625],[-6.156,-1.067],[-7.625,1.75],[-3.75,6.75],[5.875,2.75]],"o":[[-4.25,-1.375],[-3,7.375],[-1.75,4.625],[9.375,1.625],[7.625,-1.75],[3.75,-6.75],[-5.875,-2.75]],"v":[[-187.875,5.25],[-204.75,10],[-208.25,24.375],[-203.625,38],[-186.625,31.75],[-169.75,26.5],[-174.125,13.125]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":47,"op":180,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"paw4","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.18],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.58],"y":[0]},"t":82,"s":[100]},{"t":129,"s":[0]}]},"r":{"a":0,"k":-9.512},"p":{"a":0,"k":[58.324,-88.817,0]},"a":{"a":0,"k":[-194.676,10.183,0]},"s":{"a":0,"k":[96.65,96.65,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.5,-0.375],[0.125,-4.625],[-3.5,0.75],[1.125,3.5]],"o":[[-3.5,0.375],[-0.125,4.625],[3.5,-0.75],[-0.925,-2.878]],"v":[[-173.25,-5.625],[-177.625,0.75],[-169.625,7.625],[-165.125,0.375]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4,0.25],[0.125,-4.875],[-3.25,0.125],[-0.625,4.25]],"o":[[-4,-0.25],[-0.125,4.875],[3.25,-0.125],[0.625,-4.25]],"v":[[-186.875,-16.625],[-193.25,-9],[-184.875,2.25],[-179.625,-7.125]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.25,-3.5],[-1.625,-4],[-4,3.625],[2.163,1.822]],"o":[[-3.25,3.5],[1.625,4],[4,-3.625],[-2.375,-2]],"v":[[-222.5,2],[-222.875,12.75],[-213.625,17.125],[-213.25,4]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3,-0.375],[-1.411,-8.289],[-3.625,0.125],[1,7.875]],"o":[[-3,0.375],[1,5.875],[3.625,-0.125],[-1,-7.875]],"v":[[-205.125,-17.875],[-211.375,-6],[-203.625,2.625],[-198.375,-7.25]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.25,1.375],[3,-7.375],[1.75,-4.625],[-6.156,-1.067],[-7.625,1.75],[-3.75,6.75],[5.875,2.75]],"o":[[-4.25,-1.375],[-3,7.375],[-1.75,4.625],[9.375,1.625],[7.625,-1.75],[3.75,-6.75],[-5.875,-2.75]],"v":[[-187.875,5.25],[-204.75,10],[-208.25,24.375],[-203.625,38],[-186.625,31.75],[-169.75,26.5],[-174.125,13.125]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":47,"op":180,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"paw3","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.18],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.58],"y":[0]},"t":69,"s":[100]},{"t":102,"s":[0]}]},"r":{"a":0,"k":-32.039},"p":{"a":0,"k":[22.324,-0.817,0]},"a":{"a":0,"k":[-194.676,10.183,0]},"s":{"a":0,"k":[-100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.5,-0.375],[0.125,-4.625],[-3.5,0.75],[1.125,3.5]],"o":[[-3.5,0.375],[-0.125,4.625],[3.5,-0.75],[-0.925,-2.878]],"v":[[-173.25,-5.625],[-177.625,0.75],[-169.625,7.625],[-165.125,0.375]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4,0.25],[0.125,-4.875],[-3.25,0.125],[-0.625,4.25]],"o":[[-4,-0.25],[-0.125,4.875],[3.25,-0.125],[0.625,-4.25]],"v":[[-186.875,-16.625],[-193.25,-9],[-184.875,2.25],[-179.625,-7.125]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.25,-3.5],[-1.625,-4],[-4,3.625],[2.163,1.822]],"o":[[-3.25,3.5],[1.625,4],[4,-3.625],[-2.375,-2]],"v":[[-222.5,2],[-222.875,12.75],[-213.625,17.125],[-213.25,4]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3,-0.375],[-1.411,-8.289],[-3.625,0.125],[1,7.875]],"o":[[-3,0.375],[1,5.875],[3.625,-0.125],[-1,-7.875]],"v":[[-205.125,-17.875],[-211.375,-6],[-203.625,2.625],[-198.375,-7.25]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.25,1.375],[3,-7.375],[1.75,-4.625],[-6.156,-1.067],[-7.625,1.75],[-3.75,6.75],[5.875,2.75]],"o":[[-4.25,-1.375],[-3,7.375],[-1.75,4.625],[9.375,1.625],[7.625,-1.75],[3.75,-6.75],[-5.875,-2.75]],"v":[[-187.875,5.25],[-204.75,10],[-208.25,24.375],[-203.625,38],[-186.625,31.75],[-169.75,26.5],[-174.125,13.125]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":47,"op":180,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"paw1","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.18],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.58],"y":[0]},"t":55,"s":[100]},{"t":80,"s":[0]}]},"r":{"a":0,"k":7.116},"p":{"a":0,"k":[117.324,31.183,0]},"a":{"a":0,"k":[-194.676,10.183,0]},"s":{"a":0,"k":[96.65,96.65,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.5,-0.375],[0.125,-4.625],[-3.5,0.75],[1.125,3.5]],"o":[[-3.5,0.375],[-0.125,4.625],[3.5,-0.75],[-0.925,-2.878]],"v":[[-173.25,-5.625],[-177.625,0.75],[-169.625,7.625],[-165.125,0.375]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4,0.25],[0.125,-4.875],[-3.25,0.125],[-0.625,4.25]],"o":[[-4,-0.25],[-0.125,4.875],[3.25,-0.125],[0.625,-4.25]],"v":[[-186.875,-16.625],[-193.25,-9],[-184.875,2.25],[-179.625,-7.125]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.25,-3.5],[-1.625,-4],[-4,3.625],[2.163,1.822]],"o":[[-3.25,3.5],[1.625,4],[4,-3.625],[-2.375,-2]],"v":[[-222.5,2],[-222.875,12.75],[-213.625,17.125],[-213.25,4]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3,-0.375],[-1.411,-8.289],[-3.625,0.125],[1,7.875]],"o":[[-3,0.375],[1,5.875],[3.625,-0.125],[-1,-7.875]],"v":[[-205.125,-17.875],[-211.375,-6],[-203.625,2.625],[-198.375,-7.25]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.25,1.375],[3,-7.375],[1.75,-4.625],[-6.156,-1.067],[-7.625,1.75],[-3.75,6.75],[5.875,2.75]],"o":[[-4.25,-1.375],[-3,7.375],[-1.75,4.625],[9.375,1.625],[7.625,-1.75],[3.75,-6.75],[-5.875,-2.75]],"v":[[-187.875,5.25],[-204.75,10],[-208.25,24.375],[-203.625,38],[-186.625,31.75],[-169.75,26.5],[-174.125,13.125]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":47,"op":180,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"paw2","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.18],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.58],"y":[0]},"t":42,"s":[100]},{"t":69,"s":[0]}]},"r":{"a":0,"k":-32.039},"p":{"a":0,"k":[75.324,109.183,0]},"a":{"a":0,"k":[-194.676,10.183,0]},"s":{"a":0,"k":[-100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.5,-0.375],[0.125,-4.625],[-3.5,0.75],[1.125,3.5]],"o":[[-3.5,0.375],[-0.125,4.625],[3.5,-0.75],[-0.925,-2.878]],"v":[[-173.25,-5.625],[-177.625,0.75],[-169.625,7.625],[-165.125,0.375]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4,0.25],[0.125,-4.875],[-3.25,0.125],[-0.625,4.25]],"o":[[-4,-0.25],[-0.125,4.875],[3.25,-0.125],[0.625,-4.25]],"v":[[-186.875,-16.625],[-193.25,-9],[-184.875,2.25],[-179.625,-7.125]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.25,-3.5],[-1.625,-4],[-4,3.625],[2.163,1.822]],"o":[[-3.25,3.5],[1.625,4],[4,-3.625],[-2.375,-2]],"v":[[-222.5,2],[-222.875,12.75],[-213.625,17.125],[-213.25,4]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3,-0.375],[-1.411,-8.289],[-3.625,0.125],[1,7.875]],"o":[[-3,0.375],[1,5.875],[3.625,-0.125],[-1,-7.875]],"v":[[-205.125,-17.875],[-211.375,-6],[-203.625,2.625],[-198.375,-7.25]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.25,1.375],[3,-7.375],[1.75,-4.625],[-6.156,-1.067],[-7.625,1.75],[-3.75,6.75],[5.875,2.75]],"o":[[-4.25,-1.375],[-3,7.375],[-1.75,4.625],[9.375,1.625],[7.625,-1.75],[3.75,-6.75],[-5.875,-2.75]],"v":[[-187.875,5.25],[-204.75,10],[-208.25,24.375],[-203.625,38],[-186.625,31.75],[-169.75,26.5],[-174.125,13.125]],"c":true}},"nm":"Контур 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.274509817362,0.274509817362,0.274509817362,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":40,"op":180,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"shadde","parent":5,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":57,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":122,"s":[25]},{"t":143,"s":[0]}]},"r":{"a":0,"k":74.079},"p":{"a":1,"k":[{"i":{"x":0.18,"y":1},"o":{"x":0.33,"y":0},"t":21,"s":[-7.271,-190.721,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.965},"o":{"x":0.33,"y":0},"t":48,"s":[-26.46,-199.272,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.126},"t":91,"s":[-24.339,-189.499,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.18,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[-15.816,-182.05,0],"to":[0,0,0],"ti":[0,0,0]},{"t":180,"s":[12.184,-196.229,0]}]},"a":{"a":0,"k":[-107,68,0]},"s":{"a":0,"k":[125,125,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0]],"o":[[0,0]],"v":[[-412.477,611.481]],"c":false}},"nm":"Контур 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.674510002136,0.617175996304,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8.2},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[57.343,13.107],[19,-51],[-85.5,-22.5],[-7.375,9.25],[0,0],[-4.062,-5.75],[-28,-8],[0,0],[30.5,9.5],[9.5,2],[3.25,-1.75],[0,8.25]],"o":[[-70,-16],[-18.582,49.877],[76.469,20.124],[5.051,-6.335],[0,0],[7.617,10.781],[28,8],[0,0],[-11.706,-3.646],[-9.14,-1.924],[-4.457,2.4],[0,-41]],"v":[[-73,-50],[-213,23],[-133.5,178.5],[-5.125,129.25],[6.75,126.937],[11.5,135],[116.5,168],[151.5,137],[133.25,90],[42.5,65],[25,68],[14,56]],"c":true}},"nm":"Контур 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-42.5,-13],[15,-57],[45,11],[-15,49.5]],"o":[[40.132,12.276],[-13.858,52.661],[-58.826,-14.38],[15,-49.5]],"v":[[-77,-27.5],[-10.5,85.5],[-126.5,155.5],[-192.5,34.5]],"c":true}},"nm":"Контур 2","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":21,"op":180,"st":0,"bm":0}]} \ No newline at end of file diff --git a/src/components/AccountDragPreview.tsx b/src/components/AccountDragPreview.tsx new file mode 100644 index 0000000..a5dbefd --- /dev/null +++ b/src/components/AccountDragPreview.tsx @@ -0,0 +1,23 @@ +import {FC, PropsWithChildren} from "react"; +import {usePreview} from "react-dnd-preview"; +import AccountSelectButton, {AccountSelectButtonProps} from "./AccountSelectButton.tsx"; +import {Grid} from "@mui/material"; +import {wobbleAnimation} from "../drag.ts"; + +const AccountDragPreview: FC = () => { + const preview = usePreview(); + if (!preview.display) { + return <>; + } + const {item, style} = preview; + + return
+ + + + + +
+} + +export default AccountDragPreview; diff --git a/src/components/AccountSelectButton.tsx b/src/components/AccountSelectButton.tsx index bd9c2a5..ff86bdf 100644 --- a/src/components/AccountSelectButton.tsx +++ b/src/components/AccountSelectButton.tsx @@ -1,31 +1,137 @@ -import {Box, ButtonBase, Stack, Typography, useTheme} from "@mui/material"; -import {FC} from "react"; -import {SvgIconComponent} from "@mui/icons-material"; -import {Color} from "../globals.tsx"; -interface AccountSelectButtonProps { +import {Box, ButtonBase, CircularProgress, Stack, SvgIcon, Typography} from "@mui/material"; +import {FC, useContext, useEffect, useRef, useState} from "react"; +import { icons } from "../globals"; +import SVG from 'react-inlinesvg'; +import useAccountTheme from "../hooks/useAccountTheme"; +import { iconUrl } from "../icons/icons.ts"; +import {DragSourceMonitor, useDrag, useDrop} from "react-dnd"; +import {DragTypes, wobbleAnimation} from "../drag.ts"; +import {getEmptyImage} from "react-dnd-html5-backend"; +import {StorageManagerContext} from "../managers/storage/storage.tsx"; +import useTelegramHaptics from "../hooks/telegram/useTelegramHaptics.ts"; +import TouchRipple, {TouchRippleActions} from "@mui/material/ButtonBase/TouchRipple.js"; + +export interface AccountSelectButtonProps { + id: string; + index: number; selected?: boolean, label: string, issuer?: string, - icon: SvgIconComponent, - color: Color, + icon: string, + color: string, + animating: boolean, onClick: () => void, } -const AccountSelectButton: FC = ( - { +const AccountSelectButton: FC = (props) => { + const { + id, + animating, + index, selected = false, icon, label, issuer, onClick, color, -}) => { - const theme = useTheme(); - const Icon = icon; - return - + } = props; + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const theme = useAccountTheme(color)!; + const storageManager = useContext(StorageManagerContext); + const { impactOccurred } = useTelegramHaptics(); + + const rippleRef = useRef(); + + const [isHolding, setHolding] = useState(false); + const [isTouching, setTouching] = useState(false); + + useEffect(() => { + if(isTouching) { + const timeout = setTimeout(() => { + setHolding(true); + rippleRef.current?.stop(); + impactOccurred("heavy"); + }, 300); + + return () => { + clearTimeout(timeout); + } + } else { + setHolding(false); + rippleRef.current?.stop(); + } + }, [impactOccurred, isTouching]); + + const [{isDragging}, drag, preview] = useDrag({ + type: DragTypes.AccountCard, + item: props, + canDrag: window.matchMedia("(pointer: fine)").matches || isHolding, + collect: (monitor: DragSourceMonitor) => ({ + isDragging: monitor.isDragging(), + }), + end: () => { + storageManager?.saveAccounts(storageManager.accounts); + setHolding(false); + setTouching(false); + rippleRef.current?.stop(); + }, + }); + + useEffect(() => { + preview(getEmptyImage(), { captureDraggingState: true }) + }, [preview]); + + const [, drop] = useDrop({ + accept: DragTypes.AccountCard, + drop: () => ({id}), + hover: (draggedItem: AccountSelectButtonProps | null) => { + if (draggedItem && !animating) { + storageManager?.reorder(draggedItem.id, index); + } + }, + }); + const ref = useRef(); + drag(drop(ref)); + + return { + if(!isHolding) { + setTouching(false); + rippleRef.current?.stop(); + } + }} + onPointerDown={rippleRef.current?.start} + onPointerUp={rippleRef.current?.stop} + onTouchCancel={() => { setTouching(false); }} + onTouchEnd={() => { setTouching(false); }} + onTouchStart={() => { setTouching(true); }} + > + + - + { + Object.keys(icons).includes(icon) + // shorthand for const Icon = icons[icon]; ; + ? ((Icon) => )(icons[icon]) + : + } + src={iconUrl(icon)}> + + + } = ( sx={{lineHeight: '1.2em', verticalAlign: 'center'}} variant="subtitle2" fontWeight={selected ? "bold" : "lighter"} - color={selected ? `${color}.contrastText` : "text.primary"} + color={selected ? theme.palette.primary.contrastText : theme.palette.text.primary} > {issuer ? issuer : label} @@ -44,7 +150,7 @@ const AccountSelectButton: FC = ( sx={{lineHeight: '1.2em', verticalAlign: 'center'}} variant="subtitle2" fontWeight={selected ? "bold" : "lighter"} - color={selected ? `${color}.contrastText` : "text.primary"} + color={selected ? theme.palette.primary.contrastText : theme.palette.text.primary} > ({label}) : null} @@ -54,4 +160,4 @@ const AccountSelectButton: FC = ( ; } -export default AccountSelectButton; \ No newline at end of file +export default AccountSelectButton; diff --git a/src/components/ColorPicker.tsx b/src/components/ColorPicker.tsx new file mode 100644 index 0000000..7b504bf --- /dev/null +++ b/src/components/ColorPicker.tsx @@ -0,0 +1,80 @@ +import { FC, useState } from "react"; +import Colorful from "@uiw/react-color-colorful"; +import type { ColorfulProps } from "@uiw/react-color-colorful"; +import { IconButton, Popover } from "@mui/material"; +import { Palette, PaletteOutlined } from "@mui/icons-material"; +import { hsvaToHex, type HsvaColor } from "@uiw/color-convert"; + +interface ColorPickerProps extends ColorfulProps { + selected: boolean; +} + +const ColorPicker: FC = (props) => { + const [anchorEl, setAnchorEl] = useState(null); + + const handleClick = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + + const handleClose = () => { + setAnchorEl(null); + }; + + const open = Boolean(anchorEl); + const id = open ? "color-popover" : undefined; + + return ( + <> + + {props.selected ? ( + + ) : ( + + )} + + + + + + ); +}; + +export default ColorPicker; diff --git a/src/components/IconPicker.tsx b/src/components/IconPicker.tsx index 65a8702..f9bd994 100644 --- a/src/components/IconPicker.tsx +++ b/src/components/IconPicker.tsx @@ -1,50 +1,116 @@ -import {FC} from "react"; -import {alpha, Grid, IconButton, Stack, useTheme} from "@mui/material"; +import {FC, useEffect, useState} from "react"; +import { + alpha, + Grid, + IconButton, + Stack, + useTheme, + SvgIcon, + CircularProgress, + Typography, SxProps, Theme +} from "@mui/material"; import CircleIcon from '@mui/icons-material/Circle'; import RadioButtonCheckedIcon from '@mui/icons-material/RadioButtonChecked'; -import {Color, colors, Icon, icons} from "../globals.tsx"; +import {Icon, colors, icons} from "../globals.tsx"; +import ColorPicker from "./ColorPicker.tsx"; +import { useLocation, useNavigate } from "react-router-dom"; +import { NewAccountState } from "../pages/CreateAccount.tsx"; +import{ type ColorResult, hexToHsva } from "@uiw/color-convert"; +import { EditAccountState } from "../pages/EditAccount.tsx"; +import SVG from 'react-inlinesvg'; +import { iconUrl } from "../icons/icons.ts"; +import SearchIcon from "@mui/icons-material/Search"; interface IconPickerProps { selectedIcon: Icon; setSelectedIcon(icon: Icon): void; - selectedColor: Color; - setSelectedColor(color: Color): void; + selectedColor: string; + setSelectedColor(color: string): void; } -const IconPicker: FC = ({selectedIcon, setSelectedIcon, selectedColor, setSelectedColor}) => { +function buttonStyle(isSelected: boolean, color: string): SxProps { + return { + margin: 0.5, + padding: 1, + borderRadius: 100, + outlineStyle: 'solid', + outlineWidth: 1, + outlineColor: alpha(color, 0.3), + bgcolor: isSelected ? color: alpha(color, 0.15), + } +} + +const IconPicker: FC = ({ selectedIcon, setSelectedIcon, selectedColor, setSelectedColor }) => { const theme = useTheme(); + const [mainColor, setMainColor] = useState('#fff'); + const location = useLocation(); + const state = location.state as NewAccountState | EditAccountState; + const navigate = useNavigate(); + const [pickerColor, setPickerColor] = useState(); + + useEffect(() => { + if (pickerColor) + setSelectedColor(pickerColor.hex); + }, [pickerColor]) + + useEffect(() => { + setMainColor(alpha(selectedColor, 0.7)) + }, [selectedColor]) + + const isCustom = !Object.keys(icons).includes(selectedIcon); return - {colors.map((color: Color) => { - return { setSelectedColor(color); }} - > - {selectedColor === color ? : } - ; + {colors.map((color: string) => { + return { setSelectedColor(color); }} + > + {selectedColor === color ? : } + + })} + {setPickerColor(color)}} /> - - {Object.entries(icons).map(([key, Icon]) => { - return + + + {Object.entries(icons).map(([key, Icon]) => { + return + { setSelectedIcon(key); }}> + + + ; + })} + { setSelectedIcon(key ); }}> - + disableRipple={true} + sx={buttonStyle(isCustom, mainColor)} + onClick={() => {navigate('/icons', { state })}} + > + + {isCustom ? + } + src={iconUrl(selectedIcon)}> + + : } + + {isCustom ? "Change..." : "More..."} + + - ; - })} - + + +
; }; -export default IconPicker; \ No newline at end of file +export default IconPicker; diff --git a/src/components/LottieAnimation.tsx b/src/components/LottieAnimation.tsx index 34da89f..b055bb3 100644 --- a/src/components/LottieAnimation.tsx +++ b/src/components/LottieAnimation.tsx @@ -1,27 +1,44 @@ +/* eslint-disable react/display-name */ +/* eslint-disable react/prop-types */ import {FC, useEffect, useRef} from "react"; import Lottie, {LottieRefCurrentProps} from "lottie-react"; interface LottieProps { animationData: unknown; initialSegment?: [number, number]; + loop?: boolean + speed?: number } -const LottieAnimation: FC = ({animationData, initialSegment}) => { +const LottieAnimation: FC = ({ animationData, initialSegment, loop, speed }) => { const lottie = useRef(null); + useEffect(() => { + if (loop === false) { + lottie.current?.goToAndStop(0) + } + else if (loop === true) { + lottie.current?.goToAndPlay(0) + } + }, [loop]) useEffect(() => { lottie.current?.goToAndPlay(0); }, []); + useEffect(() => { + if (speed) + lottie.current?.setSpeed(speed) + }, [speed]) return { if (lottie.current?.animationItem?.isPaused) lottie.current.goToAndPlay(0); }} - lottieRef={lottie} style={{width: '50%'}} + lottieRef={lottie} + style={{width: '50%'}} initialSegment={initialSegment} animationData={animationData} autoplay={false} - loop={false} + loop={loop ?? false} />; } -export default LottieAnimation; \ No newline at end of file +export default LottieAnimation; diff --git a/src/components/NewUpdateDialog.tsx b/src/components/NewUpdateDialog.tsx new file mode 100644 index 0000000..10fbca2 --- /dev/null +++ b/src/components/NewUpdateDialog.tsx @@ -0,0 +1,29 @@ +import {FC, PropsWithChildren, useEffect} from "react"; + +const NewUpdateDialog: FC = function () { + useEffect(() => { + + window.Telegram.WebApp.CloudStorage.getItem("dialogSeen", (error, result) => { + if(error) return; + if (result !== "true") { + window.Telegram.WebApp.showPopup({ + title: "Like TeleOTP?", + message: "Stay tuned for announcements and new releases in our channel", + buttons: [ + {type: "default", text: "Learn more", id: "open"}, + {type: "close"}, + ] + }, (id) => { + if (id == "open") { + window.Telegram.WebApp.openTelegramLink(import.meta.env.VITE_CHANNEL_LINK); + } + }); + window.Telegram.WebApp.CloudStorage.setItem("dialogSeen", "true"); + } + }); + }, []); + + return (<>); +}; + +export default NewUpdateDialog; diff --git a/src/components/PlausibleAnalytics.tsx b/src/components/PlausibleAnalytics.tsx index 410d2d3..180a533 100644 --- a/src/components/PlausibleAnalytics.tsx +++ b/src/components/PlausibleAnalytics.tsx @@ -32,4 +32,4 @@ export const PlausibleAnalyticsProvider: FC {children} -}; \ No newline at end of file +}; diff --git a/src/components/TelegramTextField.tsx b/src/components/TelegramTextField.tsx index b1672a9..4368ff5 100644 --- a/src/components/TelegramTextField.tsx +++ b/src/components/TelegramTextField.tsx @@ -4,6 +4,8 @@ const TelegramTextField = styled((props: TextFieldProps) => ( {key === "Enter" ? props.onSubmit ? props.onSubmit() : void 0 : void 0}} onFocus={(e) => { e.target.scrollIntoView({behavior: "smooth"}); }} @@ -28,4 +30,4 @@ const TelegramTextField = styled((props: TextFieldProps) => ( }, })); -export default TelegramTextField; \ No newline at end of file +export default TelegramTextField; diff --git a/src/drag.ts b/src/drag.ts new file mode 100644 index 0000000..a666ee6 --- /dev/null +++ b/src/drag.ts @@ -0,0 +1,43 @@ +import {HTML5Backend} from "react-dnd-html5-backend"; +import {MouseTransition, MultiBackendOptions, TouchTransition} from "react-dnd-multi-backend"; +import {TouchBackend} from "react-dnd-touch-backend"; +import {SxProps, Theme} from "@mui/material"; + +export const wobbleAnimation: SxProps = { + "@keyframes rotate": { + "0%": { + transform: "rotate(-5deg)", + animationTimingFunction: "ease-in", + }, + "50%": { + transform: "rotate(5deg)", + animationTimingFunction: "ease-out", + }, + }, + transformOrigin: "50% 10%", + animation: "rotate 0.5s ease infinite", + animationDirection: "alternate", +}; + +export const HTML5toTouch: MultiBackendOptions = { + backends: [ + { + id: 'html5', + backend: HTML5Backend, + transition: MouseTransition, + }, + { + id: 'touch', + backend: TouchBackend, + options: { + enableMouseEvents: false + }, + preview: true, + transition: TouchTransition, + }, + ], +} + +export enum DragTypes { + AccountCard = "card", +} diff --git a/src/global.css b/src/global.css index 4926426..c41359d 100644 --- a/src/global.css +++ b/src/global.css @@ -5,4 +5,6 @@ html, body, #root, #root>div { flex-direction: column; flex-grow: 1; box-sizing: border-box; -} \ No newline at end of file + /* fix telegram sliding down on mobiles */ + /* touch-action: none !important; */ +} diff --git a/src/globals.tsx b/src/globals.tsx index b8e8bbd..06cf88f 100644 --- a/src/globals.tsx +++ b/src/globals.tsx @@ -1,59 +1,16 @@ /// import {SvgIconComponent} from "@mui/icons-material"; -import GitHubIcon from "@mui/icons-material/GitHub"; -import GoogleIcon from "@mui/icons-material/Google"; -import FacebookIcon from "@mui/icons-material/Facebook"; -import TwitterIcon from "@mui/icons-material/Twitter"; -import InstagramIcon from "@mui/icons-material/Instagram"; -import RedditIcon from "@mui/icons-material/Reddit"; -import PinterestIcon from "@mui/icons-material/Pinterest"; -import LinkedInIcon from "@mui/icons-material/LinkedIn"; import PaidIcon from "@mui/icons-material/Paid"; import AccountBalanceWalletIcon from "@mui/icons-material/AccountBalanceWallet"; import StoreIcon from "@mui/icons-material/Store"; import CommentIcon from "@mui/icons-material/Comment"; import EmailIcon from "@mui/icons-material/Email"; -import {createSvgIcon} from "@mui/material"; import KeyIcon from '@mui/icons-material/Key'; import CloudIcon from '@mui/icons-material/Cloud'; import StorageIcon from '@mui/icons-material/Storage'; - -import Discord from "./assets/icons/discord.svg?react"; -import Vk from "./assets/icons/vk.svg?react"; -import Pterodactyl from "./assets/icons/pterodactyl.svg?react"; -import Docker from "./assets/icons/docker.svg?react"; -import Npm from "./assets/icons/npm.svg?react"; -import Twitch from "./assets/icons/twitch.svg?react"; -import Paypal from "./assets/icons/paypal.svg?react"; -import Cloudflare from "./assets/icons/cloudflare.svg?react"; - -const DiscordIcon = createSvgIcon(, "Discord"); -const VkIcon = createSvgIcon(, "Vk"); -const PterodactylIcon = createSvgIcon(, "Pterodactyl"); -const DockerIcon = createSvgIcon(, "Docker"); -const NpmIcon = createSvgIcon(, "Npm"); -const TwitchIcon = createSvgIcon(, "Twitch"); -const PaypalIcon = createSvgIcon(, "Paypal"); -const CloudflareIcon = createSvgIcon(, "Cloudflare"); - export const icons: Record = { - "github": GitHubIcon, - "google": GoogleIcon, - "facebook": FacebookIcon, - "twitter": TwitterIcon, - "instagram": InstagramIcon, - "reddit": RedditIcon, - "pinterest": PinterestIcon, - "linkedin": LinkedInIcon, - "discord": DiscordIcon, - "vk": VkIcon, - "pterodactyl": PterodactylIcon, - "docker": DockerIcon, - "npm": NpmIcon, - "twitch": TwitchIcon, - "paypal": PaypalIcon, "money": PaidIcon, "wallet": AccountBalanceWalletIcon, "store": StoreIcon, @@ -62,15 +19,13 @@ export const icons: Record = { "key": KeyIcon, "cloud": CloudIcon, "storage": StorageIcon, - "cloudflare": CloudflareIcon, } as const; type Icons = keyof typeof icons; export type Icon = Icons[number]; -export const colors = [ - "primary", "success", "warning", "secondary", "error", "info", +export const colors: string[] = [ + "#1c98e6", "#2e7d32", "#ed6c02", "#9c27b0", "#d32f2f", "#0288d1", ] as const; -type Colors = typeof colors; -export type Color = Colors[number]; \ No newline at end of file +export type Color = string; diff --git a/src/hooks/telegram/useTelegramBackButton.ts b/src/hooks/telegram/useTelegramBackButton.ts index 4b3876e..cc1b604 100644 --- a/src/hooks/telegram/useTelegramBackButton.ts +++ b/src/hooks/telegram/useTelegramBackButton.ts @@ -23,4 +23,4 @@ export default function useTelegramBackButton() { window.Telegram.WebApp.BackButton.hide(); } }, [location]); -} \ No newline at end of file +} diff --git a/src/hooks/telegram/useTelegramMainButton.ts b/src/hooks/telegram/useTelegramMainButton.ts index 1216d04..be749c1 100644 --- a/src/hooks/telegram/useTelegramMainButton.ts +++ b/src/hooks/telegram/useTelegramMainButton.ts @@ -1,6 +1,9 @@ import {useEffect} from "react"; +import useTelegramTheme from "./useTelegramTheme"; export default function useTelegramMainButton(onClick: () => boolean, text: string, disabled = false) { + const { palette } = useTelegramTheme(); + useEffect(() => { window.Telegram.WebApp.MainButton.setText(text); window.Telegram.WebApp.MainButton.show(); @@ -25,8 +28,12 @@ export default function useTelegramMainButton(onClick: () => boolean, text: stri useEffect(() => { if (disabled) { window.Telegram.WebApp.MainButton.disable(); + window.Telegram.WebApp.MainButton.color = palette.mode === "light" + ? palette.action.disabled as `#${string}` + : '#858585' as `#${string}`; } else { window.Telegram.WebApp.MainButton.enable(); + window.Telegram.WebApp.MainButton.color = palette.primary.main as `#${string}`; } }, [disabled]); -} \ No newline at end of file +} diff --git a/src/hooks/telegram/useTelegramQrScanner.ts b/src/hooks/telegram/useTelegramQrScanner.ts index 4be3b5f..445d116 100644 --- a/src/hooks/telegram/useTelegramQrScanner.ts +++ b/src/hooks/telegram/useTelegramQrScanner.ts @@ -5,4 +5,4 @@ export default function useTelegramQrScanner(callback: (scanned: string) => void return true; }); } -} \ No newline at end of file +} diff --git a/src/hooks/telegram/useTelegramTheme.ts b/src/hooks/telegram/useTelegramTheme.ts index 1434099..68b8cea 100644 --- a/src/hooks/telegram/useTelegramTheme.ts +++ b/src/hooks/telegram/useTelegramTheme.ts @@ -1,8 +1,11 @@ -import {useEffect, useState} from "react"; -import {createTheme, Theme} from "@mui/material"; -import {ThemeParams} from "@twa-dev/types"; +import { useEffect, useState } from "react"; +import { createTheme, Theme } from "@mui/material"; +import { ThemeParams } from "@twa-dev/types"; -function materialThemeFromTelegramTheme(mode: "light" | "dark", themeParams?: ThemeParams): Theme { +function materialThemeFromTelegramTheme( + mode: "light" | "dark", + themeParams?: ThemeParams +): Theme { // Create a default theme if not supplied by Telegram (i.e. when testing in a browser) if (themeParams?.button_color == undefined) { return createTheme(); @@ -18,20 +21,23 @@ function materialThemeFromTelegramTheme(mode: "light" | "dark", themeParams?: Th default: themeParams.bg_color, paper: themeParams.secondary_bg_color, }, + action: { + disabled: "#9E9E9E", + }, text: { primary: themeParams.text_color, secondary: themeParams.hint_color, }, divider: themeParams.hint_color, - mode + mode, }, typography: { fontFamily: [ - 'Inter', + "Inter", '"Helvetica Neue"', - 'Arial', - 'sans-serif' - ].join(','), + "Arial", + "sans-serif", + ].join(","), allVariants: { color: themeParams.text_color, }, @@ -40,30 +46,34 @@ function materialThemeFromTelegramTheme(mode: "light" | "dark", themeParams?: Th }, subtitle2: { color: themeParams.hint_color, - } + }, }, }); } export default function useTelegramTheme() { - const [theme, setTheme] = useState(materialThemeFromTelegramTheme( - window.Telegram.WebApp.colorScheme, - window.Telegram.WebApp.themeParams - )); + const [theme, setTheme] = useState( + materialThemeFromTelegramTheme( + window.Telegram.WebApp.colorScheme, + window.Telegram.WebApp.themeParams + ) + ); useEffect(() => { function themeChanged() { - setTheme(materialThemeFromTelegramTheme( - window.Telegram.WebApp.colorScheme, - window.Telegram.WebApp.themeParams - )); + setTheme( + materialThemeFromTelegramTheme( + window.Telegram.WebApp.colorScheme, + window.Telegram.WebApp.themeParams + ) + ); } window.Telegram.WebApp.onEvent("themeChanged", themeChanged); return () => { window.Telegram.WebApp.offEvent("themeChanged", themeChanged); - } + }; }); return theme; -} \ No newline at end of file +} diff --git a/src/hooks/useAccountTheme.ts b/src/hooks/useAccountTheme.ts new file mode 100644 index 0000000..a5e4831 --- /dev/null +++ b/src/hooks/useAccountTheme.ts @@ -0,0 +1,37 @@ +import { useTheme } from "@mui/material/styles"; +import {Theme, alpha, createTheme, getLuminance} from "@mui/material"; + +export default function useAccountTheme( + color: string | undefined +): Theme | null { + const theme = useTheme(); + + if (!color) return null; + + const colorMain = alpha(color, .9); + + let mode = theme.palette.mode; + if (getLuminance(color) < 0.1) { + mode = "light"; + } else if(getLuminance(color) > 0.9) { + mode = "dark"; + } + + return createTheme(theme, { + palette: { + mode, + primary: theme.palette.augmentColor({ + color: { + main: colorMain, + }, + }) + // primary: { + // main: colorMain, + // light: alpha(color, 0.5), + // dark: alpha(color, 0.9), + // contrastText: + // getContrastRatio(colorMain, "#fff") > 4.5 ? "#fff" : "#111", + // }, + }, + } as Theme); +} diff --git a/src/icons/icons.test.ts b/src/icons/icons.test.ts new file mode 100644 index 0000000..936a3f7 --- /dev/null +++ b/src/icons/icons.test.ts @@ -0,0 +1,32 @@ +import { describe, expect, test } from "vitest"; +import { titleToIconSlug } from "./icons.ts"; + +describe("titleToIconSlug", () => { + const url = + "https://raw.githubusercontent.com/simple-icons/simple-icons/master/slugs.md"; + + test("should convert all titles to slugs", async () => { + // Load convert table from simpleicons + const response = await fetch(url); + expect(response).toHaveProperty("ok", true) + + const text = await response.text(); + const table = text + .split("\n") + .filter((line) => line.includes("|")) + .map((line) => line.split("|").map((cell) => cell.trim().replace(/`/gi, ''))) + .map(line => line.filter(cell => cell.length > 0)) + // skip header of table + .slice(2); + + // more than 2000 icons at @v11 + expect(table.length).toBeGreaterThan(2000) + + table.forEach(([brandName, brandSlug], i) => { + // Skip duplicate values + if (i-1 >= 0 && table[i-1][0] == brandName) return; + + expect(titleToIconSlug(brandName)).toBe(brandSlug); + }); + }); +}); diff --git a/src/icons/icons.ts b/src/icons/icons.ts new file mode 100644 index 0000000..d0b83db --- /dev/null +++ b/src/icons/icons.ts @@ -0,0 +1,51 @@ +export const ICONS_CDN_BASE = "https://cdn.jsdelivr.net/npm/simple-icons@13.0.0"; +export const ICONS_CDN = ICONS_CDN_BASE + "/icons"; +export const ICONS_DATA_URL = ICONS_CDN_BASE + "/_data/simple-icons.json"; + +// from https://github.com/simple-icons/simple-icons/blob/master/sdk.mjs +const TITLE_TO_SLUG_REPLACEMENTS: Record = { + "+": "plus", + ".": "dot", + "&": "and", + "#": "sharp", + "đ": "d", + "ħ": "h", + "ı": "i", + "ĸ": "k", + "ŀ": "l", + "ł": "l", + "ß": "ss", + "ŧ": "t", +}; + +const TITLE_TO_SLUG_CHARS_REGEX = new RegExp( + `[${Object.keys(TITLE_TO_SLUG_REPLACEMENTS).join("")}]`, + "g" +); +const TITLE_TO_SLUG_RANGE_REGEX = /[^a-z\d]/g; + +export function titleToIconSlug(title: string): string { + const exceptions: Record = { + "Amazon Identity Access Management": "amazoniam", + "del.icio.us": "delicious", + "Ferrari N.V.": "ferrarinv", + "OWASP Dependency-Check": "dependencycheck", + "Sat.1": "sat1", + "Sphere Online Judge": "spoj", + "Tata Consultancy Services": "tcs", + "Warner Bros.": "warnerbros", + }; + if (exceptions[title]) return exceptions[title]; + return title + .toLowerCase() + .replace( + TITLE_TO_SLUG_CHARS_REGEX, + (char) => TITLE_TO_SLUG_REPLACEMENTS[char] + ) + .normalize("NFD") + .replace(TITLE_TO_SLUG_RANGE_REGEX, ""); +} + +export function iconUrl(slug: string) { + return `${ICONS_CDN}/${slug}.svg`; +} diff --git a/src/main.tsx b/src/main.tsx index 2224488..80046be 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,27 +1,40 @@ -import React from 'react' -import ReactDOM from 'react-dom/client' -import Root from './Root.tsx' -import {createBrowserRouter, createRoutesFromElements, Route, RouterProvider} from "react-router-dom"; -import {Telegram} from "@twa-dev/types"; -import Settings from "./pages/Settings.tsx"; -import Accounts from "./pages/Accounts.tsx"; -import NewAccount from "./pages/NewAccount.tsx"; -import {EncryptionManagerProvider} from "./managers/encryption.tsx"; -import ManualAccount from "./pages/ManualAccount.tsx"; -import {CreateAccount} from "./pages/CreateAccount.tsx"; -import EditAccount from "./pages/EditAccount.tsx"; - +/* eslint-disable react/jsx-key */ +import { lazy, Suspense } from "react"; +import ReactDOM from "react-dom/client"; +import Root, { LoadingIndicator } from "./Root.tsx"; +import "./global.css"; import "@fontsource/inter"; import "@fontsource/inter/500.css"; import "@fontsource/inter/700.css"; -import {StorageManagerProvider} from "./managers/storage.tsx"; +import { + createBrowserRouter, + createRoutesFromElements, + Route, + RouterProvider, +} from "react-router-dom"; +import { Telegram } from "@twa-dev/types"; + +import { EncryptionManagerProvider } from "./managers/encryption.tsx"; +import { StorageManagerProvider } from "./managers/storage/storage.tsx"; +import { SettingsManagerProvider } from "./managers/settings.tsx"; +import { PlausibleAnalyticsProvider } from "./components/PlausibleAnalytics.tsx"; +import { BiometricsManagerProvider } from "./managers/biometrics.tsx"; +import CacheProvider from "react-inlinesvg/provider"; + +// always loaded pages +import Accounts from "./pages/Accounts.tsx"; +import EditAccount from "./pages/EditAccount.tsx"; +import Settings from "./pages/Settings.tsx"; + +// lazy loaded pages +const CreateAccount = lazy(() => import("./pages/CreateAccount.tsx")); +const NewAccount = lazy(() => import("./pages/NewAccount.tsx")); +const ManualAccount = lazy(() => import("./pages/ManualAccount.tsx")); +const PasswordSetup = lazy(() => import("./pages/PasswordSetup.tsx")); +const ResetAccounts = lazy(() => import("./pages/ResetAccounts.tsx")); +const DevToolsPage = lazy(() => import("./pages/DevToolsPage.tsx")); +const IconBrowser = lazy(() => import("./pages/IconBrowser.tsx")); -import "./global.css"; -import {SettingsManagerProvider} from "./managers/settings.tsx"; -import PasswordSetup from "./pages/PasswordSetup.tsx"; -import ResetAccounts from "./pages/ResetAccounts.tsx"; -import {PlausibleAnalyticsProvider} from "./components/PlausibleAnalytics.tsx"; -import {BiometricsManagerProvider} from "./managers/biometrics.tsx"; declare global { interface Window { @@ -30,38 +43,53 @@ declare global { } const router = createBrowserRouter( + // TODO: Make user error page createRoutesFromElements( - }> + : undefined} + element={} + > } /> } /> } /> } /> + } /> } /> } /> } /> - } /> + } /> + {import.meta.env.DEV && ( + } /> + )} ), { basename: import.meta.env.BASE_URL, - }, + } ); // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -ReactDOM.createRoot(document.getElementById('root')!).render( - - - - - - - - - - - +ReactDOM.createRoot(document.getElementById("root")!).render( + + + + + + + }> + + + + + + + - , -) +); diff --git a/src/managers/encryption.tsx b/src/managers/encryption.tsx index 7fd2416..02c4562 100644 --- a/src/managers/encryption.tsx +++ b/src/managers/encryption.tsx @@ -26,7 +26,7 @@ export interface EncryptionManager { decrypt(data: string): string | null; } -interface EncryptedData { +export interface EncryptedData { iv: string, cipher: string, } @@ -167,7 +167,7 @@ export const EncryptionManagerProvider: FC = ({ children }) = iv: crypto.enc.Base64.parse(iv) })); } catch (e) { - console.log(e); + console.error(e); return null; } }, @@ -176,4 +176,4 @@ export const EncryptionManagerProvider: FC = ({ children }) = return {children} ; -} \ No newline at end of file +} diff --git a/src/managers/storage.tsx b/src/managers/storage.tsx deleted file mode 100644 index f77831e..0000000 --- a/src/managers/storage.tsx +++ /dev/null @@ -1,146 +0,0 @@ -import {createContext, FC, PropsWithChildren, useContext, useEffect, useState} from "react"; -import {EncryptionManagerContext} from "./encryption.tsx"; -import {Color, Icon} from "../globals.tsx"; -import decodeGoogleAuthenticator from "../migration/import.ts"; - -export interface Account { - id: string; - label: string; - issuer?: string; - uri: string; - color: Color; - icon: Icon; -} - -export interface StorageManager { - ready: boolean; - accounts: Record; - saveAccount(account: Account): void; - saveAccounts(accounts: Account[]): void; - removeAccount(id: string): void; - clearStorage(): void; -} - -export const StorageManagerContext = createContext(null); - -export const StorageManagerProvider: FC = ({children}) => { - const encryptionManager = useContext(EncryptionManagerContext); - - const [ready, setReady] = useState(false); - const [accounts, setAccounts] = useState>({}); - useEffect(() => { - if(encryptionManager?.isLocked && encryptionManager.storageChecked) { - setReady(true); - return; - } else { - setReady(false); - } - - window.Telegram.WebApp.CloudStorage.getKeys((error, result) => { - if (error) { - window.Telegram.WebApp.showAlert(`Failed to get accounts: ${error}`); - return; - } - const accounts = result?.filter(a => a.startsWith("account")) ?? []; - window.Telegram.WebApp.CloudStorage.getItems(accounts, (error, result) => { - if (error ?? !result) { - window.Telegram.WebApp.showAlert(`Failed to get accounts: ${error}`); - return; - } - - const accounts = Object.values(result) - .map(value => encryptionManager?.decrypt(value)) - .filter((x): x is string => !!x) - .map(value => JSON.parse(value) as Account) - .reduce((acc: Record, curr) => { - acc[curr.id] = curr; - return acc; - }, {}); - - setAccounts(accounts); - setReady(true); - }); - }); - }, [encryptionManager?.isLocked]); - - // eslint-disable-next-line react-hooks/exhaustive-deps - const storageManager: StorageManager = { - ready, - accounts, - saveAccounts(accounts: Account[]) { - const newAccounts: Record = {}; - for (const account of accounts) { - const encrypted = encryptionManager?.encrypt(JSON.stringify(account)); - if (!encrypted) continue; - window.Telegram.WebApp.CloudStorage.setItem("account"+account.id, encrypted); - newAccounts[account.id] = account; - } - - setAccounts({...this.accounts, ...newAccounts}); - }, - saveAccount(account) { - this.saveAccounts([account]); - }, - removeAccount(id: string) { - window.Telegram.WebApp.CloudStorage.removeItem("account"+id, (error, result) => { - if (error ?? !result) return; - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const {[id]: _, ...newAccounts} = accounts; - setAccounts(newAccounts); - }); - }, - clearStorage(): void { - setReady(false); - window.Telegram.WebApp.CloudStorage.getKeys((error, result) => { - if (error ?? !result) return; - window.Telegram.WebApp.CloudStorage.removeItems(result, (error, result) => { - if (!error && result) { - setAccounts({}); - encryptionManager?.removePassword(); - setReady(true); - } - }); - }); - }, - }; - - const [keyChanged, setKeyChanged] = useState(false); - - useEffect(() => { - if(!encryptionManager?.oldKey) return; - setKeyChanged(true); - }, [encryptionManager?.oldKey]); - - useEffect(() => { - if(!keyChanged) return; - setKeyChanged(false); - - Object.values(accounts).forEach(account => { - const encrypted = encryptionManager?.encrypt(JSON.stringify(account)); - if (!encrypted) return; - window.Telegram.WebApp.CloudStorage.setItem("account"+account.id, encrypted); - }); - }, [accounts, encryptionManager, keyChanged]); - - const [imported, setImported] = useState(false); - useEffect(() => { - if(!ready || imported) return; - - const param = window.Telegram.WebApp.initDataUnsafe.start_param; - if(!param) return; - - const url = new URL("otpauth-migration://offline"); - url.searchParams.set("data", param) - const accounts = decodeGoogleAuthenticator(url.toString()); - if(!accounts) return; - - const uris = Object.values(storageManager.accounts).map(a => a.uri); - - storageManager.saveAccounts(accounts.filter(account => !uris.includes(account.uri))); - setImported(true); - }, [ready, imported, storageManager]); - - return - {children} - -}; \ No newline at end of file diff --git a/src/managers/storage/migrate.test.ts b/src/managers/storage/migrate.test.ts new file mode 100644 index 0000000..b1d02ba --- /dev/null +++ b/src/managers/storage/migrate.test.ts @@ -0,0 +1,124 @@ +import { describe, it, expect } from "vitest"; +import { + migrationDirection, + migrate, + MigrationDirection, +} from "./migrate"; +import { AccountV1, AccountV2 } from "./storage"; +import { MIGRATIONS_SCHEMA } from "./migrations"; + +describe("migrationDirection", () => { + it("should return MigrationDirection.up if fromVersion is less than toVersion", () => { + const fromVersion = "1"; + const toVersion = "2"; + const expected: MigrationDirection = MigrationDirection.up; + + const actual = migrationDirection(fromVersion, toVersion); + expect(actual).toEqual(expected); + }); + + it("should return MigrationDirection.same if fromVersion is equal to toVersion", () => { + const fromVersion = "1"; + const toVersion = "1"; + const expected = MigrationDirection.same; + + const actual = migrationDirection(fromVersion, toVersion); + expect(actual).toEqual(expected); + }); + + it("should return MigrationDirection.down if fromVersion is greater than toVersion", () => { + const fromVersion = "2"; + const toVersion = "1"; + const expected = MigrationDirection.down; + const actual = migrationDirection(fromVersion, toVersion); + expect(actual).toEqual(expected); + }); +}); + +describe("migrate", () => { + it("should return the same schema if fromVersion is equal to toVersion", () => { + const fromVersion = "1"; + const schema: AccountV1 = { + id: "test", + label: "label", + uri: "uri", + issuer: "issuer", + icon: "icon", + color: "error", + }; + + const toVersion = "1"; + const expected = schema; + + const actual = migrate(MIGRATIONS_SCHEMA, schema, fromVersion, toVersion); + expect(actual).toEqual(expected); + }); + + it("should migrate the schema to the latest version if toVersion is greater than fromVersion", () => { + const fromVersion = "1"; + const accounts: AccountV1[] = [ + { + id: "test1", + label: "label", + uri: "uri", + issuer: "issuer", + + icon: "comment", + color: "error", + }, + { + id: "test2", + label: "label", + uri: "uri", + issuer: "issuer", + + icon: "discord", + color: "warning", + }, + // all the other colors + { + id: "test3", + label: "label", + uri: "uri", + icon: ".net", + color: "success", + }, + ]; + const toVersion = "2"; + const expected: AccountV2[] = [ + { + id: "test1", + label: "label", + uri: "uri", + issuer: "issuer", + + icon: "comment", + color: "#d32f2f", + order: -1, + }, + { + id: "test2", + label: "label", + uri: "uri", + issuer: "issuer", + + icon: 'discord', + color: "#ed6c02", + order: -1, + }, + { + id: "test3", + label: "label", + uri: "uri", + icon: "dotnet", + color: "#2e7d32", + order: -1, + }, + ]; + + accounts.forEach((account, i) => { + const actual = migrate(MIGRATIONS_SCHEMA, account, fromVersion, toVersion); + expect(actual).toEqual(expected[i]); + }); + }); +}); diff --git a/src/managers/storage/migrate.ts b/src/managers/storage/migrate.ts new file mode 100644 index 0000000..3dd2bde --- /dev/null +++ b/src/managers/storage/migrate.ts @@ -0,0 +1,69 @@ +import { AccountVersions } from "./storage"; + +export enum MigrationDirection { + up, + same, + down, +} + +export type Version = "1" | "2"; + +export interface AccountStorage { + version: T; + account: AccountVersions[T]; +} + +export interface Migration { + from: From; + to: To; + up: MigrateUpFunc; +} + +export type MigrateUpFunc = ( + schema: AccountVersions[From] +) => AccountVersions[To]; + +export type Migrations = [ + Migration<"1", "2"> +]; + +export function migrationDirection( + fromVersion: string, + toVersion: string +): MigrationDirection { + const fromNumber = Number(fromVersion); + const toNumber = Number(toVersion); + if (fromNumber < toNumber) return MigrationDirection.up; + else if (fromNumber > toNumber) return MigrationDirection.down; + else return MigrationDirection.same; +} + +export function migrate( + migrations: Migrations, + account: AccountVersions[From], + fromVersion: From, + toVersion: To +): AccountVersions[To] { + const direction = migrationDirection(fromVersion, toVersion); + if (direction === MigrationDirection.same) { + return account as AccountVersions[To]; + } + + let migratedAccount: object = {}; + let accVer: Version = fromVersion; + while (accVer !== toVersion) { + const currentMigration = migrations.find( + (migration) => migration.from === accVer + ); + if (!currentMigration) { + // if there is no migration means nothing changed + throw new Error( + `Could not find migration path from ${accVer} to ${toVersion}` + ); + } + migratedAccount = currentMigration.up(account); + accVer = currentMigration.to; + } + + return migratedAccount as AccountVersions[To]; +} diff --git a/src/managers/storage/migrations.ts b/src/managers/storage/migrations.ts new file mode 100644 index 0000000..1178a99 --- /dev/null +++ b/src/managers/storage/migrations.ts @@ -0,0 +1,66 @@ +import { Migrations } from "./migrate"; +import { icons } from "../../globals"; +import {ICONS_CDN, titleToIconSlug} from "../../icons/icons.ts"; + +type V1Color = [ + "primary", "success", "warning", "secondary", "error", "info", +][number]; + +export const MIGRATIONS_SCHEMA: Migrations = [ + { + from: "1", + to: "2", + up: (account) => { + function convertV1Icon(icon: string): string { + if (Object.keys(icons).includes(icon)) return icon; + if (icon == "twitter") icon = "x"; // thanks, Elon + + // prevent not simpleicons urls + if (icon.startsWith("https://") && !icon.includes(ICONS_CDN)) { + return "store"; + } + + return titleToIconSlug(icon); + } + function convertV1Color(color: V1Color): string { + switch (color) { + case "primary": + return "#1976d2"; + case "secondary": + return "#9c27b0"; + case "info": + return "#0288d1"; + case "success": + return "#2e7d32"; + case "warning": + return "#ed6c02"; + case "error": + return "#d32f2f"; + default: + return color; + } + } + import.meta.env.DEV && + console.log( + "converted color from", + account.color, + "to", + convertV1Color(account.color as V1Color), + { + ...account, + + color: convertV1Color(account.color as V1Color), + icon: convertV1Icon(account.icon), + order: -1, + } + ); + return { + ...account, + + color: convertV1Color(account.color as V1Color), + icon: convertV1Icon(account.icon), + order: -1, + }; + }, + }, +]; diff --git a/src/managers/storage/storage.tsx b/src/managers/storage/storage.tsx new file mode 100644 index 0000000..4d6af29 --- /dev/null +++ b/src/managers/storage/storage.tsx @@ -0,0 +1,245 @@ +import { + createContext, + FC, + PropsWithChildren, + useContext, + useEffect, + useState, +} from "react"; +import { EncryptionManagerContext } from "../encryption.tsx"; +import { Color, Icon } from "../../globals.tsx"; +import decodeGoogleAuthenticator from "../../migration/import.ts"; +import { migrate, Version } from "./migrate.ts"; +import { MIGRATIONS_SCHEMA } from "./migrations.ts"; + +export interface AccountBase { + id: string; + uri: string; + label: string; + issuer?: string; +} + +export interface AccountV1 extends AccountBase { + color: Color; + icon: Icon; +} +// prettier-ignore +export interface AccountV2 extends Pick { + order: number; + color: string; + icon: string; +} + +//! make sure to update this when creating new migration +//! must always point to last version account +export type Account = AccountV2; +const LATEST_ACCOUNT_VERSION = "2"; + +export interface AccountVersions { + "1": AccountV1; + "2": AccountV2; +} + +export interface StorageManager { + ready: boolean; + accounts: Account[]; + saveAccount(account: Account): void; + saveAccounts(accounts: Account[]): void; + removeAccount(id: string): void; + clearStorage(): void; + lastOrder(): number; + reorder(accountId: string, order: number): void; +} + +export const StorageManagerContext = createContext(null); + +export const StorageManagerProvider: FC = ({ children }) => { + const encryptionManager = useContext(EncryptionManagerContext); + + const [ready, setReady] = useState(false); + const [accounts, setAccountsRaw] = useState([]); + function setAccounts(accounts: Account[]) { + setAccountsRaw(accounts.sort((a, b) => a.order - b.order) + .map((acc, index) => { + acc.order = index; + return acc; + })); + } + useEffect(() => { + if(encryptionManager?.isLocked && encryptionManager.storageChecked) { + setReady(true); + return; + } else { + setReady(false); + } + + window.Telegram.WebApp.CloudStorage.getKeys((error, keys) => { + if (error) { + window.Telegram.WebApp.showAlert(`Failed to get accounts: ${error}`); + return; + } + const accounts = keys?.filter(a => a.startsWith("account")) ?? []; + window.Telegram.WebApp.CloudStorage.getItems([...accounts, "version"], + (error, result) => { + if (error ?? !result) { + window.Telegram.WebApp.showAlert(`Failed to get accounts: ${error}`); + return; + } + const storageVersion: string = keys?.includes("version") ? result.version : "1"; + delete result.version; + + let accounts = Object.values(result) + .map(value => encryptionManager?.decrypt(value)) + .filter((x): x is string => !!x) + .map(value => JSON.parse(value) as AccountBase); + + console.log(`Storage version: ${storageVersion}, Latest version: ${LATEST_ACCOUNT_VERSION}, Accounts: ${accounts.length}`) + if (accounts.length > 0 && (!storageVersion || storageVersion !== LATEST_ACCOUNT_VERSION)) { + console.log("Version mismatch", accounts); + accounts = accounts.map((account, index) => { + const migrated = migrate( + MIGRATIONS_SCHEMA, + account as Account, + storageVersion as Version, + LATEST_ACCOUNT_VERSION as Version + ) as Account; + console.log("migrated", migrated); + if (migrated.order < 0) migrated.order = index; + return migrated; + }); + + storageManager.saveAccounts(accounts as Account[]); + window.Telegram.WebApp.CloudStorage.setItem( + "version", + LATEST_ACCOUNT_VERSION + ); + } + + setAccounts(accounts as Account[]); + setReady(true); + }); + }); + }, [encryptionManager?.isLocked]); + + // eslint-disable-next-line react-hooks/exhaustive-deps + const storageManager: StorageManager = { + ready, + accounts, + saveAccounts(accounts: Account[]) { + const newAccounts: Record = {}; + for (const account of this.accounts) { + newAccounts[account.id] = account; + } + for (const account of accounts) { + const encrypted = encryptionManager?.encrypt( + JSON.stringify(account) + ); + if (!encrypted) continue; + window.Telegram.WebApp.CloudStorage.setItem( + "account" + account.id, + encrypted + ); + newAccounts[account.id] = account; + } + + setAccounts(Object.values(newAccounts)); + }, + saveAccount(account) { + this.saveAccounts([account]); + }, + removeAccount(id: string) { + window.Telegram.WebApp.CloudStorage.removeItem( + "account" + id, + (error, result) => { + if (error ?? !result) return; + setAccounts(accounts.filter(acc => acc.id !== id)); + } + ); + }, + clearStorage(): void { + setReady(false); + window.Telegram.WebApp.CloudStorage.getKeys((error, result) => { + if (error ?? !result) return; + window.Telegram.WebApp.CloudStorage.removeItems( + result, + (error, result) => { + if (!error && result) { + setAccounts([]); + encryptionManager?.removePassword(); + setReady(true); + } + } + ); + }); + }, + lastOrder(): number { + return Math.max(...accounts.map((acc) => acc.order)); + }, + reorder(accountId: string, destination: number) { + setAccountsRaw(accounts => { + const source = accounts.findIndex(acc => acc.id == accountId); + if(source == -1 || accounts[source].order === destination) return accounts; + const account = accounts.splice(source, 1)[0]; + accounts.splice(destination, 0, account); + return accounts.map((acc, index) => { + acc.order = index; + return acc; + }); + }); + }, + + }; + + const [keyChanged, setKeyChanged] = useState(false); + + useEffect(() => { + if (!encryptionManager?.oldKey) return; + setKeyChanged(true); + }, [encryptionManager?.oldKey]); + + useEffect(() => { + if (!keyChanged) return; + setKeyChanged(false); + + Object.values(accounts).forEach((account) => { + const encrypted = encryptionManager?.encrypt( + JSON.stringify(account) + ); + if (!encrypted) return; + window.Telegram.WebApp.CloudStorage.setItem( + "account" + account.id, + encrypted + ); + }); + }, [accounts, encryptionManager, keyChanged]); + + const [imported, setImported] = useState(false); + useEffect(() => { + if (!ready || imported) return; + + const param = window.Telegram.WebApp.initDataUnsafe.start_param; + if (!param) return; + + const url = new URL("otpauth-migration://offline"); + url.searchParams.set("data", param); + const accounts = decodeGoogleAuthenticator(url.toString()); + if (!accounts) return; + + const uris = Object.values(storageManager.accounts).map((a) => a.uri); + + storageManager.saveAccounts( + accounts.filter((account) => !uris.includes(account.uri)) + ); + setImported(true); + }, [ready, imported, storageManager]); + + import.meta.env.DEV && + Object.keys(storageManager.accounts).length > 0 && + console.log("Accounts", storageManager.accounts); + + return ( + + {children} + + ); +}; diff --git a/src/migration/export.ts b/src/migration/export.ts index 98a0b72..244b674 100644 --- a/src/migration/export.ts +++ b/src/migration/export.ts @@ -1,8 +1,8 @@ import { Payload } from "./proto/generated/migration.js"; -import {Account} from "../managers/storage.tsx"; +import {AccountBase} from "../managers/storage/storage.tsx"; import {URI} from "otpauth"; -export default function exportGoogleAuthenticator(accounts: Account[]): string { +export default function exportGoogleAuthenticator(accounts: AccountBase[]): string { const otpParameters: Payload.OtpParameters[] = []; for (const account of accounts) { const otp = URI.parse(account.uri); @@ -33,4 +33,4 @@ export default function exportGoogleAuthenticator(accounts: Account[]): string { const data = Payload.encode(payload).finish(); return btoa(String.fromCharCode(...data)); -} \ No newline at end of file +} diff --git a/src/migration/import.ts b/src/migration/import.ts index b4b3608..2557e9a 100644 --- a/src/migration/import.ts +++ b/src/migration/import.ts @@ -1,5 +1,5 @@ import { Payload } from "./proto/generated/migration.js"; -import {Account} from "../managers/storage.tsx"; +import {Account} from "../managers/storage/storage.tsx"; import {Secret, TOTP} from "otpauth"; import {nanoid} from "nanoid"; @@ -52,11 +52,12 @@ export default function decodeGoogleAuthenticator(uri: string): Account[] | null id: nanoid(), label: totp.label, issuer: otp.issuer ?? undefined, - color: "primary", + color: "#1976d2", // primary icon: "key", uri: totp.toString(), + order: -1, }); } return accounts; -} \ No newline at end of file +} diff --git a/src/pages/Accounts.tsx b/src/pages/Accounts.tsx index 06ccc57..54a47f9 100644 --- a/src/pages/Accounts.tsx +++ b/src/pages/Accounts.tsx @@ -1,10 +1,15 @@ -import {FC, useContext, useEffect, useState} from "react"; +import {FC, lazy, useContext, useEffect, useState} from "react"; import { Button, LinearProgress, Stack, Typography, - IconButton, Container, Grid, useTheme, Box + IconButton, + Container, + Grid, + useTheme, + Box, + ThemeProvider, } from "@mui/material"; import copy from 'copy-text-to-clipboard'; import ContentCopyIcon from '@mui/icons-material/ContentCopy'; @@ -14,12 +19,18 @@ import useAccount from "../hooks/useAccount.ts"; import EditIcon from '@mui/icons-material/Edit'; import AccountSelectButton from "../components/AccountSelectButton.tsx"; import NewAccountButton from "../components/NewAccountButton.tsx"; -import {StorageManagerContext} from "../managers/storage.tsx"; -import {icons} from "../globals.tsx"; -import NewAccount from "./NewAccount.tsx"; +import {Account, StorageManagerContext} from "../managers/storage/storage.tsx"; import {EditAccountState} from "./EditAccount.tsx"; import useTelegramHaptics from "../hooks/telegram/useTelegramHaptics.ts"; import {SettingsManagerContext} from "../managers/settings.tsx"; +import useAccountTheme from "../hooks/useAccountTheme.ts"; +import { DndProvider } from "react-dnd-multi-backend"; +import AccountDragPreview from "../components/AccountDragPreview.tsx"; +import {Flipped, Flipper} from "react-flip-toolkit"; +import {HTML5toTouch} from "../drag.ts"; + +const NewAccount = lazy(() => import("./NewAccount.tsx")); +const NewUpdateDialog = lazy(() => import("../components/NewUpdateDialog.tsx")); const Accounts: FC = () => { const navigate = useNavigate(); @@ -32,84 +43,117 @@ const Accounts: FC = () => { const [ selectedAccountId, setSelectedAccountId - ] = useState(null); + ] = useState(settingsManager?.lastSelectedAccount ?? null); + const [ + selectedAccount, + setSelectedAccount + ] = useState(null); useEffect(() => { - if(!storageManager?.accounts || Object.keys(storageManager.accounts).length < 1) return; - if(selectedAccountId !== null && selectedAccountId in storageManager.accounts) return; - const accounts = Object.keys(storageManager.accounts); - const account = settingsManager?.lastSelectedAccount ?? accounts[accounts.length - 1]; - setSelectedAccountId(accounts.includes(account) ? account : accounts[accounts.length - 1]); + if(!storageManager?.accounts || storageManager.accounts.length < 1) return; + if(selectedAccountId !== null && + storageManager.accounts.find(acc => acc.id === selectedAccountId)) return; + const accounts = storageManager.accounts; + setSelectedAccountId(accounts[accounts.length - 1].id); }, [selectedAccountId, storageManager?.accounts, settingsManager?.lastSelectedAccount]); - const selectedAccount = selectedAccountId && storageManager ? storageManager.accounts[selectedAccountId] : null; + useEffect(() => { + setSelectedAccount(storageManager?.accounts.find(acc => acc.id === selectedAccountId) ?? null); + }, [selectedAccountId, storageManager?.accounts]); + + const accountTheme = useAccountTheme(selectedAccount?.color) ?? theme const {code, progress} = useAccount(selectedAccount?.uri); + const [ + animating, + setAnimating + ] = useState>({}); if (storageManager === null || Object.keys(storageManager.accounts).length < 1) { return ; } return - - - - - {selectedAccount?.issuer ? - `${selectedAccount.issuer} (${selectedAccount.label})` : - selectedAccount?.label} - - { - navigate('/edit', {state: { - account: selectedAccount - } as EditAccountState}); - }}> - - - - - - - {code.match(/.{1,3}/g)?.join(" ")} - - { - copy(code); - }}> - - - - - + + + + + + {selectedAccount?.issuer ? + `${selectedAccount.issuer} (${selectedAccount.label})` : + selectedAccount?.label} + + { + navigate('/edit', {state: { + account: selectedAccount + } as EditAccountState}); + }}> + + + - - - {Object.values(storageManager.accounts).map((account) => ( - - { - settingsManager?.setLastSelectedAccount(account.id); - setSelectedAccountId(account.id); - selectionChanged(); - }} - color={account.color}/> - - ))} - - - - - - + + + + {code.match(/.{1,3}/g)?.join(" ")} + + { + copy(code); + }}> + + + + + + + + a.id).join("")}> + + {storageManager.accounts.map((account, index) => ( + { + setAnimating(anim => ({...anim, [account.id]: true})) + }} + onComplete={() => { + setAnimating(anim => ({...anim, [account.id]: false})) + }}> + + { + settingsManager?.setLastSelectedAccount(account.id); + setSelectedAccountId(account.id); + selectionChanged(); + }} + color={account.color}/> + + + ))} + + + + + + + + + + + + + + + + + + + + Key + Value + Action + + + + {cloud && + Object.entries(cloud).map(([key, val]) => ( + + + {key} + + + {tryParse(val, !showEncrypted)} + + + + + + + ))} + +
+
+ + + + + Migration + +
+ {setColor(color.hex)}} /> + +
+ + + +
{APP_VERSION}
+ + ); +} diff --git a/src/pages/EditAccount.tsx b/src/pages/EditAccount.tsx index 058196f..aab2a95 100644 --- a/src/pages/EditAccount.tsx +++ b/src/pages/EditAccount.tsx @@ -1,7 +1,7 @@ import {useLocation, useNavigate} from "react-router-dom"; -import {useContext, useState} from "react"; -import {Account, StorageManagerContext} from "../managers/storage.tsx"; -import {Color, Icon} from "../globals.tsx"; +import {Ref, createRef, useContext, useState} from "react"; +import {Account, StorageManagerContext} from "../managers/storage/storage.tsx"; +import {Icon} from "../globals.tsx"; import useTelegramMainButton from "../hooks/telegram/useTelegramMainButton.ts"; import {Button, Stack, Typography} from "@mui/material"; import LottieAnimation from "../components/LottieAnimation.tsx"; @@ -18,16 +18,21 @@ export interface EditAccountState { export default function EditAccount() { const navigate = useNavigate(); const location = useLocation(); - const { notificationOccurred, } = useTelegramHaptics(); + const { notificationOccurred } = useTelegramHaptics(); const state = location.state as EditAccountState; const storageManager = useContext(StorageManagerContext); const [issuer, setIssuer] = useState(state.account.issuer); const [label, setLabel] = useState(state.account.label); const [selectedIcon, setSelectedIcon] = useState(state.account.icon); - const [selectedColor, setSelectedColor] = useState(state.account.color); + const [selectedColor, setSelectedColor] = useState(state.account.color); + const labelInput: Ref = createRef(); useTelegramMainButton(() => { + if (!label || !labelInput.current?.checkValidity()) { + window.Telegram.WebApp.showAlert("Label field cannot be empty!"); + return false; + } storageManager?.saveAccount({ ...state.account, color: selectedColor, @@ -48,8 +53,10 @@ export default function EditAccount() { Modify account information { setLabel(e.target.value); @@ -88,4 +95,4 @@ export default function EditAccount() { Delete account ; -} \ No newline at end of file +} diff --git a/src/pages/ExportAccounts.tsx b/src/pages/ExportAccounts.tsx index 9e60c7f..0c7c036 100644 --- a/src/pages/ExportAccounts.tsx +++ b/src/pages/ExportAccounts.tsx @@ -1,5 +1,5 @@ import {CircularProgress, Stack} from "@mui/material"; -import {StorageManagerContext} from "../managers/storage.tsx"; +import {StorageManagerContext} from "../managers/storage/storage.tsx"; import {useContext, useEffect} from "react"; import exportGoogleAuthenticator from "../migration/export.ts"; import {PlausibleAnalyticsContext} from "../components/PlausibleAnalytics.tsx"; @@ -10,7 +10,7 @@ export default function ExportAccounts() { useEffect(() => { if (!storageManager?.accounts || !storageManager.ready || !analytics) return; analytics.trackEvent("Account export"); - window.Telegram.WebApp.sendData(exportGoogleAuthenticator(Object.values(storageManager.accounts))); + window.Telegram.WebApp.sendData(exportGoogleAuthenticator(storageManager.accounts)); }, [storageManager?.accounts, storageManager?.ready, analytics]); return ; -} \ No newline at end of file +} diff --git a/src/pages/IconBrowser.tsx b/src/pages/IconBrowser.tsx new file mode 100644 index 0000000..c942a59 --- /dev/null +++ b/src/pages/IconBrowser.tsx @@ -0,0 +1,198 @@ +import {FC, useCallback, useEffect, useMemo, useState} from "react"; +import { + CircularProgress, + Link, + List, + ListItemButton, + ListItemIcon, + ListItemText, + Stack, + Typography, +} from "@mui/material"; +import LottieAnimation from "../components/LottieAnimation.tsx"; +import TelegramTextField from "../components/TelegramTextField.tsx"; +import MagnificationGlass from "../assets/magnification_glass_lottie.json"; +import { useLocation, useNavigate } from "react-router-dom"; +import SVG from "react-inlinesvg"; +import Fuse from "fuse.js/min-basic"; +import { useDebounce } from "use-debounce"; +import { EditAccountState } from "./EditAccount.tsx"; +import {ICONS_DATA_URL, iconUrl, titleToIconSlug} from "../icons/icons.ts"; +import {NewAccountState} from "./CreateAccount.tsx"; + +interface IconData { + title: string; + hex: string; + source: string; + aliases?: { + aka?: string[]; + loc?: Record; + old?: string[]; + dup?: { + title: string; + hex?: string; + source?: string; + loc?: Record; + }[]; + }; + guidelines?: string; + license?: { + type: string; + url?: string; + }; + slug?: string; +} + +interface IconsData { + icons: IconData[]; +} + +const IconsList: FC & { searchQuery: string }> = ({ + icons, + searchQuery, +}) => { + const navigate = useNavigate(); + const location = useLocation(); + const isFromEditing = location.state.account !== undefined; + const state = useCallback((icon: string, color: string): EditAccountState | NewAccountState => { + if(isFromEditing) { + const state = location.state as EditAccountState; + return { + account: { + ...state.account, + ...{ + icon, + color, + }, + }, + }; + } else { + const state = location.state as NewAccountState; + return { + ...state, + icon, color + }; + } + }, [isFromEditing]); + const fuse = useMemo( + () => + new Fuse(icons, { + keys: ["title", "slug", "aliases.aka", "aliases.old", "aliases.loc", "aliases.dup"], + shouldSort: true, + }), + [icons] + ); + const filtered = fuse.search(searchQuery, { limit: 10 }); + + return ( + + {filtered.map(({ item }) => ( + { + navigate(isFromEditing ? "/edit" : "/create", { + state: state(item.slug ?? titleToIconSlug(item.title), `#${item.hex}`), + }); + }} + > + + } + src={iconUrl(item.slug ?? titleToIconSlug(item.title))} + fill={`#${item.hex}`} + > + + + + ))} + + ); +}; + +const IconBrowser: FC = () => { + const [phrase, setPhrase] = useState(""); + const [query] = useDebounce(phrase, 1000); + const [verified, setVerified] = useState(true); + const [searching, setSearching] = useState(false); + const [iconsData, setIconsData] = useState(); + useEffect(() => { + void caches.open("teleotp").then(async (cache) => { + const cachedData = await cache.match(ICONS_DATA_URL); + if (cachedData?.ok) { + setIconsData(await cachedData.json()); + } else { + await cache.add(ICONS_DATA_URL); + const _cachedData = await cache.match(ICONS_DATA_URL); + if (_cachedData?.ok) setIconsData(await _cachedData.json()); + else { + window.Telegram.WebApp.showAlert( + "Error when fetching icons data, please retry later" + ); + } + } + }); + }, []); + + useEffect(() => { + if (verified && phrase.length > 2) { + setSearching(true); + } else { + setSearching(false); + } + }, [phrase]); + + return ( + <> + + + Browse icons + + { + const value = e.target.value; + setPhrase(value); + setVerified(value.trim().length >= 2); + }} + /> + {!searching && ( + <> + + Start typing to search + + + + )} + {searching && iconsData && ( + + )} + + Icons provided by{" "} + + @simpleicons + + + + + ); +}; + +export default IconBrowser; diff --git a/src/pages/ManualAccount.tsx b/src/pages/ManualAccount.tsx index b9b4435..0ad1c3d 100644 --- a/src/pages/ManualAccount.tsx +++ b/src/pages/ManualAccount.tsx @@ -4,7 +4,7 @@ import ManualAnimation from "../assets/manual_lottie.json"; import useTelegramMainButton from "../hooks/telegram/useTelegramMainButton.ts"; import {useNavigate} from "react-router-dom"; import {NewAccountState} from "./CreateAccount.tsx"; -import {TOTP} from "otpauth"; +import {Secret, TOTP} from "otpauth"; import TelegramTextField from "../components/TelegramTextField.tsx"; import LottieAnimation from "../components/LottieAnimation.tsx"; @@ -12,8 +12,9 @@ export default function ManualAccount() { const [secret, setSecret] = useState(""); const [invalid, setInvalid] = useState(false); const navigate = useNavigate(); - useTelegramMainButton(() => { - if(secret.length < 1) { + + function createAccount() { + if(Secret.fromBase32(secret).buffer.byteLength < 1) { setInvalid(true); return false; } @@ -30,7 +31,9 @@ export default function ManualAccount() { return false; } - }, "Next"); + } + + useTelegramMainButton(createAccount, "Next"); return @@ -41,6 +44,7 @@ export default function ManualAccount() { Enter provided account secret ; -} \ No newline at end of file +} diff --git a/src/pages/NewAccount.tsx b/src/pages/NewAccount.tsx index f9cbf2a..ac191c6 100644 --- a/src/pages/NewAccount.tsx +++ b/src/pages/NewAccount.tsx @@ -9,7 +9,7 @@ import {HOTP, URI} from "otpauth"; import LottieAnimation from "../components/LottieAnimation.tsx"; import decodeGoogleAuthenticator from "../migration/import.ts"; import useTelegramHaptics from "../hooks/telegram/useTelegramHaptics.ts"; -import {StorageManagerContext} from "../managers/storage.tsx"; +import {StorageManagerContext} from "../managers/storage/storage.tsx"; const NewAccount: FC = () => { const navigate = useNavigate(); @@ -32,6 +32,7 @@ const NewAccount: FC = () => { } if (otp instanceof HOTP) { + // TODO implement HOTP window.Telegram.WebApp.showAlert("HOTP support is not implemented yet :("); notificationOccurred("error"); return; @@ -80,4 +81,4 @@ const NewAccount: FC = () => { ; } -export default NewAccount; \ No newline at end of file +export default NewAccount; diff --git a/src/pages/PasswordSetup.tsx b/src/pages/PasswordSetup.tsx index 9e4bd27..d98eb65 100644 --- a/src/pages/PasswordSetup.tsx +++ b/src/pages/PasswordSetup.tsx @@ -79,4 +79,4 @@ const PasswordSetup: FC<{change?: boolean}> = ({change = false}) => { ; } -export default PasswordSetup; \ No newline at end of file +export default PasswordSetup; diff --git a/src/pages/ResetAccounts.tsx b/src/pages/ResetAccounts.tsx index 8c83e3f..5c2f5db 100644 --- a/src/pages/ResetAccounts.tsx +++ b/src/pages/ResetAccounts.tsx @@ -1,6 +1,6 @@ import {FC, useContext, useState} from "react"; import {Stack, Typography} from "@mui/material"; -import {StorageManagerContext} from "../managers/storage.tsx"; +import {StorageManagerContext} from "../managers/storage/storage.tsx"; import useTelegramMainButton from "../hooks/telegram/useTelegramMainButton.ts"; import LottieAnimation from "../components/LottieAnimation.tsx"; import TelegramTextField from "../components/TelegramTextField.tsx"; diff --git a/src/pages/Settings.tsx b/src/pages/Settings.tsx index a1cc5f6..788b16a 100644 --- a/src/pages/Settings.tsx +++ b/src/pages/Settings.tsx @@ -1,20 +1,21 @@ -import {FC, useContext} from "react"; -import {ButtonBase, Link, Stack, Typography, useTheme} from "@mui/material"; -import {StorageManagerContext} from "../managers/storage.tsx"; -import {EncryptionManagerContext} from "../managers/encryption.tsx"; -import LockOutlinedIcon from '@mui/icons-material/LockOutlined'; -import KeyOutlinedIcon from '@mui/icons-material/KeyOutlined'; -import LogoutOutlinedIcon from '@mui/icons-material/LogoutOutlined'; -import PersonOutlineOutlinedIcon from '@mui/icons-material/PersonOutlineOutlined'; -import CloseOutlinedIcon from '@mui/icons-material/CloseOutlined'; -import FileDownloadOutlinedIcon from '@mui/icons-material/FileDownloadOutlined'; +import { FC, useContext } from "react"; +import { ButtonBase, Link, Stack, Typography, useTheme } from "@mui/material"; +import { StorageManagerContext } from "../managers/storage/storage.tsx"; +import { EncryptionManagerContext } from "../managers/encryption.tsx"; +import LockOutlinedIcon from "@mui/icons-material/LockOutlined"; +import KeyOutlinedIcon from "@mui/icons-material/KeyOutlined"; +import LogoutOutlinedIcon from "@mui/icons-material/LogoutOutlined"; +import PersonOutlineOutlinedIcon from "@mui/icons-material/PersonOutlineOutlined"; +import CloseOutlinedIcon from "@mui/icons-material/CloseOutlined"; +import FileDownloadOutlinedIcon from "@mui/icons-material/FileDownloadOutlined"; import FingerprintIcon from '@mui/icons-material/Fingerprint'; -import {SvgIconComponent} from "@mui/icons-material"; +import {Newspaper,SvgIconComponent} from "@mui/icons-material"; import {useNavigate} from "react-router-dom"; import {SettingsManagerContext} from "../managers/settings.tsx"; import useTelegramHaptics from "../hooks/telegram/useTelegramHaptics.ts"; import {BiometricsManagerContext} from "../managers/biometrics.tsx"; import {PlausibleAnalyticsContext} from "../components/PlausibleAnalytics.tsx"; +import { Link as RouterLink } from "react-router-dom"; interface OptionParams { onClick(): void; @@ -33,28 +34,30 @@ const SettingsOption: FC = ({ onClick, const Icon = icon; return - + {text} - {value} + + {value} + ; } @@ -68,16 +71,41 @@ const Settings: FC = () => { const encryptionManager = useContext(EncryptionManagerContext); const settingsManager = useContext(SettingsManagerContext); const analytics = useContext(PlausibleAnalyticsContext); + return ( + + + General + + { + window.Telegram.WebApp.openTelegramLink(import.meta.env.VITE_CHANNEL_LINK); + }} + text="TeleOTP News" + value="Open" + icon={Newspaper} + /> - return - - Security - - { navigate("/changePassword"); }} - text="Password" - value="Change" - icon={LockOutlinedIcon}/> + + Security + + { + navigate("/changePassword"); + }} + text="Password" + value="Change" + icon={LockOutlinedIcon} + /> { @@ -108,39 +136,91 @@ const Settings: FC = () => { disabled={!biometricsManager?.isAvailable} icon={FingerprintIcon}/> - { - encryptionManager?.lock(); - }} text="Lock accounts" icon={LogoutOutlinedIcon}/> + { + encryptionManager?.lock(); + }} + text="Lock accounts" + icon={LogoutOutlinedIcon} + /> - - Accounts - - { navigate("/") }} - text="Accounts" - value={storageManager ? Object.keys(storageManager.accounts).length.toString() : "0"} - icon={PersonOutlineOutlinedIcon}/> + + Accounts + + { + navigate("/"); + }} + text="Accounts" + value={ + storageManager + ? storageManager.accounts.length.toString() + : "0" + } + icon={PersonOutlineOutlinedIcon} + /> - { - window.Telegram.WebApp.openTelegramLink(`https://t.me/${import.meta.env.VITE_BOT_USERNAME}?start=export`); - }} - text="Export accounts" - icon={FileDownloadOutlinedIcon}/> + { + window.Telegram.WebApp.openTelegramLink( + `https://t.me/${ + import.meta.env.VITE_BOT_USERNAME + }?start=export` + ); + }} + text="Export accounts" + icon={FileDownloadOutlinedIcon} + /> - { - notificationOccurred("warning"); - navigate("/reset"); - }} text="Remove all accounts" icon={CloseOutlinedIcon}/> + { + notificationOccurred("warning"); + navigate("/reset"); + }} + text="Remove all accounts" + icon={CloseOutlinedIcon} + /> - - TeleOTP
- Version: {APP_VERSION}
- - GitHub repository - -
-
-} + + TeleOTP +
+ Version: {APP_VERSION} +
+ + Star us on GitHub + + {import.meta.env.DEV && ( + <> +
+ + + Dev tools + + + + )} +
+
+ ); +}; -export default Settings; \ No newline at end of file +export default Settings; diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts index f49c8be..24b5e2e 100644 --- a/src/vite-env.d.ts +++ b/src/vite-env.d.ts @@ -4,8 +4,10 @@ declare const APP_HOMEPAGE: string; interface ImportMetaEnv { readonly VITE_BOT_USERNAME: string; + readonly VITE_CHANNEL_LINK: string; readonly VITE_PLAUSIBLE_API_HOST: string; readonly VITE_PLAUSIBLE_DOMAIN: string; + readonly BASE_URL: string } interface ImportMeta { diff --git a/tsconfig.json b/tsconfig.json index a7fc6fb..829fdc8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -18,7 +18,8 @@ "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true + "noFallthroughCasesInSwitch": true, + "useUnknownInCatchVariables": false }, "include": ["src"], "references": [{ "path": "./tsconfig.node.json" }] diff --git a/vite.config.ts b/vite.config.ts index d8b6cde..3b57006 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,14 +1,20 @@ -import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react' -import packageJson from './package.json'; +/// + +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; +import packageJson from "./package.json"; import svgr from "vite-plugin-svgr"; // https://vitejs.dev/config/ export default defineConfig({ - plugins: [react(), svgr()], - define: { - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - APP_VERSION: JSON.stringify(process.env.npm_package_version), - APP_HOMEPAGE: JSON.stringify(packageJson.homepage), - }, -}) + plugins: [react(), svgr()], + define: { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + APP_VERSION: JSON.stringify(packageJson.version), + APP_HOMEPAGE: JSON.stringify(packageJson.homepage), + }, + test: { + globals: true, + environment: "jsdom", + }, +});